svm.SVC预测给出数字识别的不同结果

时间:2017-03-11 18:55:50

标签: python scikit-learn svm mnist

我正在运行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:代码中可能存在很少的错误,我提前为它们道歉。

你能帮我弄清楚这里发生了什么吗?提前致谢

0 个答案:

没有答案