我目前正在使用Scikit-learn's KPCA对我的数据集进行降维。它们具有各向同性的高斯核(RBF核),其伽玛值只有一个。但是现在,我想实现一个各向异性的高斯内核,该内核具有许多取决于维数的伽马值。
我知道Kernel PCA可以为预计算内核提供一个选项,但是我找不到用于降维的任何代码示例。
有人知道如何在sklearn KPCA中实现自定义内核吗?
答案 0 :(得分:1)
我已经找到解决该问题的方法。
首先,您必须定义自己的内核函数,该函数将返回样本之间的语法矩阵。
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 转换为 < em> N x n_princomp ,我们要做的是计算一个新的语法矩阵,其中X为X1,x为X2。
new_gram_mat = customkernel(X,x)
transformed_X = KPCA.transform(new_gram_mat)