scikit-learn 使用交叉验证训练分类器

示例

使用虹膜数据集:

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

数据分为训练集和测试集。要做到这一点,我们使用train_test_split效用函数来分割双方X和y(数据和目标矢量)用随机选择train_size=0.75(训练集包含数据的75%)。

训练数据集被输入到k最近邻分类器中。fit分类器的方法将使模型适合数据。

fromsklearn.cross_validationimport train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size=0.75) 
fromsklearn.neighborsimport 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)。

fromsklearn.cross_validationimport 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)