【问题标题】:Python OpenCV handwriting recognition with SVM, changing training and testing amountsPython OpenCV 手写识别与 SVM,改变训练和测试量
【发布时间】:2016-06-11 09:06:54
【问题描述】:

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

【问题讨论】:

    标签: python opencv ocr svm handwriting-recognition


    【解决方案1】:

    您的数据拆分是正确的。它为您提供0.0 准确性的原因是您测量它的方式。

    准确性检查由以下人员完成:

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

    通过新的拆分训练/测试,这不再正确。对于初学者resultresponses 的长度不同,因此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,这是正常的,因为您减少了训练规模并增加了测试数量。

    【讨论】:

    • 谢谢,想通了。创建了一个单独的 numpy 数组来比较结果。
    • 非常感谢!这正是我在你编辑代码前一分钟所做的。
    猜你喜欢
    • 2017-08-25
    • 2018-11-19
    • 2015-05-04
    • 2015-07-25
    • 2011-09-02
    • 2015-04-18
    • 2015-01-22
    • 2017-06-21
    相关资源
    最近更新 更多