Numpy 将Keras模型的输出重新缩放回原始比例

Numpy 将Keras模型的输出重新缩放回原始比例,numpy,machine-learning,scikit-learn,keras,normalization,Numpy,Machine Learning,Scikit Learn,Keras,Normalization,我不熟悉神经网络(只是一个免责声明) 我有一个基于8个特征预测混凝土强度的回归问题。我首先做的是使用最小-最大规格化对数据进行重新缩放: # Normalize data between 0 and 1 from sklearn.preprocessing import MinMaxScaler min_max = MinMaxScaler() dataframe2 = pd.DataFrame(min_max.fit_transform(dataframe), columns = dataf

我不熟悉神经网络(只是一个免责声明)

我有一个基于8个特征预测混凝土强度的回归问题。我首先做的是使用最小-最大规格化对数据进行重新缩放:

# Normalize data between 0 and 1
from sklearn.preprocessing import MinMaxScaler

min_max = MinMaxScaler()
dataframe2 = pd.DataFrame(min_max.fit_transform(dataframe), columns = dataframe.columns)
然后将数据帧转换为numpy数组,并将其拆分为X_列、y_列、X_测试、y_测试。 下面是网络本身的Keras代码:

from keras.models import Sequential
from keras.layers import Dense, Activation

#Set the params of the Neural Network
batch_size = 64
num_of_epochs = 40
hidden_layer_size = 256

model = Sequential()
model.add(Dense(hidden_layer_size, input_shape=(8, )))
model.add(Activation('relu'))
model.add(Dense(hidden_layer_size))
model.add(Activation('relu'))
model.add(Dense(hidden_layer_size))
model.add(Activation('relu'))
model.add(Dense(1))
model.add(Activation('linear'))


model.compile(loss='mean_squared_error', # using the mean squared error function
              optimizer='adam', # using the Adam optimiser
              metrics=['mae', 'mse']) # reporting the accuracy with mean absolute error and mean squared error

model.fit(X_train, y_train, # Train the model using the training set...
          batch_size=batch_size, epochs=num_of_epochs,
          verbose=0, validation_split=0.1)

# All predictions in one array
predictions = model.predict(X_test)
问题:

  • 预测数组将以缩放格式显示所有值(介于0和1之间),但显然我需要预测为真实值。如何将这些输出重新缩放回实际值

  • 最小-最大或Z-分数标准化是否更适合回归问题?这个“批量规范化”怎么样

  • 谢谢,

    根据,
    MinMaxScaler
    类有一个
    逆变换
    方法,可以满足您的需要:


    逆变换(X):根据特征范围撤消X的缩放。

    对于1:使用
    逆变换()


    您的问题有点太宽泛了:它包含两个问题,第一个问题(重新缩放)与keras无关。您的第一个问题已得到回答,第二个问题超出stackoverflow的范围。请查查嗨,卡米莱里,就一个问题。在我的例子中,我在-1,1之间缩放输入数据,但在模型的输出处。predict()数据范围不在-1和1之间。我有一些奇怪的值,比如-1.00688391,你知道为什么吗?我想当我用逆函数_transofrm()重新缩放时,这会导致坏的结果results@mik1904最后一层的非线性是什么?对于[0,1]中的输出,它应该是一个sigmoid,因此在您的例子中,公式可以是2*sigmoid-1。这将迫使结果介于-1和1之间。你的问题是什么?我有一个带有一个隐藏层激活功能的LSTMlinear@mik1904如果不使用特殊函数作为最后一个线性约束输出值的范围,没有理由不得到-1以外的值,1对于线性激活函数,应该没有问题吧?但是模型在训练期间报告的MAE/MSE仍将使用“错误”的刻度。没有办法在模型内部进行反向缩放吗?@HansBouwmeester您可以在最后一层之后使用a进行反向缩放。您必须在
    tf.Tensor
    s上实现它,因此您可能无法直接使用
    MinMaxScaler.inverse\u transform
    ,但手工编写逆变换非常简单。