我在某些数据上使用RBF SVM。我的数据(类)如下:
print len(y),y
返回:
120 [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1]
然而,当我运行此代码来绘制学习曲线时,我得到一个值错误,声称只有一个类UPDATE:错误有所改变,请检查注释:
from sklearn.learning_curve import learning_curve
CV = cross_validation.StratifiedKFold(y, n_folds=10, shuffle = True)
def plot_learning_curve(estimator, title, X, y, ylim=None, cv=CV,
n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5)):
plt.figure()
train_sizes, train_scores, test_scores = learning_curve(
estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes)
plt.grid()
return plt
title = "Learning Curves (SVM, RBF kernel)"
plot_learning_curve(clf, title, val, y, cv=CV, n_jobs=1)
plt.show()
编辑:在对代码进行一些更改后,经过一些评论后,我更新了此处看到的代码
更新:现在这是错误的当前状态:
ValueError: The number of classes has to be greater than one; got 1
答案 0 :(得分:1)
管理让它工作,不能说我知道错误的确切问题。但它似乎归结为train_sizes,尽管使用了StratifiedKFold,我认为它仍然以仅包含1类的测试集结束。它的修复方式只是改变列车大小的值范围,直到错误不再出现为止!
我认为这取决于样本大小和折叠数量,因为即使你低于错误代码给出的范围,(通过有目的地放入大于你的样本大小的训练大小),它仍然可以给出上面那个错误。我猜这样的事实是样本大小不能总是完美地分开吗?
答案 1 :(得分:0)