我使用sklearn
的svm.SVC
模块编写了一个程序来学习mnist数据集,但每次计算准确率时都得到100%的结果。这似乎好得令人难以置信,这是正常的吗?
from sklearn import datasetsfrom sklearn import svmdigits = datasets.load_digits()clf = svm.SVC(gamma=0.001, C=100)print(len(digits.data))train_with_first = 50x, y = digits.data[:-train_with_first], digits.target[:-train_with_first]clf.fit(x,y)print(digits.data[4])num_corr = 0num_total = 0for pred in range(train_with_first-1): prediction = clf.predict(digits.data[pred].reshape(1,-1)) target = digits.target[pred] print(int(target)) print(int(prediction)) if int(target) == int(prediction): num_corr += 1 num_total += 1print("Accuracy was: ", (float(num_corr)/num_total)*100)
我期望准确率低于100%。
回答:
可能是因为你用于预测的数据都在训练数据中,导致过拟合。你可以尝试使用sklearn
中的train_test_split
来分隔训练集和测试集。
或者你可以将第18行的
for pred in range(train_with_first-1):
改为
for pred in range(train_with_first,len(digits.data)):
但推荐使用train_test_split
方法。