我有一个标准的{-1,+ 1}机器学习问题。主要区别在于数据点是二进制字符串,因此它们的邻近度是通过汉明距离来测量的。 在这种情况下可以应用SVM吗?什么SVM库更适合这项任务?
答案 0 :(得分:2)
如果核k对任何一对例子x和z都是正定的,则克矩阵的行列式是非负的。
|k(x, x) k(x, z)|
| | = k(x,x)k(z,z) - k(x,z)^2 >= 0
|k(z, x) k(z, z)|
对于距离(包括汉明距离),以下属性成立:
For any x, y:
1) d(x, z) >= 0 and d(x, z) = 0 <=> x = z
2) symmetry d(x, z) = d(z, x)
3) triangular inequality d(x, z) <= d(x, y) + d(y, z)
考虑到k是汉明距离,根据1),我们会:
a) k(x,x) = k(z,z) = 0
但为了成为一个肯定的核心,我们需要:
b) k(x,x)k(z,z) - k(x,z)^2 >= 0
将a)应用于b)我们有:
-k(x,z)^2 >= 0
k(x,z)^2 <= 0
表示k(x,z)不是实数值,因此它不是有效的内核。
除非我遗漏了什么,否则我认为它是一个有效的内核,因为它 是以下空间中的内积:K(“aab”,“baa”)= [0,1,0,1,1,0] \ dot [1,0,0,1,0,1]。
这是为内核定义功能的一种很好的方法,但它不是汉明距离。 “aab”和“baa”之间的汉明距离是2,第一个和第三个字符是不同的。 但
[0,1,0,1,1,0] \dot [1,0,0,1,0,1] = 1.
如果汉明实例不是肯定的,那并不意味着它不能与SVM一起使用,但肯定会失去解决凸优化问题的好处。
答案 1 :(得分:2)
This paper提出了一个用于分类特征之间测得的汉明距离的核。只需用Hamming替换标准指数内核中的欧几里得距离即可。
还可以将欧几里得距离和汉明距离组合到一个内核中,这对于混合了连续变量和离散变量的数据集很有用。
好消息是他们还证明该内核确实是正定的(第14页)。
答案 2 :(得分:1)
这可能最好通过使用SVM库来处理,该库允许您创建自定义内核函数(例如libSVM,SVMLight,scikits)。然后你必须写一个汉明距离函数来计算两个字符串之间的距离并将其作为内核函数插入。
唯一的问题是,我不确定汉明距离实际上是一个内核,因为它满足Mercer's conditions。它显然是对称的,但我不知道它是否是正确的。
答案 3 :(得分:1)
像StompChicken说的那样,汉明距离是一个有效的内核还不清楚。
除非我遗漏了某些东西,否则我认为它是一个有效的内核,因为它是以下空间中的内积:K(“aab”,“baa”)= [0,1,0,1,1 ,0] \ dot [1,0,0,1,0,1]。
在理解了这个“编码”之后,你可以真正使用任何支持线性内核的SVM库,像前面的例子那样对字符串进行编码。