在很多文章中,线性内核(两个矩阵的内积)被列为正定,但是当我用玩具数据集进行尝试时,正定性测试返回负面结果。我检查了Matlab SVM函数的线性内核。
线性内核函数是一行命令,
K=(u*v')
然而,在主svm_train函数中执行此步骤之后,它使用K执行另一个操作,
kx= (kx+kx')/2 + diag(1./boxconstraint)
其中kx
是K而diag(1./boxconstraint)
只是一个大小为kx
的对角矩阵,而kx
结果通过正定性测试。作为对这一步骤的解释,它说
'% ensure function is symmetric.'
我还检查了libsvm
但我在那里找不到这个额外的操作。
然而,内积已经是对称的,这个步骤通常用于将不定矩阵转换为正定矩阵。我有点困惑为什么内积不能通过正定性测试?
答案 0 :(得分:1)
如果u,v都是行向量(即K计算为标量),如果K = dot(u,v)> 0,K将只是正定。
如果u和v是更一般的矩阵(不是行向量)而u~ = v,那么K = u * v'通常不是对称的,更不用说正定。即使u = v,K也将是非负定的,但除非你有完整的行级别,否则不会严格正定。然而,假设所有boxconstraint(i)> 0,附加矩阵1./diag(boxconstraint)是严格肯定的。将非负定矩阵加到严格正定矩阵上会产生严格正定的结果。
答案 1 :(得分:0)
好吧,你说的实际上是有道理的,当我创建一个具有完整行级别的玩具数据集时,内积矩阵变为正定。如果甚至有两个线性相关行,则它不再是正定的。我会接受你的回答。感谢。