一、交叉驗證
機器學習是一個經驗性的學科,我們需要用數據去檢驗算法的效果。而在實際應用中,我們通常無法知道真實的預測誤差,所以我們需要從樣本集中分離出一部分數據作為測試集,用來估計算法的預測效果。但是測試集只有一份,如果只對算法進行一次測試,評估結果可能會與真實值產生偏差。為了避免這種情況,我們可以使用交叉驗證的方法,將樣本集分成若干個子集,輪流使用每個子集作為測試集,其他子集作為訓練集,計算多個評估結果的平均值。
二、cross_val_score函數
Scikit-learn提供了cross_val_score函數來實現交叉驗證。該函數的主要參數包括估計器、特徵矩陣、標籤集合、分割器、評估指標等。其中分割器和評估指標可以設置多種取值,本文將詳細介紹。
三、分割器參數
分割器參數是用來將樣本集分成若干個子集的。Scikit-learn提供了多種分割器:
KFold(n_splits=’warn’, shuffle=False, random_state=None) StratifiedKFold(n_splits=’warn’, shuffle=False, random_state=None) GroupKFold(n_splits=’warn’) LeaveOneOut() LeavePOut(p=1) LeaveOneGroupOut() LeavePGroupsOut(n_groups=2) ShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None) GroupShuffleSplit(n_splits=’warn’) StratifiedShuffleSplit(n_splits=10, test_size=’default’, train_size=None, random_state=None) PredefinedSplit(test_fold)
其中,KFold和StratifiedKFold是最常用的分割器。KFold將樣本集平均分成K份,輪流使用每份數據作為測試集,其他數據作為訓練集,返回K個預測分數。StratifiedKFold和KFold類似,但它會根據標籤分配樣本,保證每個測試集中正樣本和負樣本的比例相同。
四、評價指標參數
評價指標參數用來衡量估計器預測效果的標準。Scikit-learn提供了多種評價指標:
accuracy r2 neg_mean_squared_error neg_mean_absolute_error explained_variance mean_absolute_error mean_squared_error median_absolute_error
其中,accuracy是分類模型的評價指標,用于衡量正確分類的樣本數佔總樣本數的比例;r2是回歸模型的評價指標,用于衡量模型對觀察數據的方差進行了多少解釋;neg_mean_squared_error和neg_mean_absolute_error是回歸模型的評價指標,用于衡量模型預測結果的均方誤差和平均絕對誤差;explained_variance是回歸模型的評價指標,用于衡量模型預測結果與真實結果的方差之比;mean_absolute_error、mean_squared_error和median_absolute_error是回歸模型的評價指標,用于衡量模型預測結果與真實結果的誤差。
五、示例代碼
下面是一個使用cross_val_score函數的示例代碼:
from sklearn.datasets import load_iris from sklearn.model_selection import cross_val_score from sklearn.tree import DecisionTreeClassifier iris = load_iris() X, y = iris.data, iris.target dt = DecisionTreeClassifier() scores = cross_val_score(dt, X, y, cv=5, scoring='accuracy') print('Accuracy: %0.2f (+/- %0.2f)' % (scores.mean(), scores.std() * 2))
本示例將使用決策樹分類器對鳶尾花數據集進行分類,採用5折交叉驗證並使用accuracy指標評價模型。其中,cv參數為分割器參數,指定使用5折交叉驗證;scoring參數為評價指標參數,指定使用accuracy指標評價預測效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/272003.html