1

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

4

1 回答 1

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,这是正常的,因为你减少了训练的大小并增加了测试的数量。

于 2016-02-28T10:09:37.240 回答