机器学习实战-Scikit决策树分类算法

本文通过Python的Scikit-learn库使用决策树对Kdd99数据集进行分类处理,讨论了数据预处理、类别变量重编码、特征选取和交叉验证等步骤。实验表明,决策树模型在相同概率分布的数据集上表现良好,但在概率分布不同的测试集上,对某些类别分类效果不佳。建议关注输入数据格式、特征选取和防止过拟合。
摘要由CSDN通过智能技术生成

机器学习实战-决策树分类算法

鉴于目前Python最流行的机器学习库Scikit集成了很多成型的算法,本博客就使用其中的决策树对Kdd99数据集进行分类处理,完整代码位于Github(https://github.com/PENGZhaoqing/kdd99-scikit)

Kdd99数据集

KDD Cup是由SIGKDD赞助的数据挖掘分析的比赛,每年举行一次,Kdd99是1999年比赛的关于入侵检测的数据集,不过现在学术界已经抛弃了这个数据集,若要测试自己算法的有效性还是使用其他数据集吧,我们只为初窥两种分类算法

任务目的是检测网络连接,区分正常和非正常的连接。非正常的连接大概有四大类: DOS、R2L、 U2R和probing,每一类下还有若干小类别

  • 值得注意的是,训练集和测试集中的数据概率分布不同,测试集比训练集多出了14种攻击小类别,官方给的解释是:这能够很好的模拟真实情况,而且新的攻击类别一般为已知攻击类别的变形。因此算法模型需要能很好的抓住每种攻击类别的feature,数据集都能在官网上获得

1. 数据预处理

1.1 原始文件预处理

原始训练集和测试集的分类结果都是攻击的特定类,共有24+14=38种 ,而在这里,我们不考虑那么细的分类,只把所有的连接分到四个攻击的大类即可,因此我们根据官网提供的映射关系,将type属性降为5类,用数字0,1,2,3,4替换,分别代表四种攻击的大类和正常情况

  • 执行以下代码能将位于raw目录下的测试集和训练集预处理到data目录下
from io import open

category = {}
category["back."] = 2
category["buffer_overflow."] = 3
category["ftp_write."] = 4
category["guess_passwd."] = 4
category["imap."] = 4
category["ipsweep."] = 1
category["land."] = 2
category["loadmodule."] = 3
category["multihop."] = 4
category["neptune."] = 2
category["nmap."] = 1
category["perl."] = 3
category["phf."] = 4
category["pod."] = 2
category["portsweep."] = 1
category["rootkit."] = 3
category["satan."] = 1
category["smurf."] = 2
category["spy."] = 4
category["teardrop."] = 2
category["warezclient."] = 4
category["warezmaster."] = 4

category["apache2."] = 2
category["back."] = 2
category["buffer_overflow."] = 3
category["ftp_write."] = 4
category["guess_passwd."] = 4
category["httptunnel."] = 4
category["httptunnel."] = 3
category["imap."] = 4
category["ipsweep."] = 1
category["land."] = 2
category["loadmodule."] = 3
category["mailbomb."] = 2
category["mscan."] = 1
category["multihop."] = 4
category["named."] = 4
category["neptune."] = 2
category["nmap."] = 1
category["perl."] = 3
category["phf."] = 4
category["pod."] = 2
category["portsweep."] = 1
category["processtable."] = 2
category["ps."] = 3
category["rootkit."] = 3
category["saint."] = 1
category["satan."] = 1
category["sendmail."] = 4
category["smurf."] = 2
category["snmpgetattack."] = 4
category["snmpguess."] = 4
category["sqlattack."] = 3
category["teardrop."] = 2
category["udpstorm."] = 2
category["warezmaster."] = 2
category["worm."] = 4
category["xlock."] = 4
category["xsnoop."] = 4
category["xterm."] = 3
category[
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值