在 R 中为 svm 编写自定义内核

Posted

技术标签:

【中文标题】在 R 中为 svm 编写自定义内核【英文标题】:Write custom kernel for svm in R 【发布时间】:2017-07-26 18:34:19 【问题描述】:

我希望在 R 中使用 e1071 包的 svm() 函数。我是这个包的新手,我想知道是否可以在 svm() 中编写自己的自定义内核可调用。我看到有几个内核预加载,但我没有看到余弦相似度内核,这是我需要的。

或者,R 中是否有另一个包允许您使用余弦相似度内核运行 SVM?

【问题讨论】:

【参考方案1】:

坏消息是目前 e1071 不支持它。很多年前就有一个关于它的讨论https://stat.ethz.ch/pipermail/r-help/2002-July/023299.html

好消息是余弦相似度核被定义为

K(x, y) = <x, y> / (||x|| ||y||) = <x / ||x||, y / ||y||>

因此您不必实现自定义内核,只需规范化您的数据并运行常规线性内核 SVM。换句话说 - 计算(样本)正则欧几里得范数并将每个样本除以其自己的范数。然后运行线性SVM,结果相当于在原始数据上运行余弦核。

如果您想使用自定义机器学习模型进行研究,R 可能不是最佳选择(因为它是应用现有技术的工具,而不是设计良好的开发系统 - 如果您想要在 R 中自定义一些东西,你基本上必须去 C++ 级别)。相反,您可能需要考虑 python 和众多库(例如 scikit-learn + pykernels),它们可以为您提供更大的灵活性。

【讨论】:

以上是关于在 R 中为 svm 编写自定义内核的主要内容,如果未能解决你的问题,请参考以下文章

sklearn SVM 自定义内核

SVM 的自定义内核,何时应用它们?

如何为 sklearn.svm.SVC 定义自定义内核函数?

SVM 自定义 RBF 内核 IndexError

如何使用自定义 SVM 内核?

Matlab SVM 自定义核函数