[英]C++ support vector machine (SVM) template libraries?
我有来自自定义抽象对象和自定义距离函数的数据集。 有什么好的SVM库可以让我训练自定义对象(不是2d点)和自定义距离函数吗?
我在类似的stackoverflow问题中搜索了答案,但是没有一个允许我使用自定义对象和距离函数。
首先是第一件事。
SVM 在距离功能上不起作用 ,它仅接受点积 。 因此,您的距离函数(实际上是相似的,但通常1距离是相似的)必须:
s(a,b)=s(b,a)
s(a,a)>=0, s(a,a)=0 <=> a=0
s(ka, b) = ks(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
)都可以提供Gram矩阵 。 简称为
G_ij = K(x_i, x_j)
因此需要O(N^2)
内存和时间。 因此,您的对象无关紧要,因为SVM仅适用于成对的点积 ,仅此而已。
如果您寻找合适的数学工具来显示此属性,那么可以做的是从相似性中寻找内核学习 。 这些方法能够创建行为类似于您的相似性的有效内核。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.