2016-02-28 3 views
1

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_ml/py_svm/py_svm_opencv/py_svm_opencv.htmlPython OpenCV распознавания рукописного текста с SVM, изменяя обучение и тестирование составляет

В этом примере 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

ответ

2

Ваше разделение данных правильно. Причина, по которой он дает вам точность, - это то, как вы ее измеряете.

Проверка точности выполняется:

mask = result==responses 
correct = np.count_nonzero(mask) 
print correct*100.0/result.size 

По новому разделенного поезд/тест, это не правильно больше. Для начинающих result и responses не имеют одинаковой длины, поэтому mask просто False.

Итак, теперь вы хотите измерить точность, вам нужно reshaperesponses в зависимости от размера теста, а не поезда. Работа Код меняется только 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, что является нормальным, как вы уменьшенного размера, чтобы обучать и увеличивающегося числа испытаний.

+1

Спасибо, понял. Создал отдельный массив numpy для сравнения результатов. – sope

+0

Большое спасибо! Это именно то, что я сделал за минуту до того, как отредактировал код. – sope

 Смежные вопросы

  • Нет связанных вопросов^_^