# 邮件分类(贝叶斯+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曲线上来看,除了贝叶斯之外,其他模型的效果均不如之前的已知样 本的结果。这是因为未知样本即测试集与训练集的连续型特征的分布不一样。如果所有的特征均为离散 型特征,那么受到的影响不大,但对于本实验中存在的连续型特征来说,它需要经过标准化和归一化的处理,当测试集和训练集来自不同的数据时,会对测试结果造成一定的影响。
MarcoPage
- 粉丝: 4422
- 资源: 8835
最新资源
- 永磁同步电机pmsm无感foc驱动代码,启动为高频注入,平滑切入观测器高速控制,代码全部手写开源,可以移植到各类mcu上 附赠高频注入仿真模型
- 多模态大语言模型领域进展分享.pptx
- 多模态知识图谱构建.pptx
- 多模态大模型开放世界理解.pptx
- JAVA-图书管理系统-SSM框架.zip
- 腾讯游戏知几语音合成大模型推理实践.pptx
- 专利大模型的实践与问答探索.pptx
- ⾯向⽣成式AI的向量数据库架构,性能与未来趋势.pptx
- 双向逆变器充电器原理图资料,TMS320F28377芯片的 6.6KW, OBC ,学习资料; 本产品为学习资料(含原理图和应用说明,具体见截图),附赠如下1.2.3.4资料: 1、送OBC设计中
- 汽车密封条EPDM硬骨架裁断收料生产线(sw18可编辑+工程图+bom)全套技术资料100%好用.zip
- 提供一种关于国产单片机GD32f107的多网口配置国产替代方案,可提供原理图设计和pcb参考设计
- 基于C++的重庆大学优秀毕业设计项目案例分享:ATM模拟程序与人员信息系统
- 新能源汽车车载双向OBC,PFC,LLC,V2G 双向 充电桩 电动汽车 车载充电机 充放电机 MATLAB仿真模型 (1)基于V2G技术的双向AC DC、DC DC充放电机MATLAB仿真模型
- 驾校管理系统 JAVA毕业设计 源码+数据库+论文+启动教程(SpringBoot+Vue.JS).zip
- 永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S- 永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S-function模式仿真,与实际项目运行基本一致,可以直接复制代码移植到工程实
- 一种永磁同步电机无位置观测算法,采用的电流模型与pll,适用于表贴电机和内插电机,可实现带载闭环启动,全速度范围采用一个观测器,并且可以生成代码,已跑实际电机进行了验证,所有模块纯手工搭建,绝不是从其
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈