MinMax Scaler 和 TensorFlow
Posted
技术标签:
【中文标题】MinMax Scaler 和 TensorFlow【英文标题】:MinMax Scaler and 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.
【问题讨论】:
【参考方案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)
所以,简而言之,我想说的是不要缩放目标。就这样吧。
或者,如果您想缩放目标,请单独缩放它。这样,在预测之后,逆向缩放是可能的。
【讨论】:
以上是关于MinMax Scaler 和 TensorFlow的主要内容,如果未能解决你的问题,请参考以下文章
sklearn 中的 MinMax Scaler 不会标准化 0 到 1 之间的列值
实现和使用 MinMax 与四排 (connect4) 游戏