Scikit learn scikit学习中的SVM过拟合

Scikit learn scikit学习中的SVM过拟合,scikit-learn,svm,Scikit Learn,Svm,我正在使用SVM建立数字识别分类。我有10000个数据,我以7:3的比例将它们拆分为训练和测试数据。我使用线性核 结果表明,当更改训练示例数时,训练精度始终为1,但测试精度仅为0.9左右(我希望精度更好,至少为0.95)。我认为结果表明拟合过度。然而,我研究了参数,比如C,gamma。。。他们不会对结果有太大的改变 有谁能帮我解决SVM中的过度拟合问题吗?非常感谢您的时间和帮助 以下是我的代码: from sklearn import svm, cross_validation svc = sv

我正在使用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) 

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

gamma
不是线性内核的参数,更改它不会改变结果。您尝试了什么范围的
C
?另外:您是如何将数据分为培训集和测试集的?交叉验证的准确性如何?首先,感谢您的回复。我试过从1到1000000的C。我以7:3的比例分割训练数据和测试数据。交叉验证精度与测试精度类似。如果您认为自己拟合过度,请尝试使用较小的
C
,如
10^-3