使用SVM进行Python OpenCV手写识别,改变培训和测试数量

时间:2016-02-28 09:18:15

标签: python opencv ocr svm handwriting-recognition

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

1 个答案:

答案 0 :(得分:2)

您的数据拆分是正确的。它为您提供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,这是正常的,因为你减少了训练和增加测试次数的大小。