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