共计 2149 个字符,预计需要花费 6 分钟才能阅读完成。
背景介绍
CICIDS2017 是加拿大网络安全研究所发布的网络入侵检测数据集,包含正常流量和多种攻击类型(如 DDoS、Brute Force、XSS 等)。它的价值在于:

- 基于真实网络环境采集,包含完整的网络流量特征(如数据包大小、协议类型、流量时序等)
- 时间跨度长达 5 天,包含标记的攻击时间段
- 被学术界广泛用于验证入侵检测算法
核心挑战
处理这个数据集时你会遇到几个典型难题:
- 类别极度不平衡 :正常流量占比超过 80%,某些攻击类型样本不足 1%
- 高维特征空间 :78 个原始特征,部分特征相关性低但噪声大
- 流量时序特性 :传统机器学习方法难以捕捉连续数据包间的关联
数据处理流程
数据清洗
首先加载数据集并处理脏数据:
import pandas as pd
# 加载数据
data = pd.read_csv('CICIDS2017.csv')
# 处理缺失值
print(f'缺失值占比: {data.isnull().mean().max():.2%}')
data = data.dropna() # 本例中直接删除缺失值
# 处理无穷大值
import numpy as np
data.replace([np.inf, -np.inf], np.nan, inplace=True)
data = data.dropna()
特征工程
选择判别力强的特征(示例选取 10 个关键特征):
selected_features = [
'Flow Duration',
'Total Fwd Packets',
'Total Backward Packets',
'Fwd Packet Length Mean',
'Bwd Packet Length Mean',
'Flow Bytes/s',
'Flow Packets/s',
'Flow IAT Mean',
'Fwd IAT Total',
'Bwd IAT Total'
]
X = data[selected_features]
y = data['Label']
数据标准化
网络流量特征的量纲差异极大,必须标准化:
from sklearn.preprocessing import RobustScaler # 抗离群点
scaler = RobustScaler()
X_scaled = scaler.fit_transform(X)
模型构建
使用 PyTorch 实现带类别权重的 LSTM 模型:
import torch
import torch.nn as nn
class LSTMModel(nn.Module):
def __init__(self, input_size, hidden_size, num_classes):
super().__init__()
self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True)
self.fc = nn.Linear(hidden_size, num_classes)
def forward(self, x):
# x 形状: (batch_size, seq_len, input_size)
lstm_out, _ = self.lstm(x)
# 只取最后一个时间步
out = self.fc(lstm_out[:, -1, :])
return out
# 计算类别权重(解决不平衡问题)from sklearn.utils.class_weight import compute_class_weight
class_weights = compute_class_weight('balanced', classes=np.unique(y), y=y)
class_weights = torch.FloatTensor(class_weights)
# 初始化模型
model = LSTMModel(input_size=10, hidden_size=64, num_classes=len(np.unique(y)))
# 定义加权交叉熵损失
criterion = nn.CrossEntropyLoss(weight=class_weights)
评估与优化
评估指标
不要使用准确率!推荐组合指标:
from sklearn.metrics import classification_report
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred, target_names=class_names))
- F1-score:精确率和召回率的调和平均,特别适合不平衡数据
- ROC-AUC:综合考量模型在不同阈值下的表现
优化方向
- 使用 SMOTE 等过采样技术处理少数类
- 尝试 Attention 机制增强时序建模
- 用 Optuna 进行超参数优化
避坑指南
- 错误:直接使用原始数据训练
- 现象:模型始终预测多数类
-
解决:必须进行类别平衡处理
-
错误:忽略特征相关性
- 现象:模型收敛但效果差
-
解决:先做特征选择(如互信息法)
-
错误:错误划分时序数据
- 现象:数据泄漏导致虚高指标
- 解决:按时间顺序划分训练 / 测试集
进阶建议
- 特征选择:尝试 mRMR(最大相关最小冗余)算法
- 模型集成:将 LSTM 与随机森林结合
- 在线学习:适应网络流量的动态变化
思考题
- 如何设计实验验证模型对未知攻击类型的检测能力?
- 当遇到加密流量时,哪些特征会失效?如何调整方案?
- 对比传统机器学习方法,深度学习的优势在哪些攻击类型上最明显?
正文完
发表至: 未分类
近三天内
