SVM中的克矩阵/核不是半正定的

时间:2015-04-15 07:33:09

标签: matlab math matrix machine-learning svm

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

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

K = D*D';
事实证明,这不是正半确定的,更不用说肯定的了。

为什么会发生这种情况?有什么我想念的吗?我的预感告诉我,这很可能是数值误差,因为我的核矩阵的所有负特征值都在1E-12左右。

This question在某种程度上暗示了一个答案,但我无法想象为什么矩阵不会至少是对称的!

1 个答案:

答案 0 :(得分:6)

一般说明

首先,仔细检查D是否正确定位。如果您正在使用

K = D*D';

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

半正定克重基质

Resulitng矩阵将始终对称(除非您没有确定性的艺术操作)。

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

K = D*D' + eps*I

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

正定克重基质

正定克(核)矩阵不太常见,它是p.d. iff你的向量是线性独立的(特别是你需要d>=N,但显然线性独立是更强的东西所以这只是要求,而不是iff)。由于这个原因,许多核矩阵是通过一些确保线性独立性的复杂项目获得的,例如RBF内核引起线性独立性(在特征空间中!),因此基于RBF的核矩阵应该是p.d. (最多为数值误差,并假设您的数据集是一致的,意味着每个点与其余点不同)。