使用MinMaxScaler逆转换预测成本时报错,求解决方案
解决MinMaxScaler inverse_transform报错的问题
看起来你遇到的问题核心有两个可能的原因:要么你的scaler对象在拟合原始数据后被重新初始化了,要么你的预测结果y的形状不符合inverse_transform的要求。咱们一步步来修正:
错误原因分析
你之前确实调用了scaler.fit_transform(food[["COST"]]),这时候scaler已经拟合了原始COST的分布,但报错提示"not fitted yet",大概率是下面两种情况之一:
- 在执行
scaler.inverse_transform(y)之前,你又重新创建了一个新的MinMaxScaler()实例覆盖了原来的scaler; - 你的预测结果
y是一维数组(比如模型predict输出的通常是一维),而inverse_transform要求输入是二维数组(和拟合时的输入形状一致,即(n,1))。
修正后的完整代码
from sklearn.preprocessing import MinMaxScaler import pandas as pd # 1. 初始化scaler并拟合原始COST数据,这一步要确保只执行一次 scaler = MinMaxScaler() food[["COST"]] = scaler.fit_transform(food[["COST"]]) # 2. 假设y是你的模型输出的缩放后预测值 # 如果y是一维数组,先转换成二维(必须和拟合时的输入形状匹配) y_reshaped = y.reshape(-1, 1) # 3. 转换回原始成本值 y_original = scaler.inverse_transform(y_reshaped) # 4. 转为DataFrame并保存到Excel df_original_cost = pd.DataFrame(y_original, columns=["COST"]) df_original_cost.to_excel("yg.xlsx", index=False)
关键注意事项
- 不要重新覆盖scaler:确保在拟合后,不要再执行
scaler = MinMaxScaler(),否则之前的拟合信息会丢失,导致报错; - 输入形状必须匹配:
fit_transform用的是二维的food[["COST"]](DataFrame,形状为(n,1)),所以inverse_transform的输入也必须是二维数组,一维的y一定要用reshape(-1,1)转换; - 确认y的来源:保证
y是基于缩放后的特征训练得到的预测结果,这样转换回原始值才有意义。
内容的提问来源于stack exchange,提问作者Kurapati teju
相关产品推荐
相关产品推荐

