我正在尝试使用scikit-learn执行内核PCA,使用不在其实现中的内核(以及此内核可识别的自定义输入格式)。如果我可以提前计算内核,保存它,然后在内核PCA中使用它,那可能是最简单的。
KernelPCA的precomputed
参数意味着我能够做我想做的事;但是,它没有在文档中解释,我找不到任何使用它的例子。即使在the unit test source code for KernelPCA in sklearn中,代码似乎也没有真正说明预先计算的内核是什么。
有谁知道如何使用我自己的预先计算的内核?
答案 0 :(得分:4)
您需要在拟合时使用的预先计算的内核是样本之间的克矩阵。即如果您有n_samples
个x_i
个样本,那么您需要将fit
作为G
为G_ij = K(x_i, x_j)
定义的矩阵i, j
作为第一个参数在0
和n_samples - 1
之间。
E.g。对于线性内核,这是
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)
这可以在单元测试中看到,例如here