使用任意数据计算的任何kernel矩阵(或Gram矩阵)都保证为半正定。
我有一个数据矩阵D,其中每一行都是一个数据向量。如果我像这样计算内核,
K = D*D';
事实证明,这不是正半确定的,更不用说肯定的了。
为什么会发生这种情况?有什么我想念的吗?我的预感告诉我,这很可能是数值误差,因为我的核矩阵的所有负特征值都在1E-12左右。
This question在某种程度上暗示了一个答案,但我无法想象为什么矩阵不会至少是对称的!
答案 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. (最多为数值误差,并假设您的数据集是一致的,意味着每个点与其余点不同)。