【发布时间】:2020-05-01 10:30:24
【问题描述】:
早上好,我使用了 MinMax 规范化来规范化我的数据集,包括特征和标签。我的问题是,将标签也标准化是否正确?如果是,我怎样才能对神经网络的输出进行非规范化(我用规范化的测试集预测的那个)?
很遗憾,我无法上传数据集,但它由 18 个特征和 1 个标签组成。这是一个回归任务,特征和标签是物理量。
所以问题是 y_train_pred e y_test_pred 介于 0 和 1 之间。如何预测“真实值”?如果您发现其他错误,请告诉我。
谢谢。
我使用的代码写在下面
dataset = pd.read_csv('DataSet.csv', decimal=',', delimiter = ";")
label = dataset.iloc[:,-1]
features = dataset.drop(columns = ['Label'])
features = features[best_features]
X_train1, X_test1, y_train1, y_test1 = train_test_split(features, label, test_size = 0.25, random_state = 1, shuffle = True)
y_test2 = y_test1.to_frame()
y_train2 = y_train1.to_frame()
scaler1 = preprocessing.MinMaxScaler()
scaler2 = preprocessing.MinMaxScaler()
X_train = scaler1.fit_transform(X_train1)
X_test = scaler2.fit_transform(X_test1)
scaler3 = preprocessing.MinMaxScaler()
scaler4 = preprocessing.MinMaxScaler()
y_train = scaler3.fit_transform(y_train2)
y_test = scaler4.fit_transform(y_test2)
optimizer = tf.keras.optimizers.Adamax(lr=0.001)
model = Sequential()
model.add(Dense(80, input_shape = (X_train.shape[1],), activation = 'relu',kernel_initializer='random_normal'))
model.add(Dropout(0.15))
model.add(Dense(120, activation = 'relu',kernel_initializer='random_normal'))
model.add(Dropout(0.15))
model.add(Dense(80, activation = 'relu',kernel_initializer='random_normal'))
model.add(Dense(1,activation = 'linear'))
model.compile(loss = 'mse', optimizer = optimizer, metrics = ['mse'])
history = model.fit(X_train, y_train, epochs = 300,
validation_split = 0.1, shuffle=False, batch_size=120
)
history_dict = history.history
loss_values = history_dict['loss']
val_loss_values = history_dict['val_loss']
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)
【问题讨论】:
-
标准化标签很奇怪(除非这些是连续的目标)。这样做有什么特别的原因吗?
标签: python machine-learning neural-network anaconda spyder