决策树算法梳理(从原理到示例)

决策树是最经典的机器学习模型之一。它的预测结果容易理解,易于向业务部门解释,预测速度快,可以处理类别型数据和连续型数据。本文的主要内容如下:

  • 信息熵及信息增益的概念,以及决策树的节点分裂的原则;
  • 决策树的创建及剪枝算法;
  • scikit-learn中决策树算法的相关参数;
  • 使用决策树预测泰坦尼克号幸存者示例;
  • scikit-learn中模型参数选择的工具及使用方法;
  • 聚合(融合)算法及随机森林算法的原理。

注意:本文内容篇幅超长,请各位客官根据需要选择性“品尝”。
开始正文

1 算法原理

决策树是一个类似于流程图的树结构,分支节点表示对一个特征进行测试,根据测试结果进行分类,树叶节点代表一个类别。这里面最核心的问题是,在创建决策树的过程中,要先对哪个特征进行分裂?要回答这个问题,我们需要从信息的量化谈起。

1.1 信息增益

我们天天谈论信息,那么信息要怎么样来量化呢?1948年,香农在《通信的数学原理》中提出了信息熵(Entropy)的概念,从而解决了信息的量化问题。香农认为,一条信息的信息量和它的不确定性有直接关系。一个问题的不确定性越大,要搞清楚这个问题,需要了解的信息就越多,其信息熵就越大。信息熵的计算公式为:
H ( X ) = − ∑ x ∈ X P ( x ) l o g 2 P ( x ) {H(X)=- \sum_{x \in X}P(x)log_2P(x)} H(X)=xXP(x)log2P(x),其中 P ( x ) {P(x)} P(x)表示事件x出现的概率。
例如,一个盒子里分别有5个白球和5个红球,随机取出一个球。问:这个球是白的还是红的?这个问题的信息量有多大?由于红球和白球出现的概率都是1/2,代入信息熵公式,可以得到其信息熵为:
H ( X ) = − ( 1 2 l o g 2 1 2 + 1 2 l o g 2 1 2 ) = 1 {H(X)=-(\frac{1}{2} log_2\frac{1}{2} + \frac{1}{2} log_2\frac{1}{2})=1} H(X)=(21log221+21log221)=1
即这个问题的信息量是1 bit。对,信息量的单位是比特!我们要确定这个球是红的还是白的,只需要1 比特的信息就够了。对于极端的例子,对于确定的事件,其概率为1,其信息熵为0,因为我们不需要再获取任何新的信息就能知道结果。
回到决策树的构建问题上来,当我们要构建一棵决策树时,应该优先选择哪个特征来划分数据集(分裂节点)呢?答案是:遍历所有的特征,分别计算,使用这个特征划分数据集前后信息熵的变化值,然后选择信息熵变化幅度最大的那个特征,来优先作为划分数据集(分裂节点)的依据。即选择信息增益最大的特征作为分裂节点。

那么,信息增益的物理意义是什么呢?
如果以概率P(x)为横坐标,以信息熵(Entropy)为纵坐标,把信息熵和概率的函数关系 E n t r o p y = − P ( x ) l o g 2 P ( x ) {Entropy=- P(x)log_2P(x)} Entropy=P(x)log2P(x)在二维坐标系上画出来就可以看出(标有“Entropy”的曲线),当概率P(x)越接近0或越接近1时,信息熵的值越小,其不确定性越小,即数据越“纯”。比如说当概率为1时,数据是最“纯净的”,已经消除了不确定性,其信息熵为0。我们在选择特征的时候,选择信息增益最大的特征,在物理意义上就是让数据尽量往更纯净的方向上变换。因此,信息增益是用来衡量数据变得更有序、更纯净的程度的指标。
entropy

熵是热力学中表征物质状态的参量之一,其物理意义是体系混乱程度的度量,被香农借用过来作为数据的混乱程度和信息量的度量。著名的熵增原理是这样描述的:孤立热力学系统的熵不减少,总是增大或者不变。

一个孤立系统不可能朝低熵的状态发展,即不会变得有序。用大白话讲就是,如果没有外力的作用,这个世界将是越来越无序的。人活着,在于尽量让熵变低,即让世界变得更有序,降低不确定性。当我们消费资源时,是一个增熵的过程。我们把有序的食物变成了无序的垃圾。例如,我们在写博客或者读博客的过程可以理解为减熵过程。我们通过写作和阅读,减少了不确定的信息,从而实现了减熵的过程。人生价值的实现在于消费资源(增熵过程)来获取能量,经过自己的劳动付出(减熵过程)让世界变得更加纯净有序。信息增益(减熵量-增熵量)就是衡量人生价值的尺度。

1.2 决策树的创建

决策树的构建过程,就是从训练数据集中归纳出一组分类规则,使它与训练数据矛盾较小的同时具有较强的泛化能力。有了信息增益来量化地选择数据集的划分特征,使决策树的创建过程变得更加容易了,决策树的创建基本上分为:

  • 计算数据集划分前的信息熵。
  • 遍历所有未作为划分条件的特征,分别计算根据每个特征划分数据集后的信息熵。
  • 选择信息增益最大的特征,并使用这个特征作为数据划分节点来划分数据。
  • 递归地处理被划分后的所有子数据集,从未被选择的特征里继续选择最优数据划分特征来划分子数据集。

问题来了,递归过程什么时候结束呢?一般来讲,有两个终止条件,一是所有的特征都用完了,即没有新的特征可以用来进一步划分数据集。二是划分后的信息增益足够小了,这个时候就可以停止递归划分了。针对这个停止条件,需要事先选择信息增益的阈值来作为结束递归的条件。
使用信息增益作为特征选择指标的决策树构建算法,称为ID3算法。以后还会延伸到C4.5、CART等算法。

1.2.1 离散化

细心的人可能会发现一个问题:如果一个特征是连续值怎么办呢?比如说年龄,这个时候怎么用决策树来建模呢?答案是:离散化。通俗地说就是分区间、分桶,比如10岁到25岁的年龄段标识为类别A,26岁到35岁的年龄段标识为类别B等等。经过离散处理后,就可以用来构建决策树了。要离散化成几个类别,这个往往和具体的业务相关。

1.2.2 正则项

最大化信息增益来选择特征,在决策树的构建过程中,容易造成优先选择类别最多的特征进行分类。举一个极端的例子,我们把某个产品的唯一标识符ID作为特征之一加入到数据集中,那么构建决策树时,就会优先选择产品ID来作为划分特征,因为这样划分出来的数据,每个叶子节点只有一个样本,划分后的子数据集最“纯净”,其信息增益最大。但是这并不是我们希望看到的结果。
解决办法是,计算划分后的子数据集的信息熵时,加上一个与类别个数成正比的正则项,来作为最后的信息熵。这样,当算法选择的某个类别较多的特征时,由于受到类别个数的正则项惩罚,导致最终的信息熵也比较大。这样通过合适的参数,可以使算法训练得到某种程度的平衡。
另外一种解决办法是使用信息增益比来作为特征选择的标准。这就是C4.5算法构建标准。

1.2.3 基尼不纯度

既然信息熵是衡量信息不确定性的指标,实际上也是衡量信息“纯度”的指标。除信息熵外,基尼不纯度(Gini impurity)也是衡量信息不纯度的指标,其计算公式如下:
G i n i ( D ) = ∑ x ∈ X P ( x ) ( 1 − P ( x ) ) = 1 − ∑ x ∈ X P ( x ) 2 {Gini(D)=\sum_{x \in X} P(x)(1-P(x))=1-\sum_{x \in X}P(x)^2} Gini(D)=xXP(x)(1P(x))=1xX

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值