首页 > 解决方案 > Scikit-learn 的 Kernel PCA:如何在 KPCA 中实现各向异性高斯内核或任何其他自定义内核?

问题描述

我目前正在使用Scikit-learn 的 KPCA对我的数据集执行降维。它们具有各向同性的高斯核(RBF 核),它只有一个值 gamma。但是现在,我想实现一个各向异性的高斯核,它具有许多取决于维数的 gamma 值。

我知道 Kernel PCA 有一个预计算内核的选项,但我找不到任何用于降维的代码示例。

有谁知道如何在 sklearn KPCA 中实现自定义内核?

标签: pythonscikit-learn

解决方案


我找到了解决这个问题的方法。

首先,您必须定义自己的内核函数,该函数返回样本之间的 gram 矩阵。

def customkernel(X1,X2,etc):
    k = yourkernelfunction(X1,X2,etc)
    return k

如果我们想将大小为nxm的数据集x拟合到我们的 KernelPCA 模型中并将其转换为nx n_princomp,我们需要的是

KPCA = kpca(n_princomp,kernel='precomputed')
gram_mat = customkernel(x,x)
transformed_x = KPCA.fit_transform(gram_mat)

接下来,如果我们想将另一个大小为N xm的数据集X转换为N x n_princomp,我们要做的就是计算一个新的 gram 矩阵,其中 X 为 X1,x 为 X2。

new_gram_mat = customkernel(X,x)
transformed_X = KPCA.transform(new_gram_mat)    

推荐阅读