# 邮件分类(贝叶斯+SVM)
## classify.py
### Prerequisites
---
- Python3
- pandas
- pyecharts>=1.0.0
- snapshot_selenium
- skleran
### Getting Start
---
```python classify.py```
一共三种分类方法:KNN、高斯贝叶斯和BP神经网络,后来也加上了决策树
三种方法一同进行并输出分类结果
### Result
---
分别展示二分类和五分类下的结果与分析。其中交叉验证法的折数均设为5。
因为个人电脑的原因,一共只抽取原数据集的20%约8w条数据包作为训练集和测试集,其中测试集 占20%。
#### 二分类
**交叉验证法**
**KNN参数设定**
在这里我一共选取了K等于3、5、7、9、11、13、15这几种情况,分别测试他们的平均准确率,如下 图所示:
<img src="img.asserts/1593583426178.png" alt="1593583426178" style="zoom:67%;" />
整体效果是不错的,其中K=3和K=5时平均准确率最高,最终选择**K=3**作为二分类下的KNN算法的K值。
**决策树参数设定**
首先是```max_depth```,范围为10到30,各值设定下的正确率如下所示:
<img src="img.asserts/1593582724875.png" alt="1593582724875" style="zoom:67%;" />
可以看到等于26和30的时候最高,这里取值为**26**,在此设定下,在对测试范围为2到20的进行正确率的检测,如下:
<img src="img.asserts/1593582778823.png" alt="1593582778823" style="zoom:67%;" />
最终min_samples_split设定为 **2**。
**性能评价**
首先先看各模型下的混淆矩阵:
<img src="img.asserts/1593582820570.png" alt="1593582820570" style="zoom:67%;" />
下面是各模型的准确率、精确率、召回率和F1-Score(这里我将结果都扩大了100倍):
<img src="img.asserts/1593582840738.png" alt="1593582840738" style="zoom:67%;" />
最后是ROC曲线和P_R曲线:
| **ROC** | **P_R** |
| ---------------------------- | ---------------------------- |
| ![img](img.asserts/wps8.png) | ![img](img.asserts/wps9.png) |
ROC曲线中,每一个模型的AUC面积保留两位小数点后均为1,包括P_R曲线中也不好看出模型之间的区别,而由混淆矩阵的结果也不难看出,这几个模型的分类结果均较好,并且正确率等指标也在94% 之上,但总的来说其中KNN表现得最好。当然这四个模型都存在着将正常数据包和异常数据包识别成对方的情况。
#### **五分类**
**交叉验证法**
**KNN参数设定**
测试的K值和折数的设定与二分类一致。每个K值对应的平均准确率如下:
<img src="img.asserts/1593582921181.png" alt="1593582921181" style="zoom:67%;" />
根据该结果,五分类下的KNN算法的K值同样设定为**3**。
**决策树参数设定**
首先是```max_depth```参数,取值范围10到30,正确率如下:
<img src="img.asserts/1593582998870.png" alt="1593582998870" style="zoom:67%;" />
在参数到27的时候,正确率基本就保持在99.84,因此```max_depth```设定为**27**。在此基础上再对```min_sampls_split```进行测试,范围是2到20,正确率如下:
<img src="img.asserts/1593583049920.png" alt="1593583049920" style="zoom:67%;" />
随着该参数的增大,正确率呈下降趋势,因此该参数最终设定为**2**。
**性能评价**
混淆矩阵的对比如下:
<img src="img.asserts/1593583078908.png" alt="1593583078908" style="zoom:67%;" />
各模型的准确率、精确率、召回率和F1-Score比较如下:
<img src="img.asserts/1593583089001.png" alt="1593583089001" style="zoom:67%;" />
ROC曲线和P_R曲线的对比如下:
| **ROC** | **P_R** |
| ----------------------------- | ----------------------------- |
| ![img](img.asserts/wps18.png) | ![img](img.asserts/wps19.png) |
将类别扩展到五类后各模型的分类效果就明显出来了,根据ROC曲线,虽然四个模型的曲线存在着 交叉的情况,但就AUC面积来说,贝叶斯的面积是最小的,而KNN和决策树的面积是最大的。从P_R曲线 来看,与对角线的交点中,神经网络的交点最低,而KNN的交点最高。而就混淆矩阵和正确率等性能来 看,贝叶斯的效果依旧是最不好的,除此之外,虽然KNN、神经网络、决策树的正确率等性能差不太多,但是他们的混淆矩阵却反映了一个很大的问题。
相对来说,KNN和决策树的分类更具有泛化性,可以发现,神将网络虽然正确率、精确率等性能值 较高,但是它的值却大多是由DOS攻击的识别率提上来的,因为DOS攻击的数据包占比较大,而除DOS 攻击外,其他攻击及正常数据包,识别率却很低,从某种角度上来说,这基本上就成了一个二分类器。经查阅资料认为这是样本带来的影响。神经网络是根据不断输入的样本,按照一定的学习规则去调整矩 阵权值的过程,但是,可以发现,本次实验中送入的样本分布是不平衡的,DOS攻击的异常数据包最多,而其他攻击的数据包非常少,特别是U2R,因为随机分配训练集和数据集的缘故,导致它都被分成了训练集。在这种样本极度不平衡的情况下,会严重导致训练阶段的收敛,进而导致测试的泛化性降低。当然,样本的不平衡性也对其他几个模型产生了一定的影响,在这里面高斯贝叶斯在少数类(probe、R2L)的判断上会更为成功一些,但它整体呈现上的效果却更差。综合来看,KNN的效果是最好的。
而在此前二分类中,所有的异常数据包都合成了一个类别,没再细分下去,所以相对五分类来说, 样本的不平衡性没有那么得明显,四个模型基本上表现得结果也比五分类要好得多。
#### 未知样本(五分类)
在以上都是将一个完整的数据集拆分成80%的训练集和20%的测试集,下面我将对一个未知的样本也用这四个模型进行分类。该测试集取自KddCup99网站上的corrected数据包,总共是31万条,这里我只取其中4%。在这个实验中,此前的数据集将完全作为训练集使用。类别一共是五类,最终结果如下:
混淆矩阵:
<img src="img.asserts/1593583174284.png" alt="1593583174284" style="zoom:67%;" />
各模型的准确率、精确率、召回率和F1-Score:
<img src="img.asserts/1593583183495.png" alt="1593583183495" style="zoom:67%;" />
ROC及P_R曲线:
| ROC | P_R |
| ----------------------------- | ----------------------------- |
| ![img](img.asserts/wps22.png) | ![img](img.asserts/wps23.png) |
无论是混淆矩阵还是ROC、P_R曲线上来看,除了贝叶斯之外,其他模型的效果均不如之前的已知样 本的结果。这是因为未知样本即测试集与训练集的连续型特征的分布不一样。如果所有的特征均为离散 型特征,那么受到的影响不大,但对于本实验中存在的连续型特征来说,它需要经过标准化和归一化的处理,当测试集和训练集来自不同的数据时,会对测试结果造成一定的影响。
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【作品名称】:基于 python使用贝叶斯、神经网络、KNN进行入侵检测(KDD-CUP99) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: Prerequisites Python3 pandas pyecharts>=1.0.0 snapshot_selenium skleran Getting Start python classify.py 一共三种分类方法:KNN、高斯贝叶斯和BP神经网络,后来也加上了决策树 三种方法一同进行并输出分类结果 Result 分别展示二分类和五分类下的结果与分析。其中交叉验证法的折数均设为5。 因为个人电脑的原因,一共只抽取原数据集的20%约8w条数据包作为训练集和测试集,其中测试集 占20%。
资源推荐
资源详情
资源评论
收起资源包目录
KDDCUP99-Detection.zip (51个子文件)
KDDCUP99-Detection
data
kddcup.data_10_percent_corrected_save_8w.csv 32.88MB
classify_knn.py 4KB
dataset.py 3KB
BP.py 2KB
tree.py 2KB
model
5_bayes_8w.pkl 10KB
5_bp_8w.pth 24KB
2_bayes_8w.pkl 4KB
2_tree_8w.pkl 12KB
5_tree_8w.pkl 21KB
2_bp_8w.pth 24KB
__pycache__
classify_knn.cpython-37.pyc 3KB
tree.cpython-37.pyc 2KB
bayes.cpython-37.pyc 2KB
BP.cpython-37.pyc 2KB
bayes.py 2KB
img.asserts
1593582998870.png 79KB
1593583078908.png 65KB
1593583174284.png 68KB
1593582724875.png 80KB
1593583089001.png 38KB
1593583426178.png 37KB
1593582840738.png 38KB
1593583049920.png 70KB
1593582778823.png 74KB
1593582820570.png 38KB
1593582921181.png 43KB
1593583183495.png 38KB
README.md 7KB
classify.py 12KB
result
2020-05-01_11-24-07P_R.png 75KB
2020-05-01_11-24-07性能评价.html 5KB
各分类正确率_4w.html 5KB
Loss.png 20KB
2020-05-01_10-58-00混淆矩阵.png 44KB
各分类正确率.html 5KB
二分类正确率.PNG 29KB
2020-05-01_11-24-07ROC.png 74KB
2020-05-01_11-17-05P_R.png 59KB
min_samples_split.html 7KB
2020-05-01_11-24-07混淆矩阵.png 76KB
echarts.min.js 373KB
正确率.html 5KB
max_depth.html 7KB
2020-05-01_11-17-05ROC.png 56KB
2020-05-01_10-58-00P_R.png 39KB
2020-05-01_10-58-00性能评价.html 5KB
2020-05-01_10-58-00ROC.png 49KB
2020-05-01_11-17-05性能评价.html 5KB
正确率_5分类.html 5KB
2020-05-01_11-17-05混淆矩阵.png 65KB
共 51 条
- 1
资源评论
MarcoPage
- 粉丝: 4303
- 资源: 8839
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功