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

PCA分析时如何确定选中的主成分及与原始特征的映射关系

原始特征与主成分的对应关系

你拿到的10个主成分不存在和30个原始特征一一对应的关系,每个主成分都是所有原始特征的线性加权组合。你可以通过scikit-learn中训练好的PCA对象的components_属性拿到权重矩阵,这个矩阵的形状是(n_components, n_features),对应你场景下就是10行30列,第i行就是第i个主成分(PCi)对应的30个原始特征的权重系数,系数绝对值越大,说明这个原始特征对当前主成分的贡献越高。

参考示例代码查看对应关系:

from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler
import pandas as pd
from sklearn.datasets import load_breast_cancer

# 加载原始数据
cancer = load_breast_cancer()
df = pd.DataFrame(data=cancer.data, columns=cancer.feature_names)

# PCA前必须先做标准化,消除特征尺度的影响
scaler = StandardScaler()
X_scaled = scaler.fit_transform(df)

# 训练保留95%方差的PCA模型,对应你场景下的10个主成分
pca = PCA(n_components=0.95)
X_pca_95 = pca.fit_transform(X_scaled)

# 把主成分权重转成DataFrame,直观查看对应关系
pca_components_df = pd.DataFrame(
    pca.components_,
    columns = df.columns,
    index = [f'PC{i+1}' for i in range(pca.n_components_)]
)
print(pca_components_df)

原始df与df_new的映射步骤

映射分为正向(原始特征转主成分)和反向(主成分转近似原始特征)两种场景:

1. 正向映射(原始df生成df_new)

就是你已经用到的PCA转换流程,支持批量/单条原始数据转换,不需要重新训练模型:

# 第一步:对原始特征做标准化
X_scaled_new = scaler.transform(df)
# 第二步:用训练好的PCA生成主成分
X_pca = pca.transform(X_scaled_new)
# 转成和你示例一致的df_new格式
df_new = pd.DataFrame(X_pca, columns=[f'PC{i+1}' for i in range(10)])
df_new['label'] = cancer.target

2. 反向映射(df_new还原近似原始df)

因为降维过程丢弃了少部分方差,还原后得到的是原始特征的近似值:

# 取出df_new中的主成分列,排除label列
pca_values = df_new[[f'PC{i+1}' for i in range(10)]].values
# 第一步:反向转换得到标准化后的原始特征
X_scaled_recovered = pca.inverse_transform(pca_values)
# 第二步:还原回原始特征的数值尺度
X_original_recovered = scaler.inverse_transform(X_scaled_recovered)
# 转成和原始df格式对齐的DataFrame
df_recovered = pd.DataFrame(X_original_recovered, columns=df.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.03 07:27:05