python中变量对PC的贡献
我使用PCA查找了60台PC:python中变量对PC的贡献,python,plot,bar-chart,pca,feature-extraction,Python,Plot,Bar Chart,Pca,Feature Extraction,我使用PCA查找了60台PC: N_comp=60 from sklearn.decomposition import PCA pca = PCA(n_components = N_comp) X_pca=pca.fit_transform(X_scale) #lower dimension data eigenvalues=pca.components_ 现在,我试图找到我的特性(X数据列)对PC1和PC2的贡献。例如,对于PC1,我想显示前10个特征中每个特征的百分比的条形图,其中x轴将
N_comp=60
from sklearn.decomposition import PCA
pca = PCA(n_components = N_comp)
X_pca=pca.fit_transform(X_scale) #lower dimension data
eigenvalues=pca.components_
现在,我试图找到我的特性(X数据列)对PC1和PC2的贡献。例如,对于PC1,我想显示前10个特征中每个特征的百分比的条形图,其中x轴将具有特征的标签
大概是这样的:
我试图在python中实现这一点,但不知道如何找到特性名称。例如,我所做的是排序,以找到构成PC1的前10个功能变量,如下所示:
N_elements=10
PC1=abs(eigenvalues[1,:])
PC1.sort(axis=0)
PC1=PC1[::-1]
PC1=PC1[0:N_elements]
PC1
导致
array([0.17040832, 0.16937861, 0.1683676 , 0.16544657, 0.16491703,
0.16491679, 0.16168056, 0.16108829, 0.16034576, 0.16029183])
并绘制它:
plt.bar(range(N_elements), PC1, alpha=0.3, align='center')
plt.title('Contributions of variables to PC1')
但这导致X轴仅为数字0到9(对应于10个元素)。如何检索名称并在绘图栏上放置标签
非常感谢 主成分的元素和变量的顺序相同。具有相应索引的元素的绝对值越大(i=1…p),变量越大,对PC. 的转换就越大,请考虑评论和你能做什么来提高问题的质量。“好”问题的关键部分是(1)可复制的样本数据,(2)真正的代码尝试,(3)特定的编码问题,而不是问“如何实现XYZ”的帖子 撇开这一点不谈,以下几点应该可以让你开始。事实上,所有的信息都在你自己提供的链接中,我建议你花些时间理解这些材料
USArrest
数据集。我们使用prcomp
pca <- prcomp(USArrests)
factoextra::get\u pca\u var
get_pca_var(pca)$contrib
# Dim.1 Dim.2 Dim.3 Dim.4
#Murder 0.1739250 0.2008981 0.6382517 98.9869251
#Assault 99.0465399 0.3452741 0.4565669 0.1516191
#UrbanPop 0.2147001 95.4250536 4.0218813 0.3383649
#Rape 0.5648349 4.0287742 94.8833000 0.5230908
如您所见,结果是相同的。
我把阴谋留给你;关于如何在SO和web上显示条形图,您可以找到很多建议您给出的链接提供了一个明确的公式,说明如何计算变量对主成分的贡献百分比。为什么不实现它呢?看起来您特别想要
fviz_contrib
函数。你链接到的页面似乎为如何应用它提供了一个很好的指南,如果你在做这件事时遇到了特定的问题,你应该更多地解释你实际尝试了什么以及你遇到了什么问题。这与你最初问的问题完全不同(有一个r
编码标签,因此答案如下)。在不活动3小时后,以及在收到SO用户对您的原始问题的答复后,完全更改此问题是非常糟糕的。这表明无视SO发布的一般指导原则和对SO社区的不尊重。我投票反对重新打开此问题。相反,应删除此问题而OP应该考虑提出一个新的问题。@ AAA你自己用“<代码> R< /代码>代码标签标记这个;现在3小时后!关于您的不活动,您是在告诉我们您正在寻找Python解决方案?这是非常糟糕的形式,对迄今为止一直试图帮助您的所有人都非常粗鲁。请记住,您是在互联网上向陌生人寻求免费帮助。这种行为是不可接受的。我对此表示感谢并同意。我花了时间来了解莉兹还有我不明白的。。。
contrib <- t(t(coord ^ 2) / colSums(coord ^ 2)) * 100
contrib
# PC1 PC2 PC3 PC4
#Murder 0.1739250 0.2008981 0.6382517 98.9869251
#Assault 99.0465399 0.3452741 0.4565669 0.1516191
#UrbanPop 0.2147001 95.4250536 4.0218813 0.3383649
#Rape 0.5648349 4.0287742 94.8833000 0.5230908
get_pca_var(pca)$contrib
# Dim.1 Dim.2 Dim.3 Dim.4
#Murder 0.1739250 0.2008981 0.6382517 98.9869251
#Assault 99.0465399 0.3452741 0.4565669 0.1516191
#UrbanPop 0.2147001 95.4250536 4.0218813 0.3383649
#Rape 0.5648349 4.0287742 94.8833000 0.5230908