Car*_*ane 8 opencv classification machine-learning svm
我必须训练支持向量机模型,我想使用自定义内核矩阵,而不是预设的内核矩阵(如RBF,Poly,ecc.).我怎么能用opencv的机器学习库做到这一点(如果可能的话)?
谢谢!
OpenFV中不直接支持AFAICT,SVM的自定义内核.它看起来像LIBSVM,它是OpenCV用于此的底层库,不提供定义自定义内核的特别简单的方法.因此,许多使用LIBSVM的包装器也没有提供.似乎有一些,例如用于python的scikit:带有自定义内核的SVM的scikit示例
您还可以查看完全不同的库,例如SVMlight.它直接支持自定义内核.另外看看这个问题.这里的答案包括一些SVM库,以及简短的评论.
如果您有充分的理由留在OpenCV中,您可以通过使用内核类型CvSVM::LINEAR并在训练SVM之前将自定义内核应用于数据来实现它.我对这个方向是否富有成效有点模糊,所以我希望有更多SVM经验的人可以加入并评论.如果是可以通过选择"线性"的内核来使用"预先计算内核",然后看看这个答案对于如何进行更多的想法.
您也可以考虑包括LIBSVM并直接调用它,而不使用OpenCV.有关LIBSVM的常见问题解答#418,请简要介绍如何进行自定义内核:
问:我想使用自己的内核.任何例子?在svm.cpp中,有两个用于内核评估的子例程:k_function()和kernel_function().我应该修改哪一个?
一个例子是LIBSVM Tools中的"用于字符串数据的LIBSVM".
我们有两个功能的原因如下.对于RBF内核exp(-g | xi - xj | ^ 2),如果我们首先计算xi - xj然后再计算norm square,则有3n个运算.因此我们考虑exp(-g(| xi | ^ 2 - 2dot(xi,xj)+ | xj | ^ 2))并且通过在开始时计算所有| xi | ^ 2,操作次数减少到2n.这是为了培训.对于预测,我们不能这样做,因此需要使用该3n操作的常规子例程.拥有自己的内核的最简单方法是通过替换任何内核将相同的代码放在这两个子例程中.
不过,最后一个选项听起来有点像痛苦.我推荐scikit或SVMlight.祝你好运!
| 归档时间: |
|
| 查看次数: |
2325 次 |
| 最近记录: |