我想为我正在编写的应用程序使用带有卡方内核的 SVM,但我如何应用它似乎并不明显。
我将内核定义为K(x_i, x_j) = exp( -1/A * D(x_i, x_j))
,其中A
是我可以选择的缩放参数,并且D(x_i, x_j)
是它们之间的卡方距离。
如何才能做到这一点?它是计算机视觉文献中常用的内核,所以如果它不可能,那将是令人惊讶的。
我想为我正在编写的应用程序使用带有卡方内核的 SVM,但我如何应用它似乎并不明显。
我将内核定义为K(x_i, x_j) = exp( -1/A * D(x_i, x_j))
,其中A
是我可以选择的缩放参数,并且D(x_i, x_j)
是它们之间的卡方距离。
如何才能做到这一点?它是计算机视觉文献中常用的内核,所以如果它不可能,那将是令人惊讶的。
OpenCV 3.0.0.0dev 中有一个实现。有关详细信息,请参阅链接。
http://docs.opencv.org/master/modules/ml/doc/support_vector_machines.html
新链接: http ://docs.opencv.org/3.0-beta/modules/ml/doc/support_vector_machines.html
我认为opencv中没有卡方或自定义内核的选项。
因此,一种选择是使用不同的 SVM 库。
这是对 LIBSVM 的修改,它支持卡方内核(不同的内核)和预计算内核。但它的目标是与 Matlab 一起使用。所以我不确定让它与 C++ 一起工作需要多少时间。
如果您想坚持使用 opencv svm,另一种选择可能是使用线性 SVM 并将您的数据转换为近似卡方内核。
这个答案也可能会给你更多的提示。