【机器学习】决策树与随机森林

机器学习中有两类的大问题,分类聚类。下面要介绍的是分类算法中的决策树随机森林,它们是常见的分类算法。分类,什么是分类?首先要有大量对象,并且知道这些样本对象的特征和所属类别,把这些数据告诉计算机,让计算机总结分类的原则。形成一个分类模型,这样我们可以通过这个分类模型,对未知分类的样本交给他完成分类过程。

下面我们可以看看决策树的一个例子。下图是某女青年在决定相亲对象是时会进行的一系列决策过程。首先看对方的年龄,如果大于30岁,直接pass,如果小于等于30岁,就再看对方长得如何,长得丑,就不见,长的好看的,再继续看它的收入……以此类推,最终可以得到一颗决策树。而任何一个样本(男性)在这棵树上走一遍之后,都能够输出“见”或者“不见”的结果。那其实这就是一个分类的过程了。我们首先通过大量样本,训练出这颗决策树,先不管它分类的准确率,之后其他的样本都能通过这棵树找到自己对应的类别/结果(在这里就是见面或者不见面)。

 


我们喂给计算机的数据,为什么它就可以得到上面那棵决策树?为什么要以年龄作为分割的根节点?要什么要以长相为左子树的根节点?要解开这个谜题,我们需要先了解几个概念。


信息量

信息是不是可以量化?直觉上而言是可以的,不然怎么可能我们觉得有些人说的废话特别多,有些人一语中的,话中有话,一句话就包含了很大的信息量。用计算机的二进制当例子,将信息看成是一个状态,1bit有2个状态,2bit有4个状态,Nbit有2^N个可能状态。那么怎么定义信息量呢?信息论的创始人香农给出了这样一个定义。一个事件的信息量就是这个事件发生的概率的负对数。也就是-log2(P)。显然这个式子的数学性质是比较符合信息量的定义的。为什么跟概率有关?想想我跟你说明天太阳从东方升起,跟明天某一只股票会涨停。显然前者是一句废话,因为它是必定会发生的。后者就不一样了,它包含了很大的不确定性,而通过我告诉你的信息,这件事得到了确定,它包含的信息量是很大的。概率的取值为0到1之间,那么取对数之后,取值在负无穷到0,我们给它加个负号,就变成了0到正无穷的取值,因为信息量至少为0吧,不可能告诉你了一些东西之后反而丢失了信息。

 

信息熵

信息熵的数学定义如下:


其中-log2(P)是我们上面所说的信息量。每一个信息量乘上它发生的概率,做一个累加,不难看出这是求期望的公式。信息熵是跟一条信息的可能性数量有关系的。每个可能事件的发生都有个概率。所以数学上,信息熵其实是信息量的期望。从化学上对熵的定义我们可以知道,熵越大说明混乱程度越高,熵越小说明混乱程度越低,那么构造一颗决策树,就是为了让决策树的叶子节点的熵降低直到为0,也就是说所有叶子节点的分类都是明确的,它的信息没有任何不确定性,这时我们就完成了决策树的构建。


信息增益

那知道了信息熵之后我们可以就可以得到决策树的构造过程。构造一颗决策树的基本想法是随着树深度的增加,节点的熵迅速的降低。降低的速度越快越好,这样我们才有望得到一颗高度最矮的决策树。于是我们每一次做切割,都希望整棵树的熵下降得越快越好。一开始我们知道的信息只有每一个数据对应哪一个分类,这是一开始总的信息熵。这时候我们要开始切割了。我们枚举每一个字段,计算它们做了切割之后的信息熵,将这个信息熵和未做分割前的信息熵做一个比较,也就说用切割前总信息熵减去切割后总信息熵,得到的值我们称之为信息增益。也就是一刀下去之后,我们的信息更加明朗的程度。将信息熵下降地最多,也就是信息增益最大的的那一个信息作为我们的分割字段。如果字段是连续值(比年龄是1到n之间的一个值),那么我们还要选择一个值来做切割。选择哪个值呢?最简单粗暴的方法,我们可以先对该字段的值做一个排序,然后做n-1次切割,找到信息熵最小的点即可。

 

信息增益率

决策树模型中的ID3算法使用的就是上述信息增益的方法。但它属于比较的老的一个算法。

假设我们的样本数据有id值,正常情况下每个样本的id都是不一样的,假设有n个。那么使用信息增益来计算的话,这样的话id有n个值,每个值的个数都为1,可知其信号量为log2(1)为0。也就是说,使用上面的ID3算法的话,对id的分类得到的信息增益是最大的。可是实际情况中,id对我们的决策有影响吗?约会跟对方的id号有关系吗?并没有,我们不希望将这样的特征作为分割的根节点。这时候就轮到信息增益率出场了。不难发现,对于这种有很多种情况,并且每种情况的样本都比较少的特征,虽然得到的信息增益很大,但是呢,它自身的信息熵更大(因为有多种情况信息的不确定性大),如果我用信息增益除以它自身的信息熵,得到的会是一个比较小的数,因此改用信息增益率代替了信息增益来决定用来切割的特征,就得到了决策树模型中的C4.5算法

 

预剪枝与后剪枝

       要训练得到一棵决策树并不难,但是有时候我们可能得到一棵高度很高的树,对某些类分的太细,也就是说,我们的数据过拟合了。关于决策树的过拟合,我们可以有两种解决方案,分别是预剪枝和后剪枝。

预剪枝:在构建决策树的过程中,提前停止。

后剪枝:构建好决策树之后再对决策树进行剪枝。

一般来说,后剪枝得到的决策树欠拟合风险比较小,泛化能力优于预剪枝。但是其训练时间开销比预剪枝要大得多,因为他需要自底向上地对所有非叶结点逐一考察。预剪枝比较容易实现,比如说,可以限制树的高度,但预剪枝得到的模型有可能是欠拟合的。实际应用中可以通过调参数来得到比较合适的模型。

 

随机森林

随机森林是一个集成的算法。对于上面的决策树算法,可能说一棵树的表达效果并不是很好,它有可能过拟合,有可能欠拟合,或者是对一些噪声(异常数据,错的或者比较离谱的数据)这会使得我们的决策树看起来比较奇怪。切分切的比较乱。

你可能会想,一颗决策树不行,那么如果我多构造几棵树呢?总不会每一棵树都是坏的模型吧。这时再通过少数服从多数的投票模型,我们可以得到样本的正确分类。但是我只有一堆数据,如果每棵树训练出来都一模一样也没有意义啊,怎么得到不一样的决策树呢?随机森林的随机性就在这里登场啦。我们在选数据的时候,并不会每一个数据都选出来,而是进行有放回的随机采样。这样的话,那些噪声我们有可能取到,也有可能取不到,但是取到的概率是偏小的。棵树我们都这样构造的话,不同的样本最终训练出n棵不同的决策树,由于噪声出现的概率一般比较小,那么最终我们得到的n棵决策树中,含有噪声的决策树会比较少,最终我们通过投票得到的分类,准确率会比单棵决策树高的多。除此之外,随机森林也可以很好地解决决策树过拟合的问题。面给出一个例子,可以看出随机森林的强大性。


随机森林的三棵决策树,阴影表示一种分类,另外一边则是另一种分类。

最终得到的分类模型:


如图所示,是一个由三棵决策树组成的随机森林,三棵决策树得到的都是简单的切分,但是通过投票之后,最终可以将三组简单模型组合成一个复杂模型,而这个模型在单个决策树上是实现不出来的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值