MinMaxScaler 广播形状

数据挖掘 scikit-学习 喀拉斯 特征缩放
2022-02-17 09:57:47

我在 Keras 中使用具有 3 个输入和 1 个输出的神经网络。我正在使用 sklearn 中的 MinMaxScaler 将我的输入标准化为 [0,1]

我的输入形状是 (XX,3) 我的输出形状是 (XX,1)

缩放输入和输出数组时我没有任何输入

    self.scaler = MinMaxScaler(feature_range=(0,1))

    dataX = self.scaler.fit_transform(dataX)
    dataY = self.scaler.fit_transform(dataY)

    self.model.fit(dataX,dataY,nb_epoch=1000)

训练后我可以做出这样的预测:

    data    = numpy.array([[ val1,val2,val3]])
    data = self.scaler.fit_transform(data)
    prediction = self.model.predict(data)

但是我的输出没有正确缩放,这是有道理的,因为我没有调用逆变换来应用逆缩放

但是当我调用它时,我得到一个 ValueError ,我尝试将转换应用于单个预测或预测数组,但问题是一样的

self.scaler.inverse_transform(predictions) # prediction shape is (18,) :

ValueError: 操作数不能与形状 (18,) (3,) (18,) 一起广播

ValueError:形状 (18,1) 的不可广播输出操作数与广播形状 (18,3) 不匹配

我不明白这是一个形状问题,但错误消息并没有太大帮助

(12,1) 被 fit_transform (18,1) 接受似乎非常相似.. 所以我没有得到错误。

1个回答

你犯了一些错误MinMaxScaler

MinMaxScaler不应该安装两次(因为内部参数MinMaxScaler会改变),并且dataX&dataY应该有自己的缩放器(因为它们有不同的最小值和最大值。

尝试做这样的事情:

self.x_scaler = MinMaxScaler()
self.y_scaler = MinMaxScaler()

dataX = self.x_scaler.fit_transform(dataX)
dataY = self.y_scaler.fit_transform(dataY)

self.model.fit(dataX, dataY, nb_epoch=1000)

data = numpy.array([[val1, val2, val3]])
data = self.x_scaler.transform(data)
prediction = self.model.predict(data)
real_prediction = self.y_scaler.inverse_transform(prediction)