SKLearn 核主成分分析的“预计算”参数
我正在尝试使用scikit-learn进行核主成分分析(Kernel PCA),但是我想用一个在他们的实现中没有的核函数(以及一种这个核函数能识别的自定义输入格式)。如果我能提前计算好这个核,保存下来,然后在Kernel PCA中使用,那可能是最简单的办法。
KernelPCA中的precomputed
参数似乎意味着我可以做到我想做的事情;不过,文档里没有解释这个参数的用法,我也找不到任何使用它的例子。即使在scikit-learn的KernelPCA单元测试源代码中,代码似乎也没有明确说明预计算的核是什么。
有没有人知道我该如何使用我自己预计算的核?
1 个回答
8
在训练模型的时候,你需要用到一个叫做“预计算核”的东西,这个东西其实就是样本之间的格拉姆矩阵。简单来说,如果你有 n_samples
个样本,记作 x_i
,那么在调用 fit
方法时,你需要把一个矩阵 G
作为第一个参数传进去,这个矩阵的定义是 G_ij = K(x_i, x_j)
,其中 i
和 j
的范围是从 0
到 n_samples - 1
。
比如,对于线性核来说,这个矩阵是
def linear_kernel(X, Y):
return X.dot(Y.T)
X = np.random.randn(10, 20)
gram = linear_kernel(X, X)
如果你想对 X_test
进行预测,你需要传入
X_test = np.random.randn(5, 20)
gram_test = linear_kernel(X_test, X)
这个内容可以在单元测试中看到,例如 这里