训练具有交叉验证的分类器

使用 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)