C++支持向量机(SVM)模板库?

我有一个来自自定义抽象对象的数据集和一个自定义距离函数。有没有好的SVM库可以让我在我的自定义对象(不是二维点)和我的自定义距离函数上进行训练?

我在这个类似的stackoverflow问题中搜索了答案,但没有一个允许我使用自定义对象和距离函数。


回答:

首先要做的事情。

SVM不适用于距离函数,它只接受点积。所以你的距离函数(实际上是相似度,但通常1-距离是相似度)必须满足以下条件:

  • 对称性 s(a,b)=s(b,a)
  • 正定性 s(a,a)>=0, s(a,a)=0 <=> a=0
  • 在第一个参数上是线性的 s(ka, b) = k s(a,b)s(a+b,c) = s(a,c) + s(b,c)

这可能很难检查,因为你实际上是在问“是否存在一个从我的对象到某个向量空间的函数phi,使得s(phi(x), phi(y))是一个点积”,从而引出了所谓的的定义,K(x,y)=s(phi(x), phi(y))。如果你的对象本身就是向量空间的元素,那么有时候只需设置phi(x)=x,因此K=s,但这在一般情况下并不成立。

一旦你有了这种类型的相似度,几乎任何SVM库(例如libSVM)都可以通过提供格拉姆矩阵来工作。它的定义非常简单

G_ij = K(x_i, x_j)

因此需要O(N^2)的内存和时间。因此,你的对象是什么并不重要,因为SVM只在成对点积上工作,仅此而已。

如果你寻找合适的数学工具来展示这一属性,可以考虑从相似度学习核。这些方法能够创建与你的相似度行为相似的有效核。

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

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