【问题标题】:MinMax Scaler and TensorFlowMinMax Scaler 和 TensorFlow
【发布时间】:2021-11-05 09:10:27
【问题描述】:

我正在使用 Sklearn 和 Tensorflow。我做了一个成功的预测,现在我遇到了预测值反转的问题。我想做一个倒置,因为我想从这个模型中看到指标。一开始,我使用 Sklearn 进行了这种数据转换。

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range = (0,1))
dataset = scaler.fit_transform(df)

type(dataset),dataset.shape
(numpy.ndarray, (425, 3))

在成功执行 TensorFlow 模型后,下一步就是预测。我用代码行预测

trainPredict = model.predict(trainX)
testPredict = model.predict(testX)

trainPredict.shape,testPredict.shape
((406, 7, 1), (58, 7, 1))

type(trainPredict),type(testPredict)
(numpy.ndarray, numpy.ndarray)

所以下一步是反转。我尝试用这行代码做反转

# invert predictions
trainPredict_ = scaler.inverse_transform(trainPredict)
trainY_ = scaler.inverse_transform([trainY])
testPredict_ = scaler.inverse_transform(testPredict)
testY_ = scaler.inverse_transform([testY])

执行最后一个代码块后,我收到此错误:

ValueError: Found array with dim 3. Estimator expected <= 2.

【问题讨论】:

    标签: python numpy tensorflow scikit-learn


    【解决方案1】:

    您不需要缩放目标变量。看看这个 Kaggle discussion,所有参与者都反对缩放目标变量。我也不缩放目标变量。但是如果我们看一下这个堆栈溢出discussion,这里有些人说要缩放目标,大多数人都反对。即使您在互联网上搜索它,大多数人也会反对缩放目标值。
    如果你缩放你的目标值,你可能会得到更低的 rmse,但这只是因为目标彼此非常接近。因此,较低的 rmse 是一种错觉。它没有显示我们模型的真实性能。换句话说,缩放目标对我们的模型没有太大影响。

    所以,我给你的建议是先分离特征和目标,然后只缩放特征,而不是目标。

    y = train['target_column_name']
    X = train.loc[:, train.columns != 'target_column_name']
    
    scaler = MinMaxScaler()
    scaler.fit(X)
    X = scaler.transform(X)
    test = scaler.transform(test)
    

    所以,简而言之,我想说的是不要缩放目标。就这样吧。

    或者,如果您想缩放目标,请单独缩放它。这样,在预测之后,逆向缩放是可能的。

    【讨论】:

      猜你喜欢
      • 2016-08-28
      • 2021-07-31
      • 2017-04-10
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 2021-07-22
      相关资源
      最近更新 更多