痛苦总是走在勇敢之前。
-题记
一.决策树
何为决策树?
决策树就是一种描述对实例进行分类的树形结构。其中每个内部节点代表对某个属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类的分布。
决策树的构建过程:
- 决策树的构建过程就是从根节点开始,测试待分类项中对应的特征属性,并按照其值选择输出分支,直到叶子结果,将叶子结点的存放的类别作为决策结果。
- 构建决策树的关键步骤就是分裂属性,分类属性是指在某个结点按照某一类特征属性的不同划分构建不同的分支,其目标就是让各个分裂子集尽可能的属于同一个类别。
- 决策树构建过程中分裂属性终止的条件有:
- 树达到指定的深度(max_depth),每次分割视为一层。
- 所有叶子结点中的样本属于同一类别。
- 所有叶子结点包含的样本数量小于指定的最小分类样本(min_sample_split)数量。
4.构建决策树的规则:
对于划分方式可分为离散型属性和连续性属性:
离散型属性:每一个类别可化为一个节点(多叉树)或分为属于A 和不属于A(二叉树)
连续值属性:可以划分为大于等于A与小于A
- 将数据集的每一个特征看成是 一种划分可能
- 从根节点开始,选择属性划分的方式(信息增益、信息增益率、基尼系数等)进行节点划分
- 划分的目的是可以在每次划分的时候实现对信息增益的最大化
二.信息熵
1.概念
信息熵是用来描述系统信息量的不确定度。是可以作为数据纯净度或浑浊度的衡量指标。
2.公式
假设训练数据集为D,有k个类,k=1,2,...,k,
为属于类
的样本个数,有
,
为样本个数,
则有:
- 若样本以相同的比列分布于不同的类别时,熵的值最大
- 若样本都属于某一类别时,则熵为0,此时不纯度最低。
下面有这样一个案列用来计算数据集D的信息熵。
上图是用Info(D) 来表示信息熵。
三.信息增益与信息增益率
1.公式
假设特征A有n个不同的取值{},根据特征A的取值将D划分为n个子集,
为
的样本个数,有
,
记子集中属于类
的样本集合为
,
为
的样本个数。
则A的条件熵为:
那么A的信息增益为:
增益率为:
下面有一些实例让我们来看看如何运用公式计算。
上图是对年龄属性进行信息增益的计算。
上图是对收入属性进行的信息增益率的计算。
2.ID3算法与信息增益
1).实际上,信息增益就是父结点的不纯度减去子结点的不纯度。
2).子结点的不纯度越低,信息增益越大。分类属性的方式就是应该使得子结点的不纯度越低越好。
3).ID3算法用信息增益来划分属性。其信息增益的计算比较依赖于特征数目比较多的特征。
4).ID3为单变量决策树
3.C4.5算法与信息增益率
1).C4.5算法用信息增益率来划分属性。其对可取值数目较少的特征属性有所偏好。
2).C4.5算法在构造树的过程中需要对数据集进行多次的顺序扫描和排序,因此导致算法的低效。
3).C4.5算法是先从后补划分属性中找出增益大于平均水平的属性,再从中选择增益率最高的。
四.基尼系数
1.公式
假设有k个类,样本点属于第k类的概率为,则有:
即:1减去每个类别的概率值的平方和。
若样本集合D根据某个特征A被分割成D1和D2两个部分,那么在特征A的条件下,D的Gini指数为:
Gini指数越小,数据集纯度越高。
2.cart树
1).cart树是一颗二叉树。
2).cart树既可以做回归又可以做分类。当cart树做分类时,用Gini指数来进行划分属性,当cart树做回归时,采用样本的最小方 差作为节点分裂的依据。
五.特点比较
类型 | 树的结构 | 特征选择 | 连续值处理 | 缺失值处理 | 剪枝 | 特征多次使用 | |
---|---|---|---|---|---|---|---|
ID3 | 分类 | 多叉树 | Gain | 不支持 | 不支持 | 不支持 | 不支持 |
C4.5 | 分类 | 多叉树 | GainRatio | 支持 | 支持 | 支持 | 不支持 |
CART树 | 分类、回归 | 二叉树 | Gini | 支持 | 支持 | 支持 | 支持 |
六.剪枝以及缺失值处理
决策树的剪枝策略分为'预剪枝'和'后剪枝'。
-
预剪枝是在决策树生成过程中,对每个结点在划分前先进行预估,若当前结点的划分不能带来决策树泛化性能的提升,则停止划分当前结点并将还结点标记为叶子结点。
-
后剪枝则是咋i训练过程中生成一颗完整的决策树,然后自底向上的对非叶子结点进行考察,若将该结点对应的子树替换为叶节点能带来泛化性能的提升,则将该子树替换为叶节点。
-
判断泛化性能提升的方法
-
留出法:即留出一部分数据用于’验证’
-
连续值属性的划分:二分法
-
将该属性的连续性数值进行排序
-
将俩个相邻的排过序的属性值之间选择中间值作为划分点
-
计算每个候选点的信息增益值
-
选择修正后信息增益最大的分裂点作为该特征的分裂点
缺失属性值的处理:
-
赋给它结点N的训练样列中该属性的最常见值
-
赋给它结点N的被分类维C的训练样列中该属性 的最常见值
-
为A 的可能值赋予一个概率
-
在计算分裂信息时可以将缺失值作为一个正常值进行处理
-
分裂时,将属性缺失值缺失的实例分配给所有的分支,但是带个权重比重