首页 文章

scikit中的SVM过度拟合学习

提问于
浏览
0

我正在使用SVM构建数字识别分类 . 我有10000个数据,我将它们分成训练和测试数据,比例为7:3 . 我使用线性内核 .

结果表明,当改变训练样本数时训练精度始终为1,但测试精度仅为0.9左右(我期望精度更高,至少为0.95) . 我认为结果表明过度拟合 . 但是,我研究了参数,比如C,gamma,......它们并没有很好地改变结果 .

任何人都可以帮我解决如何处理SVM中的过度拟合问题吗?非常感谢您的时间和帮助 .

以下是我的代码:

from sklearn import svm, cross_validation
svc = svm.SVC(kernel = 'linear',C = 10000, gamma = 0.0, verbose=True).fit(sample_X,sample_y_1Num)

clf = svc

predict_y_train = clf.predict(sample_X)
predict_y_test = clf.predict(test_X)    
accuracy_train = clf.score(sample_X,sample_y_1Num) 
accuracy_test =  clf.score(test_X,test_y_1Num)  

#conduct cross-validation 

cv = cross_validation.ShuffleSplit(sample_y_1Num.size, n_iter=10,test_size=0.2, random_state=None)
scores = cross_validation.cross_val_score(clf,sample_X,sample_y_1Num,cv = cv)
score_mean = mean(scores)

1 回答

  • 2

    减少过度拟合的一种方法是增加更多的训练观察 . 由于您的问题是数字识别,因此通过稍微更改原始数据集中的观察结果,可以轻松地综合生成更多训练数据 . 您可以通过将数字图像向左,向右,向上和向下移动一个像素,从每个现有观察中生成4个新观察值 . 这将大大增加训练数据集的大小,并且应该有助于分类器学会概括,而不是学习噪声 .

相关问题