【发布时间】:2015-03-25 03:28:07
【问题描述】:
我正在使用 SVM 构建数字识别分类。我有 10000 个数据,我以 7:3 的比例将它们分成训练和测试数据。我使用线性内核。
结果表明,当更改训练示例数时,训练准确度始终为 1,但测试准确度仅为 0.9 左右(我希望准确度更高,至少为 0.95)。我认为结果表明过度拟合。但是,我研究了参数,例如 C、伽玛……它们不会对结果产生太大影响。
谁能帮我解决如何处理 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)
【问题讨论】:
-
gamma不是线性内核的参数,更改它不会改变您的结果。您尝试了C的哪个范围?另外:你是如何将数据分成训练集和测试集的,你的交叉验证准确率是多少? -
首先,感谢您的回复。我尝试了从 1 到 1000000 的 C。我以 7:3 的比例分割训练数据和测试数据。交叉验证准确度类似于测试准确度。
-
如果您认为自己过度拟合,请尝试使用较小的
C值,例如10^-3。
标签: scikit-learn svm