网络入侵检测 AI:基于流量特征的异常行为识别

FreeGuideOnline 最新 2026-06-23

python import pandas as pd df = pd.read_csv('CIC-IDS2017.csv')

查看标签分布

print(df['Label'].value_counts())

对缺失值和无穷值处理,并进行归一化。

### 步骤2:无监督模型训练(Autoencoder为例)
假设只有正常流量用于训练,构建一个欠完备自编码器,学习正常流量的低维重建。
```python
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model

input_dim = df_normal.shape[1]
encoding_dim = 8  # 瓶颈维度

input_layer = Input(shape=(input_dim,))
encoder = Dense(32, activation='relu')(input_layer)
encoder = Dense(encoding_dim, activation='relu')(encoder)
decoder = Dense(32, activation='relu')(encoder)
decoder = Dense(input_dim, activation='linear')(decoder)

autoencoder = Model(inputs=input_layer, outputs=decoder)
autoencoder.compile(optimizer='adam', loss='mse')
autoencoder.fit(df_normal, df_normal, epochs=50, batch_size=256, validation_split=0.1)

用重建误差作为异常分数,误差越大越可能异常。

步骤3:阈值设定与评估

在部分验证集(包含攻击样本)上确定最佳阈值,常用方法为基于百分位数(如99分位)或F1分数最大化。

reconstructions = autoencoder.predict(df_val)
mse = np.mean(np.square(df_val - reconstructions), axis=1)
threshold = np.percentile(mse, 99)  # 假设正常样本99%都在此误差内
predictions = (mse > threshold).astype(int)