我目前正在使用多层感知器 (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
但是,从训练曲线来看,我怀疑模型是欠拟合的(根据这篇文章): 模型的训练曲线
我试图增加神经元和层数(如此处所建议),但同样的问题仍然存在。我感谢任何帮助解决这个问题。