我计划使用scikit svm进行课堂预测。 我有一个由大约100个实验组成的两类数据集。每个实验都封装了我的数据点(向量)+分类。 根据{{3}}训练SVM应该是直截了当的。 我将不得不将所有向量放在一个数组中,并使用相应的类标签生成另一个数组,训练SVM。但是,为了运行留一法错误估计,我需要省略一个特定的向量子集 - 一个实验。 如何使用可用的分数功能实现这一目标?
干杯, EL
答案 0 :(得分:5)
您可以手动训练除了一个观察之外的所有内容,使用numpy索引将其删除。然后,您可以使用any of sklearn's helpers来评估分类。例如:
import numpy as np
from sklearn import svm
clf = svm.SVC(...)
idx = np.arange(len(observations))
preds = np.zeros(len(observations))
for i in idx:
is_train = idx != i
clf.fit(observations[is_train, :], labels[is_train])
preds[i] = clf.predict(observations[i, :])
或者,scikit-learn有a helper to do leave-one-out和another helper to get cross-validation scores:
from sklearn import svm, cross_validation
clf = svm.SVC(...)
loo = cross_validation.LeaveOneOut(len(observations))
was_right = cross_validation.cross_val_score(clf, observations, labels, cv=loo)
total_acc = np.mean(was_right)
有关详情,请参阅the user's guide。 cross_val_score
实际上每个折叠都会返回一个分数(IMO有点奇怪),但由于我们每次观察有一次折叠,如果错误则为0,如果是正确则为1。
当然,留一法很慢并且具有可怕的统计属性来启动,所以你应该使用KFold
代替。