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。 (直到数值错误,并假设您的数据集是一致的,这意味着每个点都与其他点不同)。
使用任意数据计算的任何 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。 (直到数值错误,并假设您的数据集是一致的,这意味着每个点都与其他点不同)。