# Intrusion-Detection **Repository Path**: xiaxiaxia110/Intrusion-Detection ## Basic Information - **Project Name**: Intrusion-Detection - **Description**: Spring 2019 Secure Architecture and Management- Intrusion detection based on Bayesian Network + PCA (and some other machine learning methods)(应付作业... - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2021-12-17 - **Last Updated**: 2021-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Intrusion Detection 基于贝叶斯网络 + PCA 的入侵检测算法。   ## Environment Python 3.6.7   ## Requirments - [scikit-learn](https://github.com/scikit-learn/scikit-learn):各种 Baseline 分类器 - [pandas](https://github.com/pandas-dev/pandas):读取数据 - [scipy](https://github.com/scipy/scipy):用于条件独立性检验 - [matplotlib](https://github.com/matplotlib/matplotlib):画贝叶斯网络结构图 - [networkx](https://github.com/networkx/networkx):画贝叶斯网络结构图 - [numpy](github.com/numpy/numpy)   ## Dataset [KDD Cup 1999 Data](http://kdd.ics.uci.edu/databases/kddcup99/kddcup99.html):使用了 10% 的数据([kddcup.data_10_percent.gz](http://kdd.ics.uci.edu/databases/kddcup99/kddcup.data_10_percent.gz)),约 49 万条,42 个指标,最后一列为类别标签。   ## Structure ``` ├── Config.py # 参数配置(数据集路径、分类数量、分类器参数、特征标签) ├── Feature.py # 数据预处理 ├── Baseline.py # 使用 Baseline 进行入侵检测 ├── Bayesnet.py # 贝叶斯网络对象 ├── MLE.py # 极大似然估计(贝叶斯网络参数学习) ├── PC.py # PC 算法(贝叶斯网络结构学习) └── IDS_BN.py # 使用贝叶斯网络进行入侵检测 ```   ## Usage ### Prepare ```python pip install -r requirements.txt ```   ### Config 在 `Config.py` 中配置参数。 关于 `if_multi` 参数: - `if_multi = Flase`: 二分类:normal、attack(所有攻击类型) - `if_multi = True`: 五分类:normal、dos、u2r、r2l、probe([攻击类型](http://kdd.ics.uci.edu/databases/kddcup99/training_attack_types))   ### Get Data ```python from Feature import get_data ''' 输出: 训练数据、测试数据和对应的标签 ''' x_train, x_test, y_train, y_test = get_data() ```   ### Bayesian Network #### BayesNet 一个贝叶斯网络对象。 - `F`: - `key`:某节点 - `values`: - `children`:儿子节点列表 - `parents`:父节点列表 - `values`:`key` 的所有样本的所有可能取值 - `cpt`:条件概率表 - `V`:节点列表 - `E`: - `key`:某节点 - `values`:儿子节点列表 注:若 A --> B,则 B 为 A 的父节点   #### PC 使用 PC 算法进行贝叶斯网络结构学习。 ```python from PC import pc ''' 输入: data(DataFrame): 数据 输出: 一个 BayesNet,只有结构没有参数 ''' bn = pc(data) ```   #### MLE 使用极大似然估计进行贝叶斯网络参数学习。 ```python from MLE import mle ''' 输入: bn: 一个 BayesNet data(numpy.array): 数据 无输出,bn 中将生成条件概率表 ''' mle(bn, data) ```   #### Read BN 从 `.bn` 文件中读取贝叶斯网络。 ```python from Bayesnet import read_bn ''' 输入: path: 要读取的文件路径 输入: 一个 BayesNet ''' read_bn(path) ```   #### Write BN ```python ''' 输入: path: 存储路径 ''' bn.write_bn(path) ```   #### Plot BN 画出贝叶斯网络结构图。 ```python ''' 输入: labels: 节点标签(可选,如果不输入则直接用节点编号当标签) ''' bn.plot(labels) ```   ### Baseline 参考 `Baseline.py`。