You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PCA分析特征权重绘制技术求助:附数据集与主成分计算代码

实现PCA特征权重可视化的完整方案

看起来你已经搞定了PCA计算的核心步骤,接下来咱们把特征权重(也就是主成分的载荷矩阵)提取出来并可视化,这样就能清晰看到每个原始特征对前两个主成分的贡献啦。

首先先补全并优化你的基础代码(注意ix已经被sklearn弃用,换成iloc更稳妥):

import pandas as pd
from sklearn.decomposition import PCA as sklearnPCA
from sklearn.preprocessing import StandardScaler
import matplotlib.pyplot as plt

# 读取数据集(可替换为你的本地文件路径,或直接用pd.read_csv读取URL)
data = pd.read_csv('rr.txt')
X = data.iloc[:, 0:4].values  # 提取前4列的特征数据

# 标准化特征(PCA对尺度敏感,这一步是关键!)
X_std = StandardScaler().fit_transform(X)

# 拟合PCA,提取前2个主成分
sklearn_pca = sklearnPCA(n_components=2)
Y_sklearn = sklearn_pca.fit_transform(X_std)

# 获取特征权重(载荷矩阵):形状为(2,4),对应2个主成分 × 4个原始特征
feature_weights = sklearn_pca.components_
# 获取原始特征的列名(如果数据集没有列名,可手动指定为['Feature1','Feature2','Feature3','Feature4'])
feature_names = data.columns[0:4]

方法1:分栏条形图可视化单主成分权重

这种方式能单独清晰展示每个主成分下,不同特征的贡献差异:

# 设置画布,分成左右两个子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))

# 绘制第一主成分的特征权重
ax1.bar(feature_names, feature_weights[0], color='#1f77b4')
ax1.set_title('Feature Weights for First Principal Component')
ax1.set_ylabel('Weight Value')
ax1.tick_params(axis='x', rotation=45)  # 旋转x轴标签避免重叠

# 绘制第二主成分的特征权重
ax2.bar(feature_names, feature_weights[1], color='#ff7f0e')
ax2.set_title('Feature Weights for Second Principal Component')
ax2.set_ylabel('Weight Value')
ax2.tick_params(axis='x', rotation=45)

plt.tight_layout()
plt.show()

方法2:双组条形图对比两个主成分权重

如果想把两个主成分的权重放在同一张图里直接对比,用双组条形图更直观:

fig, ax = plt.subplots(figsize=(8, 5))
x_indices = range(len(feature_names))
bar_width = 0.35

# 绘制第一主成分权重
rects1 = ax.bar([i - bar_width/2 for i in x_indices], 
                feature_weights[0], bar_width, label='PC1', color='#1f77b4')
# 绘制第二主成分权重
rects2 = ax.bar([i + bar_width/2 for i in x_indices], 
                feature_weights[1], bar_width, label='PC2', color='#ff7f0e')

# 设置图表细节
ax.set_xticks(x_indices)
ax.set_xticklabels(feature_names, rotation=45)
ax.set_title('Feature Weights for Principal Components 1 & 2')
ax.set_ylabel('Weight Value')
ax.legend()

plt.tight_layout()
plt.show()

几个关键注意点:

  • 为什么要标准化?PCA是基于方差计算的,尺度大的特征会默认主导主成分,所以必须用StandardScaler把所有特征缩放到均值为0、方差为1的范围,保证每个特征的权重公平性。
  • sklearn_pca.components_返回的是主成分的特征向量,也就是每个原始特征对对应主成分的权重:权重绝对值越大,说明该特征对这个主成分的贡献越大;正负号代表特征与主成分的相关性方向。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:18:34