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

新しい分割列車/テストにより、これは正しくなくなりました。まずresult、 とresponsesは同じ長さではないため、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。トレーニングのサイズを縮小し、テストの数を増やしたため、これは正常です。

于 2016-02-28T10:09:37.240 に答える