训练scikit SVM,定制评分评估

时间:2013-07-06 02:27:07

标签: python svm scikit-learn

我计划使用scikit svm进行课堂预测。 我有一个由大约100个实验组成的两类数据集。每个实验都封装了我的数据点(向量)+分类。 根据{{​​3}}训练SVM应该是直截了当的。 我将不得不将所有向量放在一个数组中,并使用相应的类标签生成另一个数组,训练SVM。但是,为了运行留一法错误估计,我需要省略一个特定的向量子集 - 一个实验。 如何使用可用的分数功能实现这一目标?

干杯, EL

1 个答案:

答案 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-outanother 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 guidecross_val_score实际上每个折叠都会返回一个分数(IMO有点奇怪),但由于我们每次观察有一次折叠,如果错误则为0,如果是正确则为1。

当然,留一法很慢并且具有可怕的统计属性来启动,所以你应该使用KFold代替。

相关问题