在很多文章中,线性核(两个矩阵的内积)被列为正定但是当我用玩具数据集尝试它时,正定测试返回负结果。我检查了 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
,但我在那里找不到这个额外的操作。
然而,内积已经是对称的,这一步通常用于将不定矩阵转换为正定矩阵。我有点困惑为什么内积核没有通过正定性检验?