循环选择分析待剔除变量:如何用Python实现每次PCA剔除一个变量
实现方案
Python 无需额外的“宏”支持,直接通过循环遍历变量名、每次剔除单个变量后执行PCA即可,核心依赖pandas做数据处理、scikit-learn做PCA计算。
前置依赖
先安装需要的第三方库:
pip install pandas scikit-learn
完整代码示例
import pandas as pd from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # ---------------------- 配置部分 ---------------------- # 假设你的原始数据集为 pandas DataFrame 格式,变量名如下 var_list = [ 'Var_1_GroupA', 'Var_2_GroupA', 'Var_1_GroupB', 'Var_2_GroupB', 'Var_3_GroupB', 'Var_1_GroupC', 'Var_2_GroupC', 'Var_3_GroupC', 'Var_4_GroupC', 'Var_5_GroupC', 'Var_1_GroupD', 'Var_1_GroupE', 'new_Var_1_GroupA', 'new_Var_1_GroupB', 'new_Var_1_GroupC', 'new_Var_2_GroupC', 'Var_1_GroupF', 'Var_1_GroupG', 'Var_1_GroupH', 'Var_2_GroupH' ] # PCA 配置:保留前2个主成分,可根据需求调整为数值(保留前N个)或0-1的浮点数(保留对应占比的方差) pca_n_components = 2 # ------------------------------------------------------ # 初始化存储结果的字典,key为本次剔除的变量名,value为对应PCA结果 pca_result_pool = {} std_scaler = StandardScaler() pca_model = PCA(n_components=pca_n_components) # 循环执行每次剔除单个变量的PCA计算 for excluded_var in var_list: # 生成剔除当前变量的数据集子集 current_subset = df[var_list].drop(columns=[excluded_var]) # 对数据集做标准化(PCA计算的必要前置步骤) scaled_subset = std_scaler.fit_transform(current_subset) # 拟合PCA fitted_pca = pca_model.fit(scaled_subset) # 存储核心结果,可根据你的分析需求增减存储字段 pca_result_pool[excluded_var] = { # 各主成分解释方差占比 "explained_variance_ratio": fitted_pca.explained_variance_ratio_, # 主成分载荷矩阵 "components": fitted_pca.components_, # 原始数据降维后的结果 "transformed_data": fitted_pca.transform(scaled_subset) }
结果调用示例
要获取剔除Var_1_GroupA后的PCA解释方差占比,直接调用存储的字典即可:
print(pca_result_pool["Var_1_GroupA"]["explained_variance_ratio"])
补充说明
- PCA计算对数据量纲敏感,务必确保输入数据已经做标准化处理
- 如果你的数据集变量是动态变化的,无需手动写
var_list,直接通过var_list = df.columns.tolist()即可获取所有列名 - 如果你需要用全量数据集的标准化规则而非每次子集单独标准化,可以先对全量数据集做标准化后再循环剔除变量
- 若需要每次PCA的结果单独导出为文件,可以在循环末尾加对应导出逻辑,比如把载荷矩阵存为csv文件
内容的提问来源于stack exchange,提问作者chipsin
相关产品推荐
相关产品推荐

