我目前正在使用Scikit-learn 的 KPCA https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.KernelPCA.html对我的数据集执行降维。它们具有各向同性高斯核(RBF 核),仅具有一个值 gamma。但现在,我想实现一个各向异性高斯核,它具有许多取决于维数的伽玛值。
我知道 Kernel PCA 有一个选项预先计算的内核,但我找不到任何用于降维的代码示例。
有谁知道如何在 sklearn KPCA 中实现自定义内核?
我已经找到了这个问题的解决方案。
首先,您必须定义自己的核函数,该函数返回样本之间的语法矩阵。
def customkernel(X1,X2,etc):
k = yourkernelfunction(X1,X2,etc)
return k
如果我们想要拟合一个数据集x有尺寸n x m进入我们的 KernelPCA 模型并将其转换为n x n_princomp,我们需要的是
KPCA = kpca(n_princomp,kernel='precomputed')
gram_mat = customkernel(x,x)
transformed_x = KPCA.fit_transform(gram_mat)
接下来,如果我们想转换另一个数据集X有尺寸N x m into N x n_princomp我们要做的就是计算一个新的语法矩阵,其中 X 为 X1,x 为 X2。
new_gram_mat = customkernel(X,x)
transformed_X = KPCA.transform(new_gram_mat)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)