网络入侵检测 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)