使用opencv构建自定义svm核矩阵

我需要训练一个支持向量机模型,我想使用自定义的核矩阵,而不是预设的核(如RBF、Poly等)。我能否使用opencv的机器学习库来实现这一点(如果可能的话)?

谢谢你!


回答:

据我所知,OpenCV并不直接支持SVM的自定义核。这是因为OpenCV所使用的底层库LIBSVM,并没有提供定义自定义核的简单方法。因此,许多使用LIBSVM的封装库也不提供这一功能。似乎有一些例外,例如Python的scikit:scikit的SVM自定义核示例

你也可以看看完全不同的库,比如SVMlight。它直接支持自定义核。另外,你可以参考这个Stack Overflow问题。那里的回答包括了一些SVM库及其简短的评论。

如果你有充分的理由坚持使用OpenCV,你可以通过使用CvSVM::LINEAR核类型,并在训练SVM之前将你的自定义核应用于数据来实现这一点。我对这个方向是否有成效有点不确定,所以我希望有更多SVM经验的人能发表评论。如果通过选择“线性”作为你的核类型确实可以使用“预计算核”,那么请参考这个回答,以获取更多关于如何进行的想法。

你还可以考虑直接包含LIBSVM并调用它,而不使用OpenCV。请参阅LIBSVM的FAQ #418,它简要介绍了如何进行自定义核:

问:我想使用我自己的核。有例子吗?在svm.cpp中,有两个用于核评估的子程序:k_function()和kernel_function()。我应该修改哪一个?

一个例子是LIBSVM工具中的“LIBSVM for string data”。

我们有两个函数的原因如下。对于RBF核exp(-g |xi – xj|^2),如果我们先计算xi – xj然后再计算范数平方,需要3n次操作。因此,我们考虑exp(-g (|xi|^2 – 2dot(xi,xj) +|xj|^2)),通过在开始时计算所有|xi|^2,操作次数减少到2n。这是用于训练的。对于预测,我们不能这样做,所以需要一个使用3n次操作的常规子程序。实现你自己的核的最简单方法是将相同的代码放在这两个子程序中,通过替换任何核来实现。

最后一个选项听起来有点麻烦。我推荐使用scikit或SVMlight。祝你好运!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注