SVM 中的 Gram Matrix/Kernel 不是半正定的

Gram Matrix/Kernel in SVMs not positive semi-definite

使用任意数据计算的任何 kernel 矩阵(或 Gram 矩阵)保证是半正定的。

我有一个数据矩阵 D,其中每一行都是一个数据向量。如果我这样计算内核,

K = D*D';

原来不是半正定的,更不是正定的。

为什么会这样?有什么我想念的吗?我的直觉告诉我,这很可能是数值错误,因为我的内核矩阵的所有负特征值都在 1E-12 左右。

This question 有点暗示答案,但我无法想象为什么矩阵至少不会对称!

一般说明

首先,仔细检查您的 D 方向是否正确。如果您正在使用

K = D*D';

然后你需要 D 维度 N x d,其中 N-样本数,d-特征数(换句话说-面向行的数据集) .否则你也会得到一个有效的 Gramian,但是对于不同的问题(并且对于 d >> N 它可能会导致更多的数值不稳定性)。

半正定 Gram 矩阵

Resulitng 矩阵将总是 是对称的(除非你没有确定性的算术运算)。

半正定性也得到保证,缺乏这种特征的唯一可能原因是数值不准确。如果出现这种情况,请考虑通过一些软技术减少 D 维数,例如具有非常高 k(例如等于 D/2)的 PCA。另一个可能有用的技巧(但是,它对问题引入了额外的数学约束)是计算:

K = D*D' + eps*I

其中 eps 是一个小常数(比方说 1e-10,所以它大于负特征值),I 是维数 N 的单位矩阵。这种技术有很多名称(取决于研究领域),其中之一是正则化。

正定 Gram 矩阵

正定克(核)矩阵不太常见,它是p.d。如果你的向量是线性独立的(所以特别是你需要 d>=N,但显然线性独立性更强,所以这只是要求,不是 iff)。由于这个原因,许多核矩阵都是通过一些确保线性独立性的复杂投影得到的,例如RBF核引入线性独立性(在特征space!)所以基于RBF的核矩阵应该是p.d。 (直到数值错误,并假设您的数据集是一致的,这意味着每个点都与其他点不同)。