是线性核正定?

时间:2014-01-29 20:56:23

标签: matlab kernel svm linear inner-product

在很多文章中,线性内核(两个矩阵的内积)被列为正定,但是当我用玩具数据集进行尝试时,正定性测试返回负面结果。我检查了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但我在那里找不到这个额外的操作。

然而,内积已经是对称的,这个步骤通常用于将不定矩阵转换为正定矩阵。我有点困惑为什么内积不能通过正定性测试?

2 个答案:

答案 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)

好吧,你说的实际上是有道理的,当我创建一个具有完整行级别的玩具数据集时,内积矩阵变为正定。如果甚至有两个线性相关行,则它不再是正定的。我会接受你的回答。感谢。