scikit中的SVM过度拟合学习

时间:2015-01-26 16:54:05

标签: scikit-learn svm

我正在使用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 个答案:

答案 0 :(得分:2)

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