首页 > 解决方案 > sklearn.preprocessing.MinMaxScalar 中“inverse_transform”函数的奇怪行为

问题描述

我在 sklearn.preprocessing 中使用 MinMaxScalar 函数来规范化我的一些变量(数组)的属性以在模型(线性回归)中使用它,在模型创建和训练之后,我测试了我的模型x_test(splited usind train_test_split)并将结果存储在一些variable(say predicted)中,对于评估目的我想用原始数据集评估我的预测,因为我使用了“ MinMaxScalar.inverse_transform”函数,当我的代码按以下顺序时,该函数运行良好,

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25,train_size=0.75,random_state=27)

sc=MinMaxScaler(feature_range=(0,1))
x_train=sc.fit_transform(x_train)
x_test=sc.fit_transform(x_train)
y_train=y_train.reshape(-1,1)
y_train=sc.fit_transform(y_train)

当我像下面的代码一样更改顺序时,它会在可广播输出操作数上抛出错误,形状 (379,1) 与广播形状 (379,13) 不匹配)

x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.25,train_size=0.75,random_state=27)

sc=MinMaxScaler(feature_range=(0,1))
x_train=sc.fit_transform(x_train)
y_train=y_train.reshape(-1,1)
y_train=sc.fit_transform(y_train)
x_test=sc.fit_transform(x_train)

请比较两张照片以更好地理解我的查询

标签: pythonscikit-learn

解决方案


从链接的打印屏幕图中可以看出,您使用它 MinMaxScaler拟合转换训练和测试 x 数据,以及训练 y 数据(这没有意义)。

正确的过程是

  1. 用训练 x 数据拟合定标器。fit_transform()也变换(缩放x_train).
sc = MinMaxScaler(feature_range=(0,1))
x_train = sc.fit_transform(x_train)
  1. 还使用相同的缩放器缩放测试 x 数据。不要fit在这里;只是缩放/转换。
x_test = sc.transform(x_test)
  1. 如果您认为 y 数据也需要缩放,则必须为此目的安装另一个缩放器。也可能是不需要缩放 y 数据。
# Option A: Do not scale y-data
# (do nothing)

# Option B: Scale y-data
sc_y = MinMaxScaler(feature_range=(0,1))
y_train = sc_y.fit_transform(y_train)
  1. 训练完模型 ( lr) 后,您可以使用缩放x_test后的模型进行预测:
# Option A:
predicted = lr.predict(x_test)

# Option B:
y_test_scaled = lr.predict(x_test)
predicted = sc_y.inverse_transform(y_test_scaled)

推荐阅读