使用 SVM 进行 Python OpenCV 手写识别,更改训练和测试量



http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_svm/py_svm_opencv/py_svm_opencv.html

在这个例子中,OpenCV给出的训练集是250,测试量也是相同的。但是,当测试和训练编号发生变化时,准确性会下降到 0。

# First half is trainData, remaining is testData
train_cells = [ i[:40] for i in cells ] 
test_cells = [ i[40:] for i in cells]
train_amt = 200
responses = np.float32(np.repeat(np.arange(10),train_amt)[:,np.newaxis])

我已经从原始代码中更改了上面几行中的值。我做错了什么?x应该是什么?

OpenCV提供的训练和测试数据:http://wormassay.googlecode.com/svn/trunk/ThirdParty/OpenCV/samples/python2/data/digits.png

您的数据

拆分是正确的。它为您提供0.0准确性的原因是您测量它的方式。

准确性检查由以下人员完成:

mask = result==responses
correct = np.count_nonzero(mask)
print correct*100.0/result.size

通过新的拆分训练/测试,这不再正确。对于初学者来说,resultresponses的长度不同,因此mask简直是False .

所以,现在你想测量准确性,你需要根据测试大小reshape responses,而不是训练。工作代码仅将 200 更改为 300:

responses = np.float32(np.repeat(np.arange(10),300)[:,np.newaxis])
mask = result==responses
correct = np.count_nonzero(mask)
print correct*100.0/result.size

准确性会下降一点,但不是0.0,现在你处于93.1,这是正常的,因为你减少了训练的大小并增加了测试的数量。

相关内容

  • 没有找到相关文章

最新更新