scikit-learn kernel PCA解释了方差

ecn*_*113 12 python scikit-learn

我一直在使用scikit-learn中的普通PCA,并且没有任何问题地获得每个主成分的方差比.

pca = sklearn.decomposition.PCA(n_components=3)
pca_transform = pca.fit_transform(feature_vec)
var_values = pca.explained_variance_ratio_
Run Code Online (Sandbox Code Playgroud)

我想使用内核PCA探索不同的内核,并且还想要解释的方差比,但我现在看到它没有这个属性.有谁知道如何获得这些价值观?

kpca = sklearn.decomposition.KernelPCA(kernel=kernel, n_components=3)
kpca_transform = pca.fit_transform(feature_vec)
var_values = kpca.explained_variance_ratio_
Run Code Online (Sandbox Code Playgroud)

AttributeError:'KernelPCA'对象没有属性'explain_variance_ratio_'

Eel*_*aak 11

我知道这个问题已经过时了,但是当我意识到这pca.explained_variance_只是组件的变化时,我遇到了同样的"问题"并找到了一个简单的解决方案.您可以通过执行以下操作来简单地计算解释的方差(和比率):

kpca_transform = kpca.fit_transform(feature_vec)
explained_variance = numpy.var(kpca_transform, axis=0)
explained_variance_ratio = explained_variance / numpy.sum(explained_variance)
Run Code Online (Sandbox Code Playgroud)

并且作为奖励,要获得累积比例解释方差(通常用于选择组件和估计空间的维度):

numpy.cumsum(explained_variance_ratio)
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是不对的。我相信@Krishna Kalyan 是对的(答案如下) (3认同)

Kri*_*yan 8

K-PCA 没有的主要原因explained_variance_ratio_是因为在您的数据/向量的内核转换之后存在于不同的特征空间中。因此,不应像 PCA 那样解释 K-PCA。