訓練具有交叉驗證的分類器

使用 iris 資料集:

import sklearn.datasets
iris_dataset = sklearn.datasets.load_iris()
X, y = iris_dataset['data'], iris_dataset['target']

資料分為訓練集和測試集。為此,我們使用 train_test_split 效用函式隨機選擇 Xy(資料和目標向量),選項 train_size=0.75(訓練集包含 75%的資料)。

訓練資料集被饋送到 k-最近鄰分類器 。分類器的方法 fit 將使模型適合資料。

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75) 
from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=3)
clf.fit(X_train, y_train)

最後預測測試樣品的質量:

clf.score(X_test, y_test) # Output: 0.94736842105263153

通過使用一對列車和測試集,由於資料分割的任意選擇,我們可能得到分類器質量的偏差估計。通過使用*交叉驗證,*我們可以將分類器擬合到資料的不同列車/測試子集上,並對所有準確度結果進行平均。函式 cross_val_score 使用交叉驗證將分類器擬合到輸入資料。它可以將要使用的不同分割(摺疊)的數量作為輸入(在下面的示例中為 5)。

from sklearn.cross_validation import cross_val_score
scores = cross_val_score(clf, X, y, cv=5)
print(scores)
# Output: array([ 0.96666667,  0.96666667,  0.93333333,  0.96666667,  1.        ])
print "Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() / 2)
# Output: Accuracy: 0.97 (+/- 0.03)