1

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

然而,内积已经是对称的,这一步通常用于将不定矩阵转换为正定矩阵。我有点困惑为什么内积核没有通过正定性检验?

4

2 回答 2

1

如果 u,v 都是行向量(即 K 计算为标量),则仅当 K=dot(u,v)>0 时,K 才会是正定的。

如果 u 和 v 是更一般的矩阵(不是行向量)并且 u~=v,那么 K=u*v' 通常不会是对称的,更不用说正定了。即使当 u=v 时,K 也将是非负定的,但不会是严格正定的,除非 u 具有完整的行秩。但是,假设所有 boxconstraint(i)>0,附加矩阵 1./diag(boxconstraint) 是严格正定的。将非负定矩阵添加到严格正定矩阵总是会产生严格正定结果。

于 2014-01-29T22:20:24.280 回答
0

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

于 2014-01-31T05:44:33.527 回答