在 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 编写自定义内核的主要内容,如果未能解决你的问题,请参考以下文章