nadineshehabuni/Network-Intrusion-Detection-NSL-KDD
GitHub: nadineshehabuni/Network-Intrusion-Detection-NSL-KDD
该项目使用决策树和随机森林分类器在NSL-KDD数据集上构建网络入侵检测系统,并批判性地复现与评估了一篇学术论文的特征消除方法。
Stars: 0 | Forks: 0
# 🛡️ 基于机器学习的网络入侵检测





这是一个基于机器学习的**网络入侵检测系统 (NIDS)**,构建于 **NSL-KDD 数据集**之上,旨在复现并严格评估研究论文*“A Subset Feature Elimination Mechanism for Intrusion Detection System”* (Nkiama, Said, Saidu — 2016) 中提出的方法。
## 📖 项目概述
**网络入侵检测** 是指监控网络流量以识别可能危及系统机密性、完整性或可用性的恶意活动、未经授权的访问尝试和异常行为的过程。传统的基于签名的入侵检测系统 (IDS) 难以检测新型或不断演变的攻击模式,这促使了向基于**机器学习 (ML)**方法的转变。
ML 模型能够学习网络流量特征与攻击行为之间复杂的非线性关系,使其能够:
- 检测**已知**和**前所未见(类似于零日)**的攻击模式
- 在多样的流量条件下进行泛化
- 减少对手工编写检测规则的依赖
- 高效地扩展以处理高维网络数据
本项目实现并评估了基于 ML 的分类器,以区分**正常**和**恶意(攻击)**网络流量,同时批判性地评估了参考研究论文中提出的特征消除方法的可复现性和有效性。
## ✨ 功能
本项目实现了一个完整的端到端入侵检测 pipeline:
- 📥 数据加载(NSL-KDD 训练/测试集)
- 🔍 数据检查
- 🧩 缺失值分析
- 📊 探索性数据分析 (EDA)
- 📈 统计摘要
- 🔗 相关性分析
- 🚨 异常值分析
- ⚖️ 类别不平衡分析
- 🔢 标签编码
- 📏 特征缩放
- 🎯 特征选择
- 🤖 模型训练(决策树、随机森林)
- 🔁 交叉验证
- 📐 模型评估
- ❌ 误差分析
- 🧮 混淆矩阵
- 📉 ROC 曲线
- 📝 分类报告
## 🗂️ 数据集
### NSL-KDD 数据集
**NSL-KDD** 数据集是原始 **KDD Cup 1999** 数据集的改进和优化版本,被广泛用作评估入侵检测系统的基准。它解决了原始数据集的几个固有问题,例如冗余记录和有偏的类别分布。
**为什么选择 NSL-KDD:**
- ✅ 移除了 KDD'99 中存在的重复记录,防止分类器偏向于频繁出现的记录
- ✅ 在训练集和测试集中提供了合理数量的记录,使得实验在计算上是可行的
- ✅ 包含不同攻击类别的均衡表示:**DoS, Probe, R2L 和 U2R**
- ✅ 在学术文献中被广泛采用,能够与现有研究(包括参考论文)进行公平比较
- ✅ 包含 41 个定义明确的特征,涵盖网络连接的基于基础、基于内容和基于流量的属性
## 🔄 项目工作流
```
Research Paper
↓
GitHub Reference
↓
NSL-KDD Dataset
↓
Data Loading
↓
EDA
↓
Feature Engineering
↓
Model Training
↓
Evaluation
↓
Critical Evaluation
```
## 📁 仓库结构
```
Network-Intrusion-Detection-ML/
│
├── data/
│ ├── raw/ # Original NSL-KDD dataset files
│ └── processed/ # Cleaned & preprocessed data
│
├── notebooks/
│ └── Network_Intrusion_Detection.ipynb # Main analysis & modeling notebook
│
├── models/
│ └── saved_models/ # Serialized trained models (.pkl)
│
├── images/
│ └── plots/ # Exported charts (EDA, ROC, confusion matrix)
│
├── requirements.txt # Project dependencies
├── README.md # Project documentation
└── LICENSE # License information
```
## ⚙️ 安装
请按照以下步骤在本地设置项目。
**1. 克隆仓库**
```
git clone https://github.com/your-username/Network-Intrusion-Detection-ML.git
cd Network-Intrusion-Detection-ML
```
**2. 安装依赖**
```
pip install -r requirements.txt
```
**3. 启动 Jupyter Notebook**
```
jupyter notebook
```
然后打开 `notebooks/Network_Intrusion_Detection.ipynb` 探索完整的 pipeline。
## 📦 所需库
| 库 | 用途 |
|---|---|
| `pandas` | 数据处理与分析 |
| `numpy` | 数值计算 |
| `matplotlib` | 数据可视化 |
| `seaborn` | 统计数据可视化 |
| `scikit-learn` | 机器学习模型与评估 |
| `jupyter` | 交互式 Notebook 环境 |
一次性安装所有依赖:
```
pip install pandas numpy matplotlib seaborn scikit-learn jupyter
```
## 🤖 机器学习模型
### 🌳 决策树
**决策树**是一种监督学习算法,它根据特征值将数据拆分为多个分支,形成树状的决策结构。它具有高度的可解释性,并且能够有效捕捉非线性的决策边界,非常适合在结构化的网络流量数据中识别特定的攻击签名。
### 🌲 随机森林
**随机森林**是一种 ensemble 学习方法,它在训练期间构建多棵决策树,并聚合它们的预测(通过多数投票)以产生最终输出。这种方法减少了过拟合,提高了泛化能力,并且通常比单一的决策树产生更稳健的性能——这对于入侵检测任务中的高维特征空间尤为重要。
## 📊 实验结果
| 模型 | 准确率 (Accuracy) | 精确率 (Precision) | 召回率 (Recall) | F1 分数 (F1 Score) |
|---|---|---|---|---|
| **决策树** | 79.09% | 96.51% | 65.64% | 78.14% |
| **随机森林** | 77.52% | 96.66% | 62.67% | 76.04% |
## 🔑 主要发现
- 两个模型都取得了**高精确率 (>96%)**,表明误报率很低——将正常流量误分类为攻击的情况相对罕见。
- **召回率 (62–66%)** 相对较低,表明这两个模型都难以检测到所有实际的攻击实例,很可能会遗漏某些少数攻击类别(例如,R2L、U2R)。
- 在本次实验中,**决策树**在所有四个指标上均略优于**随机森林**,这与集成方法总是优于单一树的普遍假设相悖——这凸显了经验验证胜过理论预期的重要性。
- 精确率与召回率之间的差距表明,进一步的**特征工程**和**类别不平衡处理**(例如,SMOTE、类别加权)可以显著改善对代表性不足的攻击类型的检测。
- 结果证实了参考论文中特征消除方法的价值,同时也揭示了原始方法报告的性能难以完全复现的领域——这强调了批判性地、独立地评估已发表的 ML 研究的重要性。
## 🚀 未来改进
- 🧠 探索**深度学习**架构(例如,LSTM、CNN、Autoencoders)以实现具备序列感知能力的入侵检测
- ⚡ 集成 **XGBoost** 以提升性能并加快训练速度
- 🌐 将评估扩展到现代数据集,例如 **CICIDS2017**
- 🌐 将评估扩展到现代数据集,例如 **UNSW-NB15**
- 🎛️ 执行系统的**超参数调优** (GridSearchCV / Optuna) 以优化模型性能
- ⚖️ 应用先进的类别不平衡技术,以提高少数攻击类别的召回率
## 📚 参考文献
1. Nkiama, H., Said, S. M., & Saidu, M. (2016). *A Subset Feature Elimination Mechanism for Intrusion Detection System*. International Journal of Advanced Computer Science and Applications (IJACSA).
2. **NSL-KDD Dataset** — Canadian Institute for Cybersecurity, University of New Brunswick. Available at: [https://www.unb.ca/cic/datasets/nsl.html](https://www.unb.ca/cic/datasets/nsl.html)
## 👤 作者
**Your Name**
📧 Email: your.email@example.com
🔗 GitHub: [@your-username](https://github.com/your-username)
🔗 LinkedIn: [Your Name](https://linkedin.com/in/your-profile)
标签:Apex, NoSQL, Python, Scikit-learn, 无后门, 机器学习, 网络安全, 逆向工具, 隐私保护