我使用这个简单的代码在具有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%的方差?
由于
答案 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()
<强>结果
答案 1 :(得分:6)
基本理念
原则组件按您所拥有的功能细分基本上会告诉您&#34;方向&#34;每个主要组件都指向特征的方向。
在每个主要组件中,具有更大绝对重量的功能&#34; pull&#34;主要组成部分更多的是该特征的方向。
例如,我们可以说在PC1中,由于特征A,特征B,特征I和特征J具有相对较低的权重(绝对值),因此PC1并未指向这些特征的方向。特征空间。 PC1将指向功能E相对于其他方向的方向。
较低维度的可视化
有关此内容的可视化,请查看从here和here获取的以下数据:
我们可以在视觉上看到来自PCA的两个特征向量正在被拉动&#34;在功能1和功能2方向。因此,如果我们要制作一个像您所做的主要组件分解表,我们可以期望从功能1和功能2中看到一些解释PC1和PC2的重量。
接下来,我们有一个不相关数据的例子。
让我们将绿色原理组件称为PC1,将粉红色原则组件称为PC2。很明显,PC1没有沿着特征x的方向被拉动,并且在特征y的方向上没有被拉到PC2。 因此,在我们的表格中,我们必须将特征x的权重设为0。在PC1中,特征y的权重为0在PC2中。
我希望这可以让您了解自己在桌面上看到的内容。