You need to enable JavaScript to run this app. 如何将主成分分析(PCA)结果映射回输入模型的原始特征?
优惠活动
大模型
产品
解决方案
定价
更多

如何将主成分分析(PCA)结果映射回输入模型的原始特征?

你运行给出的代码时,确实可以输出pca.explained_variance_ratio_结果,同时生成如下主成分解释方差占比直方图:
主成分方差占比直方图

你给出的代码存在两处可优化的点:

  • 缺少sklearn.decomposition.PCA、matplotlib.pyplot的导入语句
  • 提前提取了x = df.iloc[:,2:]但实际PCA拟合用了全量df,且没有做标准化处理,不同量纲的特征会直接影响PCA结果的准确性

PCA1、PCA2映射回原始特征的实现方法

sklearn的PCA实例的components_属性存储了主成分到原始特征的映射权重矩阵,矩阵的每一行对应一个主成分,每一列对应输入PCA的原始特征,权重绝对值越大代表对应原始特征对该主成分的贡献度越高。

完整实现代码

import statsmodels.api as sm
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 加载mtcars数据集
mtcars = sm.datasets.get_rdataset("mtcars", "datasets", cache=True).data
df = pd.DataFrame(mtcars)

# 提取第三列及之后的特征用于PCA计算
x = df.iloc[:,2:]
# 先做特征标准化,消除量纲影响
scaler = StandardScaler()
x_scaled = scaler.fit_transform(x)

# 拟合PCA模型
pca = PCA(n_components=11)
principalComponents = pca.fit_transform(x_scaled)

# 绘制方差占比直方图
PC = range(1, pca.n_components_+1)
plt.bar(PC, pca.explained_variance_ratio_, color='gold')
plt.xlabel('Principal Components')
plt.ylabel('Variance %')
plt.xticks(PC)
plt.show()

# ========== 核心:提取PCA1、PCA2到原始特征的映射关系 ==========
pca_2_mapping = pd.DataFrame(
    data = pca.components_[:2], # 取前两个主成分的权重
    index = ["PCA1", "PCA2"],
    columns = x.columns # 对应原始特征名
)
print("PCA1、PCA2与原始特征的映射权重:")
print(pca_2_mapping)

# 可选:将主成分得分反推回原始特征数值
# 取前两个主成分的得分反变换
pca_2_scores = principalComponents[:, :2]
# 先反PCA变换,再反标准化得到原始尺度的特征值
inverse_original = scaler.inverse_transform(pca.inverse_transform(principalComponents))
inverse_original_df = pd.DataFrame(inverse_original, columns=x.columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 02:36:04