在此示例中,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
通过新的拆分火车/测试,这不再是正确的。对于初学者result
且responses
长度不一样的人,因此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
这是正常的,因为您减少了训练的大小并增加了测试数量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句