1.决策树算法
决策树是一种基于特征对实例进行分类或回归的过程。决策树算法最早产生于上世纪60年代,后由罗斯昆(J Ross Quinlan)提出了ID3算法,通过信息增益选择和分裂特征。之后罗斯昆对进行了优化,提出了C4.5算法。ID3算法是一种决策树分类算法。本文讲解其中的ID3算法。
2.ID3算法原理
2.1 信息熵
2.1.1 信息熵的定义
信息熵是描述信息源各可能事件发生的不确定性。信息论之父 C. E. Shannon 在 1948 年借鉴热力学概念提出了信息熵。
其中,表示第
个类别的概率。类别是指样本的分类类别或者说是要预测的分类。
思考:为何熵的计算公式中会有个负号?由于概率介于0-1之间,取对数后的结果为负数,为了便于计量和分析,故在前面加了个负号。
2.1.2 经验熵与经验条件熵
先看二者的计算公式。
根据某一节点的类别,其经验熵的计算公式如信息熵的概念。
特征的经验熵为:
其中,表示该特征下第
个类别,
表示该特征的第
个类别的概率。
条件熵是指在某一特征或条件下,在相应的特征或条件的各属性的加权信息熵。
设特征有
个属性
。
属性的信息熵为
, 其中,
表示该属性的第
个类别,
表示该属性中第
个类别的概率。
属性的权重为
,其中
表示
对应的样本数量,
表示特征
对应的样本数量。
则特征的条件熵为:
2.1.3 信息增益
特征的信息增益:
信息熵越大,表示样本的不纯度越高,分类算法的思想是降低不纯度,而信息增益表示分裂后所带来的信息熵的下降量。按此标准,信息增益越大,分裂的效果越好。
2.2 ID3算法步骤
2.2.1 输入与输出
输入:训练数据集,特征集
,信息增益分裂阈值
。其中训练数据集
中包括分类值(可以类似理解为目标值、被解释变量等),分裂阈值
是为了判断是否进一步分裂的条件。
输出:决策树
2.2.2 算法过程
1、节点预判断
1)若该节点的数据集中所有实例都属于同一类
, 则以
作为此节点的分类,此节点分裂结束;
2)若该节点的数据集中所有实例无任何特征或无可用于分裂的属性,以
中实例类别数量最多的
作为此节点的实例分类,此节点分裂结束。
否则进入下一步。
2、选择分裂特征
在该分裂的样本集下,计算每一个特征的信息增益,以信息增益最大的特征为该节点的分裂特征,进入下一步。
若多个特征的信息增益相等,随机选择一个特征作为分裂特征;若所有特征最大的信息增益<,则该节点分裂停止,以该节点数据集中实例类别数量最多的
作为该节点的实例分类。
3、节点分类
按该特征的属性分裂产生子节点,以各属性中实例类别数量最多的作为各子节点的类别。
4、继续分裂
对上一步产生的各子节点,返回第1步循环(递归调用)。直至所有节点分裂结束。
2.2.3 算法说明
从以上过程可以看出:
1、ID3算法是一种贪婪算法,遍历所有特征和属性;
2、ID3算法只适用于分类特征,对于连续性特征不适用;
3、没有考虑缺失值,存在缺失值的需要预处理;
4、一般来讲,特征属性越多,条件熵会越小,信息增益越大。因此,ID3算法倾向于选择属性较多的特征。
3. ID3算法演示
以客户的申请信息来判断是否给予贷款。涉及的特征有年龄、性别、收入、房产、信用表现、审批结果,前5个特征分别记为。以此数据集为样本,记为
,应用ID3算法原理进行演示。
3.1 数据集
序号 | 年龄 | 性别 | 收入 | 房产 | 信用表现 | 审批结果 |
0 | 青年 | 男 | 高 | 有 | 优秀 | 通过 |
1 | 青年 | 男 | 中 | 无 | 一般 | 通过 |
2 | 青年 | 男 | 低 | 无 | 差 | 拒绝 |
3 | 青年 | 女 | 中 | 有 | 优秀 | 通过 |
4 | 青年 | 女 | 低 | 无 | 一般 | 通过 |
5 | 中年 | 男 | 高 | 有 | 一般 | 拒绝 |
6 | 中年 | 男 | 中 | 无 | 差 | 拒绝 |
7 | 中年 | 女 | 高 | 有 | 优秀 | 通过 |
8 | 中年 | 女 | 中 | 有 | 优秀 | 通过 |
9 | 中年 | 女 | 低 | 无 | 一般 | 拒绝 |
10 | 老年 | 男 | 高 | 有 | 优秀 | 通过 |
11 | 老年 | 男 | 低 | 有 | 差 | 通过 |
12 | 老年 | 男 | 低 | 无 | 差 | 拒绝 |
13 | 老年 | 女 | 中 | 无 | 一般 | 通过 |
14 | 老年 | 女 | 高 | 有 | 差 | 拒绝 |
3.2 算法步骤
1)第一层分裂
样本数据的分类,即“审批结果”有两个类别:通过、拒绝,并非同一类,需要分裂。
为选择分裂特征,需要计算各特征的信息增益。为计算信息增益,先计算经验熵和条件熵。
经验熵:
年龄的条件熵:
人数 | 通过 | 拒绝 | ||
年龄 | 青年 | 5 | 4 | 1 |
中年 | 5 | 2 | 3 | |
老年 | 5 | 3 | 2 |
青年、中年、老年的权重分别为:
青年的信息熵:
中年的信息熵:
老年的信息熵:
计算年龄特征的条件熵:
年龄特征的信息增益:
类似可以计算其它特征的信息增益:
人数 | 通过 | 拒绝 | ||
性别 | 男 | 8 | 4 | 4 |
女 | 7 | 5 | 2 |
人数 | 通过 | 拒绝 | ||
收入 | 高 | 5 | 3 | 2 |
中 | 5 | 4 | 1 | |
低 | 5 | 2 | 3 |
人数 | 通过 | 拒绝 | ||
房产 | 有 | 8 | 6 | 2 |
无 | 7 | 3 | 4 |
人数 | 通过 | 拒绝 | ||
信用表现 | 优秀 | 5 | 5 | 0 |
一般 | 5 | 3 | 2 | |
差 | 5 | 1 | 4 |
特征 | 经验熵 | 条件熵 | 信息增益 |
年龄 | 0.9710 | 0.8879 | 0.0830 |
性别 | 0.9710 | 0.9361 | 0.0348 |
收入 | 0.9710 | 0.8879 | 0.0830 |
房产 | 0.9710 | 0.8925 | 0.0785 |
信用表现 | 0.9710 | 0.5643 | 0.4067 |
注:在计算信用表现的属性“优秀”的信息熵时,,涉及计算
,有兴趣的读者可以了解一下极限运算,此处不作说明。
从上表可以看出,信用表现的信息增益最高。若最大信息增益的特征有多个,可以随机选择一个。其属性有优秀、一般、差。特征选择完毕。
该节点的分类。“优秀”属性中,类别最多的为“通过”,该属性归类为“通过”;“一般”属性中,类别最多的为“通过”,该属性归类为“通过”;“差”属性中,类别最多的为“拒绝”,该属性归类为“拒绝”。
2)第二层分裂
分别对信用表现特征的三个属性作为预判断,再决定是否继续分裂。
a)优秀
该节点下的数据都属于“通过”一类。无需再分裂。
b)一般
样本数据的分类,即“审批结果”有两个类别:通过、拒绝,并非同一类,需要分裂。
序号 | 年龄 | 性别 | 收入 | 房产 | 审批结果 |
1 | 青年 | 男 | 中 | 无 | 通过 |
4 | 青年 | 女 | 低 | 无 | 通过 |
5 | 中年 | 男 | 高 | 有 | 拒绝 |
9 | 中年 | 女 | 低 | 无 | 拒绝 |
13 | 老年 | 女 | 中 | 无 | 通过 |
先计算其经验熵:
,其中
表示第二层分裂、第5个特征(信用表现)的第2个属性(一般)的熵。
信息增益计算:
特征 | 经验熵 | 条件熵 | 信息增益 |
年龄 | 0.9710 | 0.0000 | 0.9710 |
性别 | 0.9710 | 0.9510 | 0.0200 |
收入 | 0.9710 | 0.4000 | 0.5710 |
房产 | 0.9710 | 0.6490 | 0.3220 |
年龄的信息增益最大,选择年龄作为进一步分裂的特征。年龄的属性有:青年、中年、老年。
继续分裂:
青年分类均为“通过”,中年分类均为“拒绝”,老年分类均为“通过”。本节点分裂结束。
c)差
样本数据的分类,即“审批结果”有两个类别:通过、拒绝,并非同一类,需要分裂。
序号 | 年龄 | 性别 | 收入 | 房产 | 审批结果 |
2 | 青年 | 男 | 低 | 无 | 拒绝 |
6 | 中年 | 男 | 中 | 无 | 拒绝 |
11 | 老年 | 男 | 低 | 有 | 通过 |
12 | 老年 | 男 | 低 | 无 | 拒绝 |
14 | 老年 | 女 | 高 | 有 | 拒绝 |
先计算其经验熵:
,其中
表示第二层分裂、第5个特征(信用表现)的第1个属性(差)的熵。
信息增益计算:
特征 | 经验熵 | 条件熵 | 信息增益 |
年龄 | 0.7219 | 0.5510 | 0.1709 |
性别 | 0.7219 | 0.6490 | 0.0729 |
收入 | 0.7219 | 0.5510 | 0.1709 |
房产 | 0.7219 | 0.4000 | 0.3219 |
房产的信息增益最大,选择房产作为进一步分裂的特征。性别的属性有:有,无。
该节点的分类。“无”属性中,类别最多的为“拒绝”,该属性归类为“拒绝”;“有”属性中,类别数量相同,不妨该属性归类为“通过”。
3)第三层分裂
在第二层中,信用表现中的属性“差”尚需进一步分裂。 已经选择出房产作为下一步分裂的特征。
分别对房产特征的两个属性作为预判断,再决定是否继续分裂。
a)有
该属性2个实例分属两类,需要继续分裂。
序号 | 年龄 | 性别 | 收入 | 审批结果 |
11 | 老年 | 男 | 低 | 通过 |
14 | 老年 | 女 | 高 | 拒绝 |
该节点的经验熵为:
,其中,
表示第三层分裂、第4个特征(房产)的第1个属性(有)的熵。
如前文计算该节点的信息增益:
特征 | 经验熵 | 条件熵 | 信息增益 |
年龄 | 1 | 0 | 1 |
性别 | 1 | 0 | 1 |
收入 | 1 | 0 | 1 |
年龄、性别、收入的信息增益均为1,不妨选择性别作为进一步分裂的特征。性别的属性有:男、女。
该节点的分类。“男”属性中,该属性归类为“通过”;“女”属性中,该属性归类为“拒绝”。
以上性别各属性中,分类唯一,此时无需进一步分裂。
b)无
该属性有3个实例,1个分类。无需进一步分裂。
至此,所有节点均无需再进一步分裂(单一类别),分列结束。
3.3 分裂图示
注:属性颜色,黑色表示进一步分裂前的分类--“通过”,红色表示进一步分裂前的分类--“拒绝”。
4. ID3算法的总结
ID3算法作为比较早的决策树算法,其主要特点如下:
1)是决策树算法的一种,通过信息增益来决定分裂特征与分裂节点的选择;
2)不能处理连续特征;
3)不能处理缺失值;
4)倾向于选择多属性的特征。