目录
一、通俗理解决策树算法原理
二、举例说明算法执行过程
三、Java实现
本文基于书籍《数据挖掘概念与技术》,由于刚接触Data Mining,所以可能有理解不到位的情况,记录学习笔记,提升自己对算法的理解。
代码下方有,如果有金币的童鞋可以贡献一下给无耻的我一枚:
代码传送门:http://download.youkuaiyun.com/detail/adiaixin123456/9416398
一、通俗理解决策树算法
决策树算法主要用于分类,分类顾名思义就是将不同的事物进行分类,比如对于银行贷款的客户来说,就可以分为是安全的客户以及存在潜在风险的客户,我们可以根据用户的类型来决定是否给予贷款,以及给多少额度。
决策树是一颗多叉树,它是一种监督学习(监督学习就是提供的训练数据中对每条数据都提供了类标号,例如告诉我们哪些人买了电脑,哪些人没有买)。是通过事务的多个不同属性来对事务进行分类的,这里举一个书上的例子,即电商想对用户是否会买电脑进行预测分析,我们就要对已经买过电脑和其他没有买电脑的人的各项属性来进行分类,发现这个买电脑人有哪些的特性,从而对其他潜在客户进行预测,是否满足这些特性,去推荐用户电脑。可以用来分类的属性有很多,这里只给出书上例子中的,包括年龄、收入、是否是学生、信用这四个维度,当然也可以包含其他的属性,例如职业、居住地、性别等等。这些属性在用户画像中也称为标签。
生成一个决策树主要的步骤1.学习:通过决策树生成算发分析训练数据,生成决策树。2.数据校验:通过校验数据评估这个决策树正确率如何,如果可以接受,就可以用于新数据的分类。
二、算法执行过程
我们先给出一个决策树的例子图如下,表示了用户是否购买电脑的分类。一目了然,在使用时,通过用户的属性的值先比较用户的年龄然后继续向子节点比较,最后得出结果。
2.1在描述算法之前,我们首先要确定几件事情:
(1).属性比较的先后顺序,即那个属性先比较、哪些属性后比较,这里不同的决策树方法如ID3使用的属性的增益,而C4.5作为ID3的改进,选择了属性的增益率。大体的方向都差不多,就是选择出哪个属性对我们要分类的影响最大,就把它放在前面去比较,比如在买电脑上面,性别对分类的影响不大,比如各占50%。而不同的年龄中买电脑的比例就很大,比如老年人购买的几率就很小,而中年人的购买的几率就很大,毕竟工作需要,这样我们就说年龄比性别的增益大,当然这个是有个公式来计算的,我们后面会说。
(2).属性的类型可以分为连续的或离散的,其中离散的表示属性的值的取值范围是可数的,比如标称(类似枚举)、二元属性(类似布尔类型),连续的比如年龄、收入等,对于年龄,因为可以根据时间的单位进行无限的划分,比如按照年、月数、天数、秒、毫秒等等,决策树生成算法需要离散的属性,对于连续的属性要进行离散化,这里我们需要将年龄转化为离散的,比如如上操作,将年龄分为青少年、中年和老年,这个需要由专家来人为划分,或使用其他公式,输入数据的预处理部分
(3).如果想要一个理想的决策树,那么我们就需要大量的真实数据来构建与验证,否则也许会对决策进行误导。
2.2算法描述:
我们使用书上的例子:如下表为客户的数据,并且已经对其做了类标记,即客户有木有购买过电脑
书中决策树的生成算法如下,可以先跳过:
举例说明:
1.算法参数:
(1)带类标号的数据集D,即上面表中的数据,14条。
(2)用户分类的属性集合,该例子中为年龄、收入、是否为学生、信用评级。
(3)找到最好的划分属性的方法,即我们之前提过的如果确定哪个属性优先进行比较,这里使用ID3的,属性增益来计算。
2.算法过程:
1.在属性的集合中选择一个最好的划分属性,作为根分裂节点,属性A的增益计算公式为
其中
,期望信息,又称为熵
m为类的值种类个数,本例中,m为2(buys_computer只有买或不买两种)
pi为类每个值出现的概率,p1=9/14,即buys_computer是yes的个数为9,总共数据集个数为14。同理p2=5/14