决策树
决策树又称为判定树,是运用于分类的一种树结构,其中的每个内部节点代表对某一属性的一次测试,每条边代表一个测试结果,叶节点代表某个类或类的分布。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选择选择下一比较分支,直到叶子节点作为最终的决策结果
实际上就是找到最纯净的划分,要达到这个目标,要干这些事:
- 特征选择
- 决策树生成
- 剪枝
在讲这三个步骤之前,先看一下步骤中用到的算法
2.1 特征选择
首先要考虑哪个变量是树根,哪个是树节点,为此,我们需要考虑变量的重要性。
怎么衡量?,或者说怎样选择?有三种算法:
- ID3算法 :使用信息增益(作为不纯度)
- C4.5算法 :使用信息增益率(作为不纯度)
- CART 算法:使用基尼系数(作为不纯度)
不同的方法形成不同的决策树,决策树方法会把每个特征都试一遍,最后选取能够使分类分的最好的特征(e.g. 将A属性作为父节点,产生的纯度增益(GainA)要大于B属性作为父节点,则A作为优先选取的属性)。
2.2 特征选择用到的算法
ID3算法
该算法决策树的一种算法实现,以信息论为基础,以信息熵和信息增益为衡量标准,从而实现对数据的归纳分类。
核心思想:是以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂。
信息熵(entropy)是用来衡量一个随机变量出现的期望值。如果信息的不确定性越大,熵的值也就越大,出现的各种情况也就越多。
信息熵计算公式:$$Entropy(S) = \sum_{i=1}^c - p_i log_2 p_i $$
其中,S为所有事件集合,p为发生概率,c为特征总数。注意:熵是以2进制位的个数来度量编码长度的,因此熵的最大值是log2C。
信息增益是指信息划分前后的熵的变化(差值),其实,我们期望使用这个属性分割样例而导致的期望熵降低,这是我们想要的结果。
信息增益计算方式:
$$ Gain(S,A) ≡ Entropy(S) - \sum_{v∈Values(A)} \frac {\vert S_v\vert} {\vert S \vert}Entropy(S_v)$$
其中,第二项为属性A对S划分的期望信息
> 算法的基本思想:
- 初始化属性集合和数据集合
- 计算数据集合信息熵S和所有属性的信息熵,选择信息增益最大的属性作为当前决策节点
- 更新数据集合和属性集合(删除掉上一步中使用的属性,并按照属性值来划分不同分支的数据集合)
- 依次对每种取值情况下的子集重复第二步
- 若子集只包含单一属性,则为分支为叶子节点,根据其属性值标记
- 完成所有属性集合的划分
C4.5算法(该算法是对ID3的改进)
- 用信息增益率来选择属性,克服了用信息增益选择属性偏向选择多值属性的不足
- 在构造树的过程中进行剪枝
- 对连续属性进行离散化,也就是说能处理连续属性。
- 能够对不完整的数据进行处理
有点不言而喻了。
样本增益率
设样本集S按离散属性F 的c个不同的取值划分为c个子集,则这c个子集的信息熵为:
$$ SplitInformation(S,A)≡-\sum_{i=1}^c \frac {\vert S_i \vert} {\vert S \vert} log_2 {\frac {\vert S_i \vert} {\vert S \vert}}$$
信息增益率是信息增益与信息熵的比例,如下
$$ GainRatio(S,A)≡\frac {Gain(S,A)}{SplitInformation(S,A)}$$
离散化处理
将连续型的属性变量进行离散化处理形成决策树的训练集:
- 将需要处理的样本(对应根节点)或样本子集(对应子树)按照连续变量的大小从小到大进行排序
- 假设该属性对应不同的属性值共N个,那么总共有N-1个可能的候选分割值点,每个候选的分割阈值点的值为上述排序后的属性值中两两前后连续元素的中点
- 用信息增益选择最佳划分
不完整数据处理
处理缺少属性值的一种策略是赋给该节点所有对应训练实例中该属性最常见的值,另一种复杂的情况是为该节点每个可能出现的值赋予一个概率
CART 算法
Classification And Regression Tree,分类回归树,也属于一种决策树。
构建决策树
根据所选特征评估标准,从上至下递归地生成子节点,直到数据集不可分则停止决策树停止声场。
剪枝
决策树容易过拟合,需要剪枝来缩小树的结构和规模。
树的剪枝分为预剪枝和后剪枝,预剪枝,及早的停止树增长控制树的规模。
后剪枝在已生成过拟合决策树上进行剪枝,删除没有意义的组,可以得到简化版的剪枝决策树,包括REP(设定一定的误分类率,减掉对误分类率上升不超过阈值的多余树)、PEP,还有一种CCP,即给分裂准则—基尼系数加上惩罚项,此时树的层数越深,基尼系数的惩罚项会越大。