针对KDD数据集采用onehot编码进行特征值转换,存在冗余特征的问题,本文提出采用粒子群算法结合决策树实现特征选择以及检测分类。
1、数据准备
采用KDD20%(就是KDD数据中取了20%出来形成的数据集),其中训练集为25192x41,即每个样本含有41个特征值,其中部分特征为字符型特征,如下图所示,因此首先需要进行数据的预处理。
文章图片
2、数据预处理
KDD数据作为常用的网络入侵检测数据集,原始数据集共41个特征值,包括部分字符型特征,通常我们会常用onehot编码的方法将这些字符型特征转为onehot数值型特征,举个列就是:特征1包含【A B C】三种字符型特征值,采用one-hot处理就删掉特征1,然后新增3个特征,原来含A的就变成了1 0 0 含B的变成了0 1 0 含C的变成了0 0 1 ,如下图所示:
文章图片
经过上述处理之后,每个样本由原来的41个特征变为118个特征,但是因为维度过高,存在部分冗余特征,因此直接采用这样的特征进行分类,精度不会太高,因此本文采用粒子群算法实现特征筛选,目的是找到一组特征子集使得分类器的分类精度最高。
3、PSO最优特征子集筛选
我们知道,如果原始特征中冗余特征,则会增加分类模型的建模复杂度,且会影响分类精度,因此我采用PSO进行特征子集的筛选,简单来说就是从原来的118个特征中,利用PSO筛选出部分特征,用于分类器(我采用的是决策树分类器)的建模,筛选出一组特征子集使得分类器的分类准确率最高,这个筛选出的特征子集叫做最优特征子集。
结果如下:如果直接用全部118个特征作为输入,即直接采用决策树进行分类,分类精度只有74%,采用PSO筛选出其中的67个特征,即PSO-决策树分类,分类精度有83%,精度提高了9个百分点。
文章图片
最后,再做一个对比算法,采用遗传算法进行特征选择,因为遗传算法是最老的优化算法之一,效果没有PSO好。
文章图片
【机器学习|基于特征选择(PSO+CTree)的网络入侵检测】部分文件已上传到github仓库:https://github.com/fish-kong/Network-intrusion-detection-based-on-feature-selection-PSO-CTree-
推荐阅读
- paddle|动手从头实现LSTM
- 人工智能|干货!人体姿态估计与运动预测
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- 分析COMP122 The Caesar Cipher
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- 读书笔记|《白话大数据和机器学习》学习笔记1
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例