Я новичок в машинном обучении. Я пытаюсь предсказать два числовых столбца из набора данных. Столбцы, которые я должен предсказать, это количество и количество дней.
Сумма, количество дней - это функции, а все остальные столбцы - метки.
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.
Предварительные шаги обработки, которые я сделал, это одно горячее кодирование и минимальный максимальный скаляр.
Я попытался добавить больше слоев, больше нейронов, изменяющееся количество эпох и слой активации к сигмовидной и неплотной реакции.
Код:
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)
Функциональный код API Keras
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)
Прогнозируемые два столбца никак не соответствуют фактическим столбцам теста, и полученное значение RMSE составляет 40860. Так что я не знаю, как двигаться дальше, чтобы получить более точный прогноз. где я должен внести изменения, чтобы предсказать несколько столбцов?