在sklearn.svm.SVC(kernel='rbf')分类器上使用learning_curve的Spurious ValueError



在svm.SVC(kernel='rbf')分类器上使用learning_curve时,我得到了奇怪的ValueError。

我正在使用:

from sklearn import svm
from sklearn import cross_validation, datasets, preprocessing
clf=svm.SVC(kernel='rbf')
cv=cross_validation.StratifiedKFold(y, n_folds=10)
for enum, (train, test) in enumerate(cv):
      print("Fold {0}, classes in train {1}, t classes in test {2}".format(enum, set(y[train]), set(y[test])))
train_sizes, train_scores, test_scores = learning_curve(
    clf, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)

我可以看到,训练集和测试集都有类。

Fold 0, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 1, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 2, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 3, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 4, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 5, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 6, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 7, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 8, classes in train set([0, 1]),    classes in test set([0, 1])
Fold 9, classes in train set([0, 1]),    classes in test set([0, 1])

但是我得到以下错误:

ValueError: The number of classes has to be greater than one; got 1

有人能帮忙找到一个解决方案吗?谢谢!

这看起来很可能是由learning_curve引起的,它在数据的不同大小的子样本上重新训练模型;默认情况下,样本量为train_sizes=array([ 0.1, 0.33, 0.55, 0.78, 1. ]),根据您的数据,您可以通过省略较小的部分来解决问题,例如通过设置train_sizes=array([0.55, 0.78, 1. ]),您还应该考虑减少交叉验证中的折叠次数。

最新更新