python实现决策树分类(一)

来源:互联网 发布:windows 损坏的图像 编辑:程序博客网 时间:2024/05/16 16:13

决策树是一种常见的分类算法, 每一个叶子节点对应一个分类,非叶子节点对应某个属性的划分。决策树主要有3个部分组成,分别为决策节点,分支和叶子节点。其中决策树最顶端的节点为根决策点,每一个分支都有一个新决策点。决策节点下面是叶子节点。决策的过程从根决策点开始,从上到下。构造决策树的过程是如何选择合适的属性对样本做拆分。

接下来我会主要介绍ID3算法。

ID3的核心思想:选择信息增益最大的属性进行分裂。

信息增益:

一.  设D是数据样本的集合,假定类别属性Ci具有m个不同的值(1=1,2,...m),对于一个给定的样本,其总的信息熵为


pi表示任意样本属于Ci的概率。
二.  假设属性A具有k个不同的属性值,利用属性A,可将D划分为为k个子集,根据属性A划分样本的信息熵为:


三.  最后,用属性A划分样本集D后所得信息增益为:


举一个简单例子:数据集D如下:


1 . 这个数据集根据年龄,输入层次,学生,信用等级等因素,来判断对是否购买的影响。

1) 计算总的信息熵: 其中数据总数为14,其中是否购买电脑列为“是”的为9,“否”的为5


2  )  计算每个待测属性的信息熵

  对于“年龄属性”:其包括的属性值有3个,分别为“中年”,“青少年”,“老年”。

  在“青少年”的属性下,“是否购买电脑的”的值"是”为2,“否”为3,所以有:


同理:在“中年”的属性下,“是否购买电脑的”的值 "是”为4,“否”为0,所以有:


在“老年”的属性下,“是否购买电脑的”的值 "是”为3,“否”为2,所以有:


所以可以知道,按“年龄”划分的信息熵为:


接下来可以一次求得


3) 计算信息增益

因为信息增益的计算方法如下:


所得信息增益为:


4)由第(3)步骤可得,年龄的信息增益最大,所以“年龄”作为根决策节点,其属性值“青少年”,“中年”,“老年”作为根节点的三个分支。


2. 此时由于“年龄”作为决策树的根节点了,接下来需要分别考虑的是“青少年”,“中年”,“老年”的情况,需要继续对这个表确定决策节点,首先从3种分支中找出“青少年”分支下对应的决策节点,方法和上面一样,选择信息增益最大的作为决策节点。

  一  .“年龄”下的“中年”分支

        因为对于“中年”属性来说,其对应的“是否购买电脑”值都为“是”,所以“中年”分支停止分裂。叶子节点的值为“是”,决策树的图如下:


二 . “年龄” 下的“青少年”分支

首先对原始表格做一个简化,把所有“青少年”值得提取出来,所显示的表格如下:

记录ID

年龄

输入层次

学生

信用等级

是否购买电脑

1

青少年

一般

2

青少年

良好

3

青少年

一般

4

青少年

一般

5

青少年

良好

1) 计算总的信息熵: 其中数据总数为5,其中是否购买电脑列为“是”的为2,“否”的为3


2  )  计算每个待测属性的信息熵

对于“输入层次”而言,其包括的属性值有个,分别为“高”,“低”,“中”。

在“高”属性下,“是否购买电脑的”值“是”0,“否”为2,所以有:


在“低”属性下,“是否购买电脑的”值“是”1,“否”为0,所以有:


在“中”属性下,“是否购买电脑的”值“是”1,“否”为1,所以有:


所以可以知道,按输入层次划分的信息熵为:


接下来可以一次求得


3) 计算信息增益


所以可以知道,在年龄青少年分支下,学生”的信息增益值最大,所以作为决策节点,其下面有两个分支,分别为“是”,“否”,对于所有分支为“是”对应的“是否购买电脑”的值也为“是”,对于所有分支为“否”对应的“是否购买电脑”的值也为“否”。因此停止继续分裂。现在决策树的形式如下:


3) 计算信息增益
三 . “年龄” 下的“老年”分支

     因为“年龄”下还有一个分支为“老年”,“学生”成为“青少年”分支下的决策节点,所以接下来,只需考虑“输入层次”和“信用等级”两种情况,首先对原始表做一个简化,把所有老年值得提取出来,所显示的表格如下:

记录ID

年龄

输入层次

学生

信用等级

是否购买电脑

1

老年

一般

2

老年

一般

3

老年

良好

4

老年

一般

5

老年

良好


计算步骤和上面一样,所得信息增益为:

1)总的信息熵为:


2)对于“输入层次”, “信用等级”的信息熵为:



3)计算信息增益


所以可以知道,在年龄“老年分支下,信用等级”的信息增益值最大,所以作为决策节点,其下面有两个分支,分别为“一般”,“良好”,对于所有分支为“一般”对应的“是否购买电脑”的值也为“是”,对于所有分支为“良好对应的“是否购买电脑”的值也为“否”。因此停止继续分裂。现在决策树的形式如下:


至此我们通过“是否购买电脑”与年龄情况的历史数据构造了决策树,接下来,是代码的实现,代码放在下一章《python实现决策树分类(二)》


参考:http://www.cnblogs.com/fengfenggirl/p/classsify_decision_tree.html


原创粉丝点击