机器学习实战一:决策树
1 决策树理论介绍
(声明:本文部分内容和图片来自周志华老师的《机器学习》)
1.1 引例
决策树是一种基本的分类与回归方法,它是基于特征对实例进行分类。比如面对一个未切开的西瓜,我们需要作出“这是好瓜吗?”这个问题的“决策”过程。通常情况下,我们会进行一系列的判断或“子决策”:我们先看“它的脐部是什么形状?”,如果是凹陷,则我们再看“它是什么颜色?”,最后我们得出最终决策:这是个好瓜。决策过程可用下面的决策树表示:
如上图所示,西瓜有脐部、色泽、根蒂等特征,这些特征又可称为西瓜的属性集。决策树中的节点都是西瓜的属性,各个分支代表了属性的不同取值。例如节点1代表的属性“脐部”有三种不同的取值:凹陷、稍凹、平坦,因此这个属性就有三个分支。决策树的起点是“脐部=?”,又可称为决策树的根节点。节点2、3、4、5、6是根据其他属性作出进一步判断,称为决策树的中间节点。我们希望通过西瓜属性的判断,作出“这是好瓜吗?”的决策,因此把属性“好瓜”作为决策树的叶节点。
1.2 基本思想
我们给定一个数据集,随机抽样形成训练集(双线上部)与验证集(双线下部),来说明决策树的学习过程。
决策树的学习包括三个步骤:特征选择、决策树的生成和决策树的修剪。
1.2.1 特征选择
特征选择也就是选择最优划分属性。所谓最优的划分属性,是使划分后的节点的纯度最高。纯度的度量指标包括:信息熵、信息增益、增益率和基尼系数等。
(1)信息熵
“信息熵”是度量样本集纯度最常用的一种指标。假定当前集合D中第k类样本所占的比例为 p k {p_k} pk, k = 1 , 2 , ⋯ , ∣ y ∣ k = 1,2, \cdots ,\left| y \right| k=1,2,⋯,∣y∣
则D的信息熵定义为:
[ E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log 2 p k ] [Ent(D) = - \sum\limits_{k = 1}^{\left| y \right|} {
{p_k}{
{\log }_2}{p_k}} ] [Ent(D)=−k=1∑∣y∣pklog2pk]
Ent(D)的值越小,则D的纯度越高。信息熵的取值范围是[0,1],越接近于0,节点的纯度越高。
以西瓜数据集为例,该数据集包含10个训练样例,用来学习一棵没剖开的西瓜是否是好瓜的决策树。显然 ∣ y ∣ = 2 \left| y \right| = 2 ∣y∣=2,其中好瓜的比例 p 1 = 1 2 {p_1} = \frac{1}{2} p1=21,坏瓜的比例 p 2 = 1 2 {p_2} = \frac{1}{2} p2=21 。可计算出数据集D的信息熵为:
[ E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k log 2 p k = − ( 1 2 log 2 1 2 + 1 2 log 2 1 2 ) = 1 ] [Ent(D) = - \sum\limits_{k = 1}^{\left| y \right|} {
{p_k}{
{\log }_2}{p_k}} = - (\frac{1}{2}{\log _2}\frac{1}{2} + \frac{1}{2}{\log _2}\frac{1}{2}) = 1] [Ent(D)=−k=1∑∣y∣pklog2pk=−(21log221+21log221)=1]
(2)信息增益
假定离散属性a有V种可能的取值 { a 1 , a 2 , ⋯ , a v } \left\{ {
{a^1},{a^2}, \cdots ,{a^v}} \right\} {
a1,a2,⋯,av},使用a可将样本划分为V个分支节点,其中第V个节点 D v {D^v} Dv包含了D在属性a上取值为 a v {a^v} av的样本。我们可计算出各个节点的信息熵,赋予各个节点不同的权重,计算出属性a的信息增益。信息增益定义为:
[Gain(D,a) = Ent(D) - \sum\limits_{v = 1}^V {\frac{
{\left| {
{D^v}} \right|}}{
{\left| D \right|}}} Ent({D^v})]
信息增益越大,使用属性a进行划分获得的纯度提升越大。
以“脐部”为例,它有三个可能的取值:{凹陷,稍凹,平坦}。使用该属性可将D划分为3个子集:
D 1 {D^1} D1(脐部=凹陷), D 2 {D^2} D2(脐部=稍凹), D 3 {D^3} D3(脐部=平坦
子集1包含编号为{1,2,3,14}的4个样例,其中好瓜的比例 p 1 = 3 4 {p_1} = \frac{3}{4} p1=43,坏瓜的比例 p 2 = 1 4 {p_2} = \frac{1}{4} p2=41;子集2包含编号{6,7,15,17}的4个样例,其中好瓜的比例 p 1 = 1 2 {p_1} = \frac{1}{2} p1=21,坏瓜的比例 p 2 = 1 2 {p_2} = \frac{1}{2} p2=21;子集3包含编号{10,16}的2个样例,其中好瓜的比例 p 1 = 0 {p_1} = 0 p1=0,坏瓜的比例${p_2} = 1。于是可以计算出3个节点的信息熵:
[ E n t ( D 1 ) = − ( 3 4 log 2 3 4 + 1 4 log 2 1 4 ) = 0.881 , [\begin{array}{l} Ent({D^1}) = - (\frac{3}{4}{\log _2}\frac{3}{4} + \frac{1}{4}{\log _2}\frac{1}{4}) = 0.881,\\ \end{array} [Ent(D1)=−(43log243+4