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