为什么PCA的n_components仅能设为1,设置其他值时报索引不匹配错误?
问题原因
报错的根本原因是主成分输出维度和指定的DataFrame列名数量不匹配:
当n_components设为43时,PCA.fit_transform()会返回形状为(样本数, 43)的二维数组,但你在转DataFrame时只给了1个列名['pca'],Pandas无法对齐43列的数据和1个列名,就抛出了维度不匹配的错误。设为1的时候刚好列数和列名数量一致,所以可以正常运行。
修正后的降维代码
from sklearn.decomposition import PCA from sklearn.preprocessing import MinMaxScaler import pandas as pd # 降维前使用和计算主成分数量时一致的归一化处理,避免结果偏差 scaler = MinMaxScaler() X_train_scaled = scaler.fit_transform(X_train) # 设定43个主成分 pca = PCA(n_components=43, random_state=42) pca_result = pca.fit_transform(X_train_scaled) # 生成对应数量的列名:pca_1、pca_2...pca_43 pca_df = pd.DataFrame(pca_result, columns=[f'pca_{i+1}' for i in range(43)]) # 如需拼接回原数据集可打开下方注释 # X_train = pd.concat([X_train, pca_df], axis=1)
额外注意事项
- 后续对测试集做PCA降维时,不要重新拟合scaler和PCA对象,直接用训练集拟合好的两个对象调用
transform()方法处理测试集即可,避免数据泄露 - 累计方差解释率的阈值可以根据业务需求调整,不需要完全固定为95%
内容的提问来源于stack exchange,提问作者Shane Li
相关产品推荐
相关产品推荐

