sklearn上的PCA - 如何解释pca.components _

时间:2017-11-18 20:39:07

标签: python math scikit-learn pca

我使用这个简单的代码在具有10个功能的数据框上运行PCA:

pca = PCA()
fit = pca.fit(dfPca)

pca.explained_variance_ratio_的结果显示:

array([  5.01173322e-01,   2.98421951e-01,   1.00968655e-01,
         4.28813755e-02,   2.46887288e-02,   1.40976609e-02,
         1.24905823e-02,   3.43255532e-03,   1.84516942e-03,
         4.50314168e-16])

我认为这意味着第一台PC解释了52%的差异,第二部分解释了29%等等......

我不理解的是pca.components_的输出。如果我执行以下操作:

df = pd.DataFrame(pca.components_, columns=list(dfPca.columns))

我得到的数据框低于每一行是主要成分。 我想要理解的是如何解释该表。我知道如果我对每个组件的所有功能进行平方并对它们求和,我得到1,但PC1上的-0.56是什么意思?它告诉了一些关于"功能E"因为它是一个组件的最高幅度,解释了52%的方差?

enter image description here

由于

2 个答案:

答案 0 :(得分:11)

术语首先,PCA的结果通常以组件得分的形式进行讨论,有时称为因子得分(对应于特定数据点的转换变量值)和加载(应将每个标准化原始变量的权重乘以得到组件得分。

可在此处找到一个简单的解释:https://www.youtube.com/watch?v=_UVHneBUBW0

在您的情况下,功能E的值-0.56是PC1上此功能的分数。 此值告诉我们该功能对PC有多大影响(在我们的例子中是PC1)。

因此,绝对值越高,对主成分的影响越大。

在进行PCA分析后,人们通常会绘制已知的“双标图”来查看N维(在我们的例子中为2)和原始变量(特征)中的变换特征。

我写了一个函数来绘制这个。

示例使用iris数据:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

iris = datasets.load_iris()
X = iris.data
y = iris.target

#In general it is a good idea to scale the data
scaler = StandardScaler()
scaler.fit(X)
X=scaler.transform(X)

pca = PCA()
pca.fit(X,y)
x_new = pca.transform(X)   

def myplot(score,coeff,labels=None):
    xs = score[:,0]
    ys = score[:,1]
    n = coeff.shape[0]

    plt.scatter(xs ,ys, c = y) #without scaling
    for i in range(n):
        plt.arrow(0, 0, coeff[i,0], coeff[i,1],color = 'r',alpha = 0.5)
        if labels is None:
            plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, "Var"+str(i+1), color = 'g', ha = 'center', va = 'center')
        else:
            plt.text(coeff[i,0]* 1.15, coeff[i,1] * 1.15, labels[i], color = 'g', ha = 'center', va = 'center')

plt.xlabel("PC{}".format(1))
plt.ylabel("PC{}".format(2))
plt.grid()

#Call the function. 
myplot(x_new[:,0:2], pca. components_) 
plt.show()

<强>结果

enter image description here

答案 1 :(得分:6)

基本理念

原则组件按您所拥有的功能细分基本上会告诉您&#34;方向&#34;每个主要组件都指向特征的方向。

在每个主要组件中,具有更大绝对重量的功能&#34; pull&#34;主要组成部分更多的是该特征的方向。

例如,我们可以说在PC1中,由于特征A,特征B,特征I和特征J具有相对较低的权重(绝对值),因此PC1并未指向这些特征的方向。特征空间。 PC1将指向功能E相对于其他方向的方向。

较低维度的可视化

有关此内容的可视化,请查看从herehere获取的以下数据:

以下显示了在相关数据上运行PCA的示例。 enter image description here

我们可以在视觉上看到来自PCA的两个特征向量正在被拉动&#34;在功能1和功能2方向。因此,如果我们要制作一个像您所做的主要组件分解表,我们可以期望从功能1和功能2中看到一些解释PC1和PC2的重量。

接下来,我们有一个不相关数据的例子。

enter image description here

让我们将绿色原理组件称为PC1,将粉红色原则组件称为PC2。很明显,PC1没有沿着特征x的方向被拉动,并且在特征y的方向上没有被拉到PC2。 因此,在我们的表格中,我们必须将特征x的权重设为0。在PC1中,特征y的权重为0在PC2中。

我希望这可以让您了解自己在桌面上看到的内容。