我正在运行http://neuralnetworksanddeeplearning.com/chap1.html的数字识别代码。当使用支持向量机(sklearn.svm.SVC)运行基线算法时,我遇到了一个奇怪的问题。
# importing my libraries
DR_load_data as data_loader # for loading data
# importing third-party libraries
from sklearn import svm
def svm_baseline():
training_data, validation_data, test_data = data_loader.load_data()
# 70:30 random split for training_data and validation_data
# train
clf = svm.SVC()
clf.fit(training_data[0], training_data[1])
print "Fit completed."
# getting prediction on validation sample
predictions = [int(a) for a in clf.predict(validation_data[0])]
# number of correct predictions
num_correct = sum(int(a == y) for a, y in zip(predictions, validation_data[1]))
print "Baseline classifier using an SVM."
print "%s of %s values correct." % (num_correct, len(validation_data[1]))
return clf
svm_baseline = svm_baseline()
这给出了以下输出:
Fit completed.
Baseline classifier using an SVM.
1397 of 12600 values correct.
当我回归分类器时,我怀疑正确预测的数量,我试图在函数外重复验证数据的预测,如下所示:
training_data, validation_data, test_data = data_loader.load_data()
pred_val = [int(a) for a in svm_baseline.predict(validation_data[0])]
num_correct = sum(int(a == y) for a, y in zip(pred_val, validation_data[1]))
print "%s of %s values correct." % (num_correct, len(validation_data[1]))
并获得以下输出:
9289 of 12600 values correct.
我不确定这里发生了什么,因为我在终端中单独运行的代码与函数内部执行的代码相同。我尝试了多次以生成不同的验证样本,但问题仍然存在。
编辑:我已将代码和数据添加到git repository。我从原始数据中只抽取了4000个样本,并删除了测试数据的加载,因为我没有将csv放在存储库中。
PS:代码中可能存在很少的错误,我提前为它们道歉。
你能帮我弄清楚这里发生了什么吗?提前致谢