首页 > 解决方案 > 执行 PCA 后如何绘制每个变量的主向量?

问题描述

我的问题主要来自这篇文章:https ://stats.stackexchange.com/questions/53/pca-on-correlation-or-covariance

在文章中,作者绘制了每个变量的向量方向和长度。根据我的理解,在执行 PCA 之后。我们得到的只是特征向量和特征值。对于维度为 M x N 的数据集,每个特征值应该是一个 1 x N 的向量。所以,我的问题可能是向量的长度是特征值,但是如何找到每个变量的向量方向数学? 向量长度的物理意义是什么?

另外,如果可能的话,我可以在 python 中使用 scikit PCA 函数做类似的工作吗?

谢谢!

标签: pythonscikit-learnpca

解决方案


该图称为双图,它对理解PCA结果非常有用。向量的长度只是每个特征/变量在每个主成分(即 PCA 负载)上的值。

例子:

这些载荷可通过print(pca.components_). 使用Iris 数据集,载荷为:

  [[ 0.52106591, -0.26934744,  0.5804131 ,  0.56485654],
   [ 0.37741762,  0.92329566,  0.02449161,  0.06694199],
   [-0.71956635,  0.24438178,  0.14212637,  0.63427274],
   [-0.26128628,  0.12350962,  0.80144925, -0.52359713]])

在这里,每一行是一台 PC,每一列对应一个变量/特征所以特征/变量 1 在 PC1 上的值为 0.52106591,在 PC2 上的值为 0.37741762。这些是用于绘制您在双图中看到的向量的值。见下面的坐标Var1。正是那些(以上)价值!


最后,要在 python 中创建此图,您可以使用以下命令sklearn

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_.T) 
plt.show()

在此处输入图像描述

另见这篇文章:https ://stackoverflow.com/a/50845697/5025009

https://towardsdatascience.com/pca-clearly-explained-how-when-why-to-use-it-and-feature-importance-a-guide-in-python-7c274582c37e?source=friends_link&sk=65bf5440e444c24aff192fedf9f8b64f


推荐阅读