一、機器學習算法分類:
監督學習:提供數據和數據分類標簽。——分類、回歸
非監督學習:只提供數據,不提供標簽。
半監督學習
強化學習:嘗試各種手段,自己去適應環境和規則。總結經驗利用反饋,不斷提高算法質量
遺傳算法:淘汰弱者,留下強者,進行繁衍和變異穿產生更好的算法。
二、選擇機器學習算法和數據集
sklearn中有很多真實的數據集可以引入,也可以根據自己的需求自動生成多種數據集。對於數據集可以對其進行歸一化處理。
sklearn中的有着多種多樣的算法,每一種算法都有其適用的場合、不同的屬性和功能,按需選擇。
三、評價機器學習算法:
1、算法效果不好:在訓練過程中,可能因為數據集問題,學習效率,參數問題可能導致算法效果不好。
2、評價學習算法:將數據集分為訓練集和測試集,根據算法在測試集上的表現評價算法,隨着訓練時間變長,網絡層數變多,誤差變小,精確度變高,但是變化的速度都是減緩的。
不同的模型有着是個自己的不同的評分方法:
R2-score:衡量回歸問題的精度。最大精度也是100%
F1-score:用於測量不均衡數據的精度。
3、交叉驗證用於調參(手動寫循環):用於算法的調參(不同的參數也就是不同的模型)。
用交叉驗證的方法進行調參或者模型選擇時不需要手動划分用於k折驗證的數據集,只需要將X和Y,還有k作為參數傳進去即可:
#for regreesion losss=-cross_val_score(knn,X,y,cv=10,scoring=’mean_squared_error’) #for classification scores=cross_val_score(knn,X,y,cv=10,scoring=’accuracy’)
交叉驗證時,對於模型的評分,分類時用精確度accuracy來衡量模型表現,回歸時用損失值mean_squard_error來衡量模型表現。
losss和 scores是兩個數組,數組的長度為交叉驗證的分割份數。
可使用scores.mean()來得到交叉驗證的平均分數。
改變Knn中的參數值,根據交叉驗證的得分高低來選擇合適的模型參數。
4、learn_curve曲線用於過擬合問題:橫軸數據量,縱軸模型得分
過擬合:對於樣本的過度學習,過分關注樣本的細節。
解決過擬合:L1/L2 regularization,dropout(留出法)
為了找出欠擬合和過擬合的節點我們可以繪制learn_curve曲線,這是一個根據數據量不同顯示算法性能的圖。顯示了過擬合問題的兩種誤差:藍色是traindata的算法表現,紅色是testdata的算法表現。因為模型是基於traindata進行訓練的,所以其在traindata上的表現更好一些。
train_sizes,train_loss,test_loss=learning_curve( SVC(gramma=0.001), X, y, Cv=10. Scoring=’mean_squard_error’, Train_sizes=[0.1,0.25,0.5,0.75,1]) Train_loss_mean=-np.mean(train_loss,axis=1) #10次交叉驗證結果取平均 Test_loss_mean=-np.mean(test_loss,axis=1)
train_loss,test_loss是二維數組,長度為5,即為Train_sizes的步數
train_loss[0]是一個數組,存放0.1數據量時10個交叉驗證的結果。
如上圖所示,黃色警告處即為欠擬合和過擬合的分界點處。
5、使用交叉驗證validation_curve自動調參:橫坐標是模型參數,縱坐標是模型交叉驗證得分
param_range = np.logspace(-6, -2.3, 5) train_loss, test_loss = validation_curve( SVC(), X, y, param_name='gamma', param_range=param_range, cv=10, scoring='mean_squared_error') train_loss_mean = -np.mean(train_loss, axis=1) test_loss_mean = -np.mean(test_loss, axis=1) plt.plot(param_range, train_loss_mean, 'o-', color="r", label="Training") plt.plot(param_range, test_loss_mean, 'o-', color="g", label="Cross-validation") plt.xlabel("gamma") plt.ylabel("Loss") plt.legend(loc="best") plt.show()
train_loss,test_loss是二維數組,長度為參數的取值個數
train_loss[0]是一個數組,存放參數為某一個值時10個交叉驗證的結果。
以模型參數為橫坐標,以模型交叉驗證得分為縱坐標繪圖,最低點即為最佳參數。