完成理论摸底后,我立刻使用 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,363 96.9%
Attack (1) 2,766 3.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,516 80%
测试集 (Test) 89,129 20%

说明: 使用 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_iter 1000 增加权重惩罚后代价函数平面变复杂,提升迭代上限以确保梯度下降收敛

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)机制,使决策边界随数据流动态更新。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐