决策树是一种常见的分类算法, 每一个叶子节点对应一个分类,非叶子节点对应某个属性的划分。决策树主要有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