如何使用keras预测两个数值列?

时间:2019-07-11 14:26:15

标签: python machine-learning keras regression prediction

我是机器学习的新手。我正在尝试从数据集中预测两个数值列。我必须预测的列是数量和天数。 数量,天数是要素,所有其他列都是标签。

ID  Category    Company Amount  No_of_days
x1  c1             A    338.07   5
x2  c2             B    46.21    35
x4  c1             C    1480     35
x1  c3             C    2018     48
x2  others         A    4344    -10

我尝试使用来自keras的神经网络拟合数据集 我已经完成的预处理步骤是一种热编码和最小最大标量。

我曾尝试为乙状结肠和漏水的relu添加更多的层,更多的神经元,改变时期数以及激活层。

代码:


model = Sequential()

# The Input Layer :
model.add(Dense(64, kernel_initializer='normal',input_dim = X_train.shape[1], activation='relu'))

# The Hidden Layers :
model.add(Dense(256, kernel_initializer='normal',activation='relu'))
model.add(Dense(256, kernel_initializer='normal',activation='relu'))
model.add(Dense(256, kernel_initializer='normal',activation='relu'))
model.add(Dense(64, kernel_initializer='normal',activation='relu'))

# The Output Layer :
model.add(Dense(2, kernel_initializer='normal',activation='linear'))

# Compile the network :
model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['mean_absolute_error'])

checkpoint_name = 'Weights-{epoch:03d}--{val_loss:.5f}.hdf5' 
checkpoint = ModelCheckpoint(checkpoint_name, monitor='val_loss', verbose = 1, save_best_only = True, mode ='auto')
callbacks_list = [checkpoint]

model.fit(X_train, y_train, epochs=50, batch_size=32,validation_split = 0.2, callbacks=callbacks_list)

Keras Functional API代码

from keras.models import Model
from keras.layers import Input

X_train, y_train = np.array(X_train), np.array(y_train)
visible = Input(shape=(X_train.shape[1],))
X = Dense(256, kernel_initializer='normal',activation='relu')(visible)
X = Dense(256, kernel_initializer='normal',activation='relu')(X)
X = Dense(256, kernel_initializer='normal',activation='relu')(X)
out1 = Dense(1, kernel_initializer='normal',activation='linear')(X)
out2 = Dense(1, kernel_initializer='normal',activation='linear')(X)
model = Model(inputs=visible, outputs=[out1, out2])
model.compile(loss='mean_absolute_error', optimizer='adam', metrics=['mean_absolute_error'])
model.fit(X_train,[y_train[:,0], y_train[:,1]] ,epochs=50, batch_size=32)

Predicted两列与实际测试列完全不匹配,RMSE得分为40860。所以我不知道如何继续进行更准确的预测。请帮助我哪里出了问题?我必须在哪里进行更改才能预测多列?

1 个答案:

答案 0 :(得分:0)

请勿尝试从一层输出此类变化的值。取而代之的是为每个图层创建一个图层,并为每个图层附加损失函数。查看此页面: https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models 您将需要功能性API。

编辑:我会尝试使用失重。您的模型很困惑,因为 损失值差别很大。每个输出在不同的位置 完全扩展。

虽然此答案使用了不同的损失函数,但想法是相同的:

Keras loss weights

model.compile(
    optimizer='adam',
    loss={
        'out1': 'mean_absolute_error', 
        'out2': 'mean_absolute_error'
    },
    loss_weights={'out1': 1., 'out2': 0.2}
)