我使用scikit-learn(http://scikit-learn.org/stable/modules/cross_validation.html)了解交叉验证
我的代码:
from sklearn.cross_validation import train_test_split
from sklearn.cross_validation import cross_val_score
from sklearn import datasets
from sklearn import svm
iris = datasets.load_iris()
# prepare sets
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)
# create model
clf1 = svm.SVC(kernel='linear', C=1)
# train model
scores = cross_val_score(clf1, x_train, y_train, cv=5)
# accuracy on train data
print("Accuracy: %0.2f (+/- %0.2f)" % (scores.mean(), scores.std() * 2))
# accuracy on yet-unseen data
print clf1.score(x_test, y_test)
据我所知,通过交叉验证,我们可以使用整个数据集来训练和验证,例如scikit doc中的示例。如果我想在交叉验证后对数据进行评分怎么办?我假设我的模型经过交叉验证学习后经过培训。在使用score()
时我得到了
raise NotFittedError(msg % {'name': type(estimator).__name__})
sklearn.utils.validation.NotFittedError: This SVC instance is not fitted yet. Call 'fit' with appropriate arguments before using this method.
在doc中有方法段落3.1.1.1,其中提到cross_val_predict
我可以使用它,但为什么我需要cv参数(这是折叠号)而我只是想检查训练模型的准确性?
我会感激任何提示。
答案 0 :(得分:1)
这是一个完成工作的代码,逐步解释它是如何工作的。
首先,让我们导入必要的模块:
In [204]: from sklearn.model_selection import cross_val_score, StratifiedKFold
In [205]: from sklearn import datasets
In [206]: from sklearn import svm
您应确定已安装 scikit-learn 0.18 ,否则以下代码可能无效。请注意,我使用的是sklearn.model_selection
而不是sklearn.cross_validation
,因为后者在版本0.18中已弃用。
然后我们加载虹膜数据集并分别使用功能和标签创建数组X
和y
In [207]: iris = datasets.load_iris()
In [208]: X, y = iris.data, iris.target
在下一步中,我们将创建C-Support Vector Classification类的实例:
In [209]: clf = svm.SVC(kernel='linear', C=1)
现在我们创建一个分层K-Folds验证器,它将数据集分成5个不相交的子集,即A,B,C,D和E.这五个分层是分层的,这意味着A中每个类的样本比例,B,C,D和E与整个数据集中的相同。
In [210]: skf = StratifiedKFold(n_splits=5, random_state=0)
最后,我们通过5个分类试验估计了泛化的准确性:
In [211]: scores = cross_val_score(clf, X, y, cv=skf)
In [212]: scores
Out[212]: array([ 0.9667, 1. , 0.9667, 0.9667, 1. ])
In [213]: scores.mean()
Out[213]: 0.98000000000000009
5折叠交叉验证可归纳如下:
Classification No. Training Samples Test Samples Accuracy
1 A + B + C + D E 0.9667
2 A + B + C + E D 1.
3 A + B + D + E C 0.9667
4 A + C + D + E B 0.9667
5 B + C + D + E A 1.
从上表中可以清楚地看出,每个样本都使用了四次进行培训,并且只进行了一次测试。
回复您的其他评论: