我正在使用MS Visual Studio 2008,OpenCV,C和SVM继续我的OCR项目 . 我已经生成了一个> 2000个机器打印字符样本的数据集 . 当我使用线性内核进行测试时,我总是获得96,36%的准确率 .
我如何在OpenCV中使用SVM可以在this thread中引用 .
现在我尝试使用RBF内核并遇到这两个问题:
(1)无论我使用什么参数(C和gamma),所有字符总是被分类为0(零) . 如果我用MNIST测试,所有数字都是9 .
我希望有OpenCV和SVM经验的人可以向我解释 . 我知道还有一些其他良好的机器学习和图像处理框架,比如ACCORD.NET,但我已经使用了C,将整个程序变成C#会很麻烦(OCR只是其中的一部分) .
OpenCV的版本是2.3.1 .
(2)我把这个问题转移到另一个问题作为etarion的建议 . 如果您有时间,请查看:Visual Studio reports error C2664 with train method of SVM in openCV .
2 回答
该理论表明,在正确的参数下,RBF内核至少与线性内核一样有效 . 因此,我将列出常见的问题来源:
您可能遇到数值困难 . 你有规范化数据吗?每个功能是否介于0和1之间?或-1和1?实际决策值的数值范围是多少?功能值的范围是多少?
你是否有可能高估线性分类器的性能(即测试和训练相同的数据?)
可能是你的多类表示有点瑕疵 . 对于两类问题而不是十类问题,是否存在相同的性能差异?
至于第一部分,'s very likely that your parameters are off. There'是train_auto method用于自动参数估计,如果通过将自定义参数网格传递给方法(但首先尝试默认参数)不会产生好的结果,则可以扩展使用的参数范围 .