预处理基因数据集遇MinMaxScaler特征数量不匹配错误求助
问题解决方法
问题根源
你只对训练集X_train做了特征过滤,但测试集X_test还保留着原始的全部特征,导致两者特征数量不一致。MinMaxScaler是基于X_train的17625个特征训练的,自然无法处理X_test的23146个特征,所以报错。
修正后的代码
# 先基于训练集确定需要保留的特征列 # 第一步:过滤全0特征 keep_cols = X_train.columns[(X_train != 0).any(axis=0)] X_train = X_train[keep_cols] # 第二步:过滤0值占比超过25%的特征 keep_cols = X_train.columns[(X_train == 0).mean() < 0.25] # 同步过滤训练集和测试集的特征(核心:两者必须保留完全相同的列) X_train = X_train[keep_cols] X_test = X_test[keep_cols] # 再执行标准化操作 mm = MinMaxScaler() X_train_scaled = mm.fit_transform(X_train) X_test_scaled = mm.transform(X_test)
关键注意点
- 必须让训练集和测试集保留完全一致的特征列,这是机器学习预处理的基本要求,否则模型训练与预测的输入维度不匹配。
- 所有特征过滤逻辑必须只基于训练集,绝对不能使用测试集的统计信息(比如不能计算测试集的0值占比来过滤),避免数据泄露,保证模型的泛化能力。
内容的提问来源于stack exchange,提问作者Jasoosa
相关产品推荐
相关产品推荐

