完成理论摸底后,我立刻使用 CIC-IDS2017 数据集进行了一次端到端实战。这篇文章主要记录这次“理论 + 实践”闭环学习过程中的收获与踩坑经历。以下是本次实验的具体内容,源码链接

实验概述

1. 实验基本信息

项目内容实验信息
实验名称基于正则化逻辑回归的异常流量检测与特征工程实践
实验时间2026年5月13日
实验人员
指导教师
实验环境Windows / Python 3.x
开发工具Jupyter Notebook
主要库pandas, numpy, matplotlib, seaborn, scikit-learn

2. 实验背景与目的

2.1 实验背景

随着网络攻击类型不断增加,传统基于规则的检测方法难以有效识别未知攻击行为。特别是在黑客攻击手法不断演进的情况下,网络流量数据具有高维度、类别极度不平衡等特点。异常流量检测通过分析网络流(Flow)特征,利用机器学习(如带有正则化惩罚的逻辑回归模型)构建决策边界,是现代网络安全防御的核心技术。

2.2 实验目的

  1. 熟悉机器学习处理网络安全数据的完整流程;

  2. 掌握真实数据集中异常值(NaN、Infinity)的处理策略;

  3. 深入探究类别不平衡(Class Imbalance)对分类指标(Precision与Recall)的跷跷板效应;

  4. 验证特征选择的休斯现象(Hughes Phenomenon),对比单变量过滤(SelectKBest)与模型内置L2正则化在特征去噪中的实际表现。

实验过程

1. 数据集介绍

1.1 数据集来源

  • 数据集名称: CIC-IDS-2017 (Tuesday-WorkingHours.pcap_ISCX.csv)

  • 来源链接: 加拿大新不伦瑞克大学 (UNB) CIC 数据集官网

1.2 数据集描述

属性内容
初始样本数量445,909 条
初始特征数量79 列(含标签)
标签类别二分类(BENIGN / 其他攻击)
数据格式CSV

1.3 标签分布

在划分后的测试集中(共计 89,129 条数据),标签分布如下:

类别数量占比
Normal (0)86,36396.9%
Attack (1)2,7663.1%

问题分析:

  1. 存在极端的类别不平衡: 正常流量占绝大多数,直接训练会导致模型“倾向于预测正常”,引发严重的漏报(召回率低下)。

  2. 存在异常值: 网络包特征计算中存在除零引发的 Infinity 和计算缺失导致的 NaN

2. 数据预处理

2.1 数据清洗

  • 无效数据统一化: 使用 data.replace([np.inf, -np.inf], np.nan, inplace=True) 将无穷大统一转换为 NaN。

  • 缺失值处理策略: 经计算,缺失率约为 0.118% (< 1%)。根据数据处理原则(少量缺失直接删,中等缺失用中位数填充),采取直接删除策略:data.dropna(inplace=True)

2.2 特征工程

  • (1)标签编码: 将字符串标签二值化。BENIGN 映射为 0,其他攻击映射为 1。

  • (2)人工特征剔除: 删除了与模型泛化无关的标识型变量,如 'Flow ID', 'Source IP', 'Source Port', 'Destination IP', 'Timestamp'。保留了 'Destination Port' 以捕捉特定服务攻击。

  • (3)方差过滤: 采用 VarianceThreshold(threshold=0) 删除了几乎不变化的零方差列。

  • (4)特征缩放: 采用 StandardScaler 进行标准化。消除网络流量中极大值(如包长度)与极小值(如标志位)的量纲差异,避免梯度下降出现发散。

    • 公式: z = x − μ σ z = \frac{x-\mu}{\sigma} z=σxμ

2.3 数据集划分

数据集样本数比例
训练集 (Train)356,51680%
测试集 (Test)89,12920%

说明: 使用 train_test_split,设置 random_state=42,并开启 stratify=y(分层抽样),确保训练集和测试集中攻击流量的比例(3.1%)保持一致。

3. 模型构建

3.1 模型选择原因

  • 选择模型: 逻辑回归 (Logistic Regression)

  • 原因: 作为基础线性模型,训练速度快;具有极强的可解释性(可通过权重查看特征贡献);且 Scikit-learn 的实现内置了 L2 正则化,能够有效限制过拟合问题。

3.2 模型参数设置

参数数值设定原因说明
penalty‘l2’采用L2正则化,自动压制冗余特征的权重
class_weight‘balanced’针对3.1%的攻击样本施加巨额代价惩罚,防止模型漏报
max_iter1000增加权重惩罚后代价函数平面变复杂,提升迭代上限以确保梯度下降收敛

4. 实验结果与分析

4.1 评价指标公式

  • Accuracy(准确率): A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy=\frac{TP+TN}{TP+TN+FP+FN} Accuracy=TP+TN+FP+FNTP+TN

  • Precision(精确率): P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP (衡量假警报/误报)

  • Recall(召回率): R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP (衡量漏网之鱼/漏报,安全领域最核心指标)

4.2 实验结果(基于两种特征选择方案的对比)

本实验在代码实践中,针对特征选择方法进行了深度对比验证。

方案A(基于 SelectKBest 单变量过滤,保留15个特征):

  • SelectKBest原理:利用单变量统计检验独立评估每个特征与目标变量的相关性。

  • 结果: Accuracy: 0.93 | Precision: 0.30 | Recall: 1.00 | F1-score: 0.46

方案B(跳过 SelectKBest,投入全量50+特征,依赖L2正则化):

  • 结果: Accuracy: 0.98 | Precision: 0.61 | Recall: 1.00 | F1-score: 0.76

4.3 结果深度与混淆矩阵分析

方案A(SelectKBest)的混淆矩阵如下

Predicted Normal (0)Predicted Attack (1)
Actual Normal (0)79,763 (TN)6,600 (FP)
Actual Attack (1)3 (FN)2,763 (TP)
方案B(跳过SelectKBest)的混淆矩阵如下
Predicted Normal (0)Predicted Attack (1)
Actual Normal (0)84,620 (TN)1,743 (FP)
Actual Attack (1)4 (FN)2,762 (TP)

深度分析:

  1. 跷跷板效应验证: 加入 class_weight='balanced' 后,模型对攻击表现出极高的敏感度,漏报(FN)仅为3,召回率达100%。但代价是误报(FP)高达6600次,Precision暴跌至0.30。

  2. 特征交互陷阱(方案A vs 方案B的本质差异): 方案A(SelectKBest)表现极差,而方案B表现优异。这证明了 SelectKBest 作为“单变量过滤法”,虽然计算快,但忽略了特征间的组合效应,选出了大量高相关性的冗余特征,丢失了关键特征;而方案B全量投入后,逻辑回归的 L2 正则化机制发挥了强大的“多变量嵌入”去噪功能,自动压低了冗余特征的权重,找出了真正的核心组合,使得假警报大幅减少,Precision 从 0.30 飙升至 0.61。

5. 实验中遇到的问题及解决方案

  • 问题1:模型报 ConvergenceWarning(未收敛警告)

    • 问题描述: 引入 class_weight='balanced' 后,默认参数下梯度下降无法在100步内达到全局最优解。

    • 解决方法: 一方面确保数据已通过 StandardScaler 正确缩放(消除峡谷效应),另一方面将模型的 max_iter 从默认的100提升至1000。

  • 问题2:特征数量减少导致指标断崖式下跌

    • 问题描述: 尝试将提取的特征数量从5个减少到3个时,模型准确率和召回率骤降。

    • 解决方法: 这印证了机器学习中的休斯现象(Hughes Phenomenon)。特征过少会导致信息断层(欠拟合)。解决方案是利用正则化机制代替粗暴的人工筛选,让模型通过权重分配自动完成高维空间的特征选择。

6. 实验总结

本次实验完成了从数据预处理、特征工程、模型训练到多维度结果评估的完整流程。通过实际敲击代码,我不仅掌握了 Pandas 和 Scikit-learn 的工程应用,更深刻理解了课本上的理论概念:

  1. 认识到在安全领域,不可盲目迷信Accuracy,必须借助混淆矩阵权衡Precision与Recall的博弈;

  2. 深刻领悟了正则化(Regularization)不只是解决过拟合的数学公式,更是自动去噪、进行特征多维博弈的强大工程利器;

  3. 验证了处理极度不平衡数据的阶级权重惩罚策略的有效性。

7. 后续优化方向

  • 算法升级以降低误报: 逻辑回归只能构建线性决策边界,后续可尝试随机森林(Random Forest)或 XGBoost,利用树模型的非线性能力在保持高召回的同时进一步提升精确率。

  • 应对概念漂移(Concept Drift): 现实黑客攻击特征会随时间推移(如引入随机端口或延迟)而变化,静态模型将失效。未来研究方向需引入在线学习(Online/Incremental Learning)机制,使决策边界随数据流动态更新。

更多推荐