如何解读Sklearn中PCA主成分的解释方差比图及对应原始特征?
问题
在K-means聚类前用PCA做降维,数据集包含points、assists、rebounds三列,经透视后按店铺和年份维度展开。从解释方差比图可知前3个主成分方差占比最高,想知道:
- 能否判断这3个主成分分别对应哪些原始特征(比如是否对应2021年的points列)?
- 该解释方差比图的正确解读方式是什么?
数据集与预处理代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA df_full = pd.DataFrame({'year':[2021,2021,2021,2021,2021,2021,2021,2021,2021,2021, 2022,2022,2022,2022,2022,2022,2022,2022,2022,2022], 'store':['store1','store2','store3','store4','store5','store6','store7','store8','store9','store10', 'store1','store2','store3','store4','store5','store6','store7','store8','store9','store10'], 'points': [18, 33, 19, 14, 14, 11, 20, 28, 30, 31, 35, 33, 29, 25, 25, 27, 29, 30, 19, 23], 'assists': [3, 3, 4, 5, 4, 7, 8, 7, 6, 9, 12, 14, 5, 9, 4, 3, 4, 12, 15, 11], 'rebounds': [15, 14, 14, 10, 8, 14, 13, 9, 5, 4, 11, 6, 5, 5, 3, 8, 12, 7, 6, 5]}) # 创建聚类分析用的透视表 df = df_full.pivot(index=['store'],columns=['year']).reset_index() # 设置聚类分析的索引 df.set_index(['store'], inplace=True) # 标准化数据 scaled_df = StandardScaler().fit_transform(df) # 确定最优主成分数量 pca = PCA(n_components=6) pca.fit(scaled_df) var = pca.explained_variance_ratio_ plt.bar(list(range(var.shape[0])),var) feature = range(pca.n_components_) plt.xlabel('PCA features') plt.ylabel('variance %') plt.xticks(feature) # 使用最优主成分数量(此处为3) pca = PCA(n_components=3) pca.fit(scaled_df) df_transform = pca.transform(scaled_df) # 应用K-means聚类 kmeans = KMeans(init="random", n_clusters=3, n_init=10, random_state=1)
解释方差比图

主成分系数矩阵
pca.components_ array([[ 0.35130535, -0.50070859, 0.29700875, 0.26964774, -0.59032958, -0.34126579], [ 0.56248993, 0.3654443 , -0.30040924, 0.65744874, 0.09535234, 0.13593718], [ 0.18181155, 0.05593549, 0.69079082, -0.0149547 , -0.00170045, 0.69742189]])
解答
1. 主成分与原始特征的对应关系
不能直接将单个主成分对应到某一个原始特征,因为主成分是所有原始特征的线性组合,而非单一特征的映射。
结合你的pca.components_矩阵分析:
- 每一行代表一个主成分,每一列对应透视表展开后的6个标准化原始特征(顺序为
points_2021、points_2022、assists_2021、assists_2022、rebounds_2021、rebounds_2022); - 第一个主成分(第一行)中,
rebounds_2021(第5列)的系数绝对值最大(-0.59),points_2022(第2列)次之(-0.50),说明这个主成分主要由这两个特征的反向变化主导; - 第三个主成分(第三行)中,
assists_2021(第3列)和rebounds_2022(第6列)的系数绝对值接近0.69,说明这个主成分主要反映这两个特征的同向变化。
主成分的核心作用是捕捉原始数据中方差最大的方向,是多个特征的综合体现,无法直接对应单一原始特征。
2. 解释方差比图的正确解读
这个柱状图的核心是展示每个主成分对原始数据标准化后方差的解释能力:
- x轴是主成分序号(从0开始),主成分按方差解释能力从高到低排序;
- y轴是该主成分的方差解释占比,数值越高代表这个主成分能捕捉到的数据信息越多;
- 选择前3个主成分的依据是它们的累计方差解释占比最高,能保留数据的大部分核心信息(从图中可见,后面的主成分高度极低,能解释的方差极少,属于噪声或次要信息);
- 实际应用中更常用累计方差解释占比(可通过
np.cumsum(var)计算)来选择主成分数量,一般要求累计占比达到70%-90%即可。
内容的提问来源于stack exchange,提问作者user032020
相关产品推荐
相关产品推荐

