交叉验证和模型选择



我正在使用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)

在这里,我收到一个错误,说

the model is not fitted using fit()

但通常情况下,在cross_val_score函数中,模型是拟合的?问题出在哪里?

cross_val_score基本上是 sklearn 交叉验证迭代器的方便包装器。你给它一个分类器和你的整个(训练+验证(数据集,它会自动执行一轮或多轮交叉验证,方法是将数据拆分为随机训练/验证集,拟合训练集,并计算验证集上的分数。有关示例和更多说明,请参阅此处的文档。

clf.score(X_test, y_test)引发异常的原因是cross_val_score在估算器的副本而不是原始副本上执行拟合(请参阅此处源代码中clone(estimator)的使用(。因此,clf在函数调用之外保持不变,因此在调用 clf.fit 时未正确初始化。

相关内容

  • 没有找到相关文章

最新更新