PCA(n_components=9)适配手写数字数据集的维度匹配报错解决问询
解决PCA降维后DataFrame维度不匹配问题
错误根源
你设置了PCA(n_components=9),降维后的principalComponents是16800行×9列的数组,但创建DataFrame时指定的columns列表有10个元素(从pc0到pc9),列数不匹配直接触发了ValueError。
修复方法
方法1:手动修正列名列表
直接把列名列表缩减到9个,和降维后的列数对齐:
principalComponents = model_pca.fit_transform(X) # 列名只保留pc0到pc8,共9个 df_pca = pd.DataFrame(data = principalComponents, columns = ['pc0', 'pc1', 'pc2', 'pc3', 'pc4', 'pc5', 'pc6', 'pc7', 'pc8']) df_pca['targets'] = y_target
方法2:自动生成列名(推荐)
用循环生成对应数量的列名,避免手动计数出错:
principalComponents = model_pca.fit_transform(X) n_components = model_pca.n_components_ # 直接获取PCA实际使用的成分数,避免硬编码 df_pca = pd.DataFrame(data = principalComponents, columns = [f'pc{i}' for i in range(n_components)]) df_pca['targets'] = y_target
额外提示
PCA的n_components不需要和类别数(10个数字)绑定,硬设为9没有理论依据。更合理的做法是根据方差解释率选择,比如设置n_components=0.95,让PCA自动保留能解释95%数据方差的主成分,这样既能降维又能保留足够的特征信息:
model_pca = PCA(n_components=0.95) principalComponents = model_pca.fit_transform(X) print(f"自动保留的主成分数:{model_pca.n_components_}")
内容的提问来源于stack exchange,提问作者Data Science Analytics Manager
相关产品推荐
相关产品推荐

