调用scaler.inverse_transform()报错Found array with dim 3该如何解决?
问题原因分析
报错的核心原因是你调用inverse_transform时,额外为2维的Target_train、Target_test套了一层方括号[]:
- 原始的
Target_train为2维,结构符合MinMaxScaler的输入要求 - 用
[Target_train]包裹后,会在原维度外新增一个维度,整体变为3维结构,触发scikit-learn的维度校验规则,所以抛出「期望输入维度≤2」的错误。
修复方案
直接传入本身就是2维的目标变量即可,不需要额外嵌套方括号:
Target_train = scaler.inverse_transform(Target_train) Target_test = scaler.inverse_transform(Target_test)
额外规范提示
你当前在数据集拆分前就对全量数据做归一化的操作存在数据泄露风险:测试集的最大、最小值统计信息被提前带入了训练过程,会导致最终的模型评估结果偏离真实水平。更规范的处理逻辑为:先拆分训练集、测试集,仅用训练集拟合归一化器,再分别对训练集和测试集做变换,参考逻辑如下:
from sklearn.model_selection import train_test_split from sklearn.preprocessing import MinMaxScaler # 第一步:先拆分数据集 X_train, X_test, y_train, y_test = train_test_split(特征矩阵, 目标变量, test_size=0.2, random_state=42) # 第二步:仅用训练集拟合归一化器 scaler = MinMaxScaler(feature_range=(0, 1)) X_train_scaled = scaler.fit_transform(X_train) # 第三步:测试集复用训练集拟合的归一化器做变换 X_test_scaled = scaler.transform(X_test)
内容的提问来源于stack exchange,提问作者the phoenix
相关产品推荐
相关产品推荐

