在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. ])
,您还应该考虑减少交叉验证中的折叠次数。