如何对一维数组应用PCA?解决维度不匹配报错问题
解决PCA报错:Expected 2D array, got 1D array instead
问题原因
你用flatten()把整个数据集压缩成了1维数组,而PCA要求输入必须是**(样本数量, 特征数量)**的2D数组——每一行对应一个样本,每一列对应一个特征。你的操作丢失了样本维度的结构,导致PCA无法正确解析输入数据。
修正方案
不要用flatten(),改用reshape()保留样本维度,将每个样本单独展开为一维特征:
# 正确展开特征:保留样本维度,自动计算特征总数 x_train = X_train.reshape(X_train.shape[0], -1) x_test = X_test.reshape(X_test.shape[0], -1) # 执行PCA降维 pca = PCA(n_components=150) x_train = pca.fit_transform(x_train) x_test = pca.transform(x_test) # 验证结果形状(应为(50000, 150) 和 (10000, 150)) print(x_train.shape, x_test.shape)
关键说明
reshape(X_train.shape[0], -1)中,X_train.shape[0]是样本总数(50000),-1让Python自动计算每个样本的特征数(32323=3072),最终得到(50000, 3072)的2D数组,完全符合PCA的输入要求。- 后续
fit_transform和transform就能正常执行,将特征维度从3072降至150。
内容的提问来源于stack exchange,提问作者Bn.
相关产品推荐
相关产品推荐

