Проблема недостаточного соответствия в двоичной классификации с использованием многослойного персептрона - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время я разрабатываю контролируемое обнаружение аномалий с использованием многослойного персептрона (MLP), цель которого - разделить доброкачественный и вредоносный трафик. Я использовал набор данных CTU-13 , образец набора данных выглядит следующим образом: Образец набора данных . Набор данных содержит 169032 доброкачественных и 143828 вредоносных трафика. Код для моей модели MLP выглядит следующим образом:

def MLP_model():
model = Sequential()
model.add(Dense(1024,input_dim=15, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256,activation='relu'))
model.add(Dense(256,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(128,activation='relu'))
model.add(Dense(128,activation='relu'))
model.add(Dense(1, activation='sigmoid'))

adam = optimizers.Adam(lr=0.0001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)

model.compile(optimizer = adam, loss='binary_crossentropy', metrics=['accuracy'])
return model    

model = MLP_model()

#With Callbacks
callbacks = [EarlyStopping('val_loss', patience=5)]
hist = model.fit(Xtrain, Ytrain, epochs=50, batch_size=50, validation_split=0.20, callbacks=callbacks, verbose=1)

Результаты, которые я получил, следующие:

Accuracy: 0.923045
Precision: 0.999158
Recall: 0.833308
F1 score: 0.908728

Однако, судя по кривой обучения, я подозреваю, что модель недостаточное оснащение (на основе этой статьи ): Кривая обучения модели

Я попытался увеличить количество нейронов и количество слоев (как предлагается здесь ), но проблема все равно возникает. Буду признателен за любую помощь в решении этой проблемы.

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Прежде всего, я почти уверен, что ваша модель действительно переоснащена, а не неполноценна. Постройте только потери в обучении, и вы должны увидеть, что потери упадут до нуля. Но, как вы можете видеть на графике, потери при проверке все еще довольно высоки по сравнению с потерями в обучении. Это происходит из-за того, что ваша модель имеет слишком много параметров по сравнению с количеством точек данных в вашем наборе обучающих данных.

0 голосов
/ 19 июня 2020

Попробуйте уменьшить отсев до диапазона от 0,1 до 0,3, это должно помочь этой c кривой с ошибками. Кроме того, тренируйтесь для еще нескольких эпох, эта гладкая кривая обычно возникает, когда вы тренируетесь для большего количества эпох.

...