交叉验证和模型选择

Cross validation and model selection

我正在使用 sklearn 进行 SVM 训练。我正在使用交叉验证来评估估计器并避免过度拟合模型。

我把数据分成两部分。训练数据和测试数据。这是代码:

import numpy as np
from sklearn import cross_validation
from sklearn import datasets
from sklearn import svm

X_train, X_test, y_train, y_test = cross_validation.train_test_split(
    iris.data, iris.target, test_size=0.4, random_state=0
)
clf = svm.SVC(kernel='linear', C=1)
scores = cross_validation.cross_val_score(clf, X_train, y_train, cv=5)
print scores

现在我需要在 X_test 上评估估计器 clf

clf.score(X_test, y_test)

这里,我收到一条错误消息,指出 模型未使用 fit() 拟合,但通常情况下,在 cross_val_score 函数中模型已拟合?有什么问题?

cross_val_score is basically a convenience wrapper for the sklearn cross-validation iterators. You give it a classifier and your whole (training + validation) dataset and it automatically performs one or more rounds of cross-validation by splitting your data into random training/validation sets, fitting the training set, and computing the score on the validation set. See the documentation here 示例和更多解释。

clf.score(X_test, y_test) 引发异常的原因是因为 cross_val_score 在估计器的 copy 上执行拟合而不是原始的(参见使用源代码 clone(estimator) 中的 here)。因此,clf 在函数调用之外保持不变,因此在您调用 clf.fit.

时未正确初始化