一、什么是决策树
我们看下面这个生活中的例子:
一个女生正在面临择偶的判断,最终的决策是:进一步了解(Yes/No),她往往从如下方面进行考虑(年龄、颜值、收入、价值观匹配度)
这很像一棵树对不对,根据属性对数据一步一步进行筛选(划分),从而达到符合条件的值。
决策树
决策树(Decision tree)是基于已知各种情况(特征取值)的基础上,通过构建树型决策结构来进行分析的一种方式,是常用的有监督的分类算法
决策树组成
一般的,一棵决策树包含一个根结点、若干个内部结点和若干个叶结点;叶结点对应于决策结果,其他每个结点则对应于一个属性测试;
决策树就是把样本按属性一层层做“是/否”等测试往下分,直到落到某个叶子;根结点装的是全部样本,每条根到叶的路径就是一串判定规则,叶子给出最终预测。
决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
上面案例是大多数女生通过定性的主观意识,把年龄放最顶层进行划分,那么如果我们想量化这个过程,该如何划分属性呢?
这里我们先引入信息熵、信息增益、信息增益率、基尼系数的概念。
信息熵
信息熵是度量样本集合纯度最常用的一种指标。
假定当前样本集合D中第k类样本所占的比例为p_k(k=1,2...|y|)
Ent(D)的值越小,D纯度越高。
信息增益
信息增益是相对于属性/特征而言的
对于某个属性a有V个可能的取值\{a^1,a^2...a^V\},按此划分会产生V个分支节点,第v个分支节点包含了D中所有在属性a上取值为a^v的样本,记作D^v。在结合分支节点赋予权重\frac{|D^v|}{|D|},我们给出信息增益公式:
一般来说,信息增益越大,意味着划分的更“纯”,ID3决策树算法就是根据划分属性的。
信息增益率
由信息增益公式我们知道,其对可取值数目较多的属性有所偏好,为了减少这种偏好带来的不利影响,引入了增益率来选择最优划分属性。
其中IV为属性a的固有值,属性数目越多,其值就越大,C4.5决策树算法就是采用此方式,先从候选划分属性中找到信息增益高于平均水平的属性,再从中选择增益率最高的。
基尼系数
CART决策树算法引入了此方式来划分属性,数据集的纯度可用基尼值来度量
属性a的基尼指数定义为
Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,其值越小,数据集纯度越高。
我们在候选属性集合A中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即a_*=\underset{a\in A}\argmin \operatorname{Gini\_index}(D, a)
二、一些决策树算法
示例
小明的是否外出活动与天气条件的关系
ID3算法
是一种基于信息增益的决策树生成算法,核心思想:每一步选择最能“减少不确定性”的属性来划分数据。
以上述例子,我们开始计算:
用以学习小明是否根据天气预测是否决定外出的决策树,以天气属性为例:
Ent(D^1)=D^1(天气=晴)、Ent(D^2)=D^2(天气=阴)、Ent(D^3)=D^3(天气=雨)
Ent(D^1)=-\frac{3}{5} \log _{2} \frac{3}{5}-\frac{2}{5} \log _{2} \frac{2}{5} \approx 0.97095
Ent(D^2)=-\frac{4}{4} \log _{2} \frac{4}{4}\approx 0
Ent(D^3)=-\frac{1}{5} \log _{2} \frac{1}{5}-\frac{4}{5} \log _{2} \frac{4}{5} \approx 0.72193
计算信息增益:
依次类推计算有所有属性的增益,找到最优的进行划分。
C4.5算法
在ID3基础上需要多算一下信息增益率:
Gain\_rate(D,天气)=\frac{Gain(D,天气)}{IV(天气)} = \frac{0.3954}{1.575} \approx 0.2510
依次类推计算所有属性的增益率,我们选择信息增益率最小的进行划分
引入IV来计算增益率的目的
回顾熵的定义:衡量分布的“不确定性”。
-
若所有样本都集中在某个取值上,如 P=[1,0,0...]则Ent(D)=Ent(D^1)
于是Gain(D,a)=Ent(D)-\sum_{v=1}^1\frac{|D^v|}{|D|}Ent(D^v)=0
划分前后的数据分布没有变化,增益为0,说明这个属性对分类没有帮助
-
若每个取值都一样多,如 P=[\frac{1}{V},\frac{1}{V},\frac{1}{V}...]则Ent(D^v)=0
于是Gain(D,a)=Ent(D)-\sum_{v=1}^V\frac{|D^v|}{|D|}Ent(D^v)=Ent(D)
此时划分后的每个分支都是纯的(熵为0),增益达到最大,但是这样模型毫无泛化能力,因为每个分支都意味着模型要去拟合更多局部规律(过拟合)
故我们引入 IV
属性的取值越多,样本划分得越细碎、不确定性越大,因此 IV(本质是熵)越大。
C4.5 用它来惩罚那些取值多但没有实质预测价值的属性。
CART算法
CART的思路完全不同。它构建的是二叉树(Binary Tree),每次划分只分成两部分。
它根据任务类型采用不同的纯度指标:
-
分类任务:使用基尼指数(Gini Index)
-
回归任务:使用最小平方误差(MSE)