使用sklearn计算因子载荷

32

我希望能够在Python中获得个体变量和主成分之间的相关性。 我正在使用sklearn中的PCA。在对数据进行分解后,我不明白如何获得载荷矩阵?这是我的代码。

iris = load_iris()
data, y = iris.data, iris.target
pca = PCA(n_components=2)
transformed_data = pca.fit(data).transform(data)
eigenValues = pca.explained_variance_ratio_

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html没有提到如何实现这个。


explained_variance_ratio_ 返回协方差/相关矩阵的特征值。原始样本变量和主成分之间的相关性位于其他地方,这就是我正在寻找的内容。 - Riyaz
将您的数据向主成分进行矢量投影,将为您提供该方向上的方差(即与此PC的相关性)。 - BartoszKP
请你能否解释一下? - Riyaz
也许这里的解释(https://dev59.com/Z3nZa4cB1Zd3GeqPmy0q#20002494)已经足够了?另外,维基百科关于PCA的文章非常详尽,包含了我认为所有的属性信息。 - BartoszKP
3个回答

25

将每个分量乘以其相应特征值的平方根:

pca.components_.T * np.sqrt(pca.explained_variance_)

这将生成您的加载矩阵。


19
我认为@RickardSjogren在描述特征向量,而@BigPanda则给出了负载。这有很大的区别:PCA中的负载和特征向量:何时使用其中之一?
我创建了这个PCA类,其中包含一个loadings方法。
通过pca.components_ * np.sqrt(pca.explained_variance_)给出的负载更类似于多重线性回归中的系数。我在这里不使用.T,因为在上述链接的PCA类中,组件已经被转置了。numpy.linalg.svd产生了u,s和vt,其中vt是共轭转置,所以你需要先用vt.T返回v
还有另外一个重要的细节:在sklearn.PCA中组件和负载的符号(正/负)可能与R等软件包不同。更多相关信息可以参考这里:在sklearn.decomposition.PCA中,为什么components_为负数?

加载错误:"ValueError: operands could not be broadcast together with shapes (2,10) (2,) "需要转置吗?正如@BigPanda所指出的那样。 - s2t2

12
根据这篇博客pca.components_的每一行都是载荷向量。因此:
loadings = pca.components_

那么请不要担心。这是与你所在的领域有关的问题。在我的领域(化学计量学)中,载荷被定义为单位向量,而观测投影则根据特征值进行缩放以形成观测得分。载荷向量被限制为单位向量也在维基百科关于PCA的条目中描述(https://en.wikipedia.org/wiki/Principal_component_analysis#Details)。这也在你下面回答中链接的答案的评论中讨论过(https://stats.stackexchange.com/a/143949)。 - RickardSjogren
这些是特征向量,而不是载荷矩阵。 - Chandra Kanth
1
@ChandraKanth,你上面的评论是回应一个后来被删除的类似评论。简而言之,在许多领域中,载荷被定义为协方差矩阵的特征向量。在其他领域中,载荷被缩放以承载方差。 - RickardSjogren
@RickardSjogern,所以为了让它有意义 - Chandra Kanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接