本机器学习系列囊括了二十世纪十大算法,今天就来讲解一下十大算法之决策树。最初的决策树算法是心理学家兼计算机科学家 E. B. Hunt 1962年在研究人类的概念学习过程时提出的 Concept Learning System,其确立了决策树“分而治之”的学习策略。本文简介明了的介绍代表性的决策树算法有ID3(信息增益准则)、C4.5(信息增益+增益率准则)、CART(Gini 指数)。分类决策树算法基本思想是:将空间分割成块状区域,其中每块区域内样本都是同一个类别。
CART算法由以下两步组成:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
训练数据集:$D={(x_i,y_i),i=1,\cdots,n}, x_i=(x_{i1},x_{i2},...,x_{im})$,属性集$A={a_1,a_2,\cdots,a_d}$
1、ID3 & C4.5算法
顾名思义,决策树是基于树的结构来进行决策的。下图分别给出分类树和回归树的生成图示。仔细看图是不是觉得决策树的生成怎么眼熟?对,决策树的生成过程是一个递归过程,与人类的决策过程一模一样哦。在决策树基本算法中,三种情况会导致递归返回:
(1)当前节点所包含的样本属于同一类别,无需划分;
(2)当前属性集为空或所有样本相等,无法划分;
(3)当前节点包含的样本集合为空,不能划分。
由分类决策树算法可知关键是如何选择最优的划分属性。那么问题来了:判断最优属性的准则是什么?直观理解是:希望分支节点所包含的样本尽可能属于同类别,即节点的“纯度”越来越高。不同的度量纯度指标发展出不同的方法,其中主流的是ID3(信息增益准则)、C4.5(信息增益+增益率准则)、CART(Gini 指数)。
1.1 信息增益
设样本集合D中共有K类样本,第k类样本比例$p_k$,则D的信息熵为:$$Ent(D)=-\sum\limits_{k=1}^{K} p_k \log_2 p_k$$ 其中$Ent(D)$的值越小,则D的纯度越高。由图2知:设子节点以属性 $a=\{a^1,a^2,a^3\}$ 划分为三个子集$D^v, v=1,2,3$,则属性$a$划分样本集所得的信息增益(information gain)为:
$$Gain(D,a)=Ent(D)-\sum\limits_{v=1}^3 \frac{| D^v |}{| D |} Ent(D^V)$$
其中信息增益越大,属性划分所带来的纯度提升越大;且信息增益准则偏向种类多($v$比较大)的属性。著名的ID3决策树算法$^{[1]}$的划分属性选择:$a_*=arg\max\limits_{a\in A} Gain(D,a)$
1.2 增益率
为了减弱信息增益准则偏向而带来的不利影响,E. B. Hunt 在C4.5算法中使用信息增益+增益率准则来选择最优划分属性。增益率定义为;
$$Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}$$
其中$IV(a)=-\sum\limits_{v=1}^{V}\frac{| D^v |}{| D |} \log_2 \frac{| D^v |}{|D |}$为属性$a$的固有值(intrinsic vslue)。由$IV(a)$定义可知:当$V$越大,$IV(a)$的值通常越大,即增益率准则$a_*=arg\max\limits_{a\in A} Gain\_ratio(D,a)$偏向种类少的属性。事实上,C4.5算法$^{[2]}$使用了启发式准则组合:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的属性。
2. CART(分类与回归树)
CART决策树是二叉树,分类树和回归树分别用Gini指数准则和平方误差准则来选择最优的划分属性。
2.1 分类树
分类树算法框架同ID3 和 C4.5算法,不同的是分类树每个属性种类为2($V=2$)和Gini指数准则来选择最优的划分属性。数据集D的Gini指数:
$$Gini(D)=\sum\limits_{k=1}^K \sum\limits_{k'\neq k}p_k p_{k'}=1-\sum\limits_{k=1}^K p_k^2$$
直观上,Gini指数反映了从数据集D中随机抽取两个uangben,其类别标记不一致的概率。即$Gini(D)$越小,则数据集D的纯度越高。则属性$a$的Gini指数定义为:
$$Gini\_index(D,a)=\sum\limits_{v=1}^2 \frac{| D^v |}{| D |} Gini(D^v)$$
即分类树划分属性准则$a_*=arg\max\limits_{a\in A} Gini\_index(D,a)$。
2.2 回归树
回归决策树算法基本思想:将空间分割成块状区域$R_m,m=1,\cdots,M$,然后用简单函数(常数$C_m,m=1,\cdots,M$)来拟合每一区域。
算法:
(1)选择最优切分变量$j$和最佳分割点$s$
$$\min\limits_{j,s}\{\min\limits_{C_1}\sum\limits_{x_i\in R_1(j,s)}(y_i-C_1)^2+\min\limits_{C_2}\sum\limits_{x_i\in R_2(j,s)}(y_i-C_2)^2 $$
(2)用选定的$(j,s)$划分区域并给出预测函数
$$R_1(j,s)=\{ x_i|x_{ij}< s\},\ R_2(j,s)=\{ x_i|x_{ij}\geq s\},\ C_m=\frac{1}{N_m}\sum\limits_{x_i\in R_m(j,s) y_i}$$
(3)对子区域进行(1)(2)操作,直至满足停止条件
(4)将输入空间划分为$M$个区域,则决策函数为$f(x)=\sum\limits_{m=1}^M C_m I\{x_i\in R_m\}$
有奖问答:回归树中机器学习三个基本要素体现在哪呢?
3、剪枝
试想一下,决策树一直迭代下去会发生什么情况?一颗非常大的树,每个分割区域只有一个样本点。过拟合!!这样的决策树是我们希望的吗?剪枝是决策树学习算法对付“过拟合”的主要手段。决策树剪枝的基本策略有“预剪枝”和“后剪枝”。
预剪枝:在决策树生成过程中,对节点划分前进行预估计,若当前节点划分不能带来泛化能力提升,则停止划分并将当前节点标记为叶节点。
后剪枝:先从训练集生成一颗完整决策树,然后自底向上对非叶节点对应的子树替换为叶节点,若泛化能力提升,则替换子树为叶节点。
正则化: 避免回归树过拟合策略。平方损失准则为:$\min\limits_f \sum\limits_{i=1}^n (f(x_i)-y_i)^2+\alpha |f|$
推荐大家读周志华老师的西瓜书的4.3剪枝处理或李航《统计学习理论》,不赘述。
4、MATLAB & python 代码
MATLAB中自带CART函数:fitctree & fitrtree
python3.4.3代码:https://pypi.python.org/pypi/DecisionTree/
推荐 Coursera 国立台湾大学林轩田机器学习课程第九讲决策树
决策树在图像编码应用:
![](https://images2017.cnblogs.com/blog/1227986/201708/1227986-20170829141453140-1374415501.png)
![](https://images2017.cnblogs.com/blog/1227986/201708/1227986-20170829141358937-419087572.png)
参考文献:
[1]Quinlan, J. R.(1986). "Induction for Machine Learning." Meachine Learning, 1(1): 81-106
[2]Quinlan, J. R.(1993). C4.5:Programs for Machine Learning. Morgan Kaufmann, San Mateo, CA
[3]周志华, 机器学习
[4]分类与回归树: http://idatamining.net/blog/?p=698