Python OpenCV手写识别与SVM,改变训练和测试量

Python OpenCV handwriting recognition with SVM, changing training and testing amounts

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

根据新的拆分 train/test,这不再正确了。对于初学者 resultresponses 的长度不同,因此 mask 只是 False.

所以,现在你想衡量准确率,你需要根据测试规模 reshape responses,而不是训练。工作代码仅更改 200 x 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,这是正常的,因为你减少了训练的大小并增加了测试的数量。