通俗易懂--决策树算法、随机森林算法讲解(算法+案例)

1.决策树

决策树模型demopython

随机森林模型demogit

1.1从LR到决策树

相信你们都作过用LR来进行分类,总结一下LR模型的优缺点:github

优势

  • 适合须要获得一个分类几率的场景。算法

  • 实现效率较高。编程

  • 很好处理线性特征。bootstrap

缺点

  • 当特征空间很大时,逻辑回归的性能不是很好。微信

  • 不能很好地处理大量多类特征。dom

  • 对于非线性特征,须要进行转换。机器学习

以上就是LR模型的优缺点,没错,决策树的出现就是为了解决LR模型不足的地方,这也是咱们为何要学习决策树的缘由了,没有任何一个模型是万能的。编程语言

决策树的优势

  • 模拟人的直观决策规则。

  • 能够处理非线性特征。

  • 考虑了特征之间的相互做用。

其实用一下图片能更好的理解LR模型和决策树模型算法的根本区别,咱们能够思考一下一个决策问题:是否去相亲,一个女孩的母亲要给这个女海介绍对象。

image

你们都看得很明白了吧!LR模型是一古脑儿的把全部特征塞入学习,而决策树更像是编程语言中的if-else同样,去作条件判断,这就是根本性的区别。

1.2“树”的成长过程

决策树基于“树”结构进行决策的,这时咱们就要面临两个问题 :

  • “树”怎么长。

  • 这颗“树”长到何时停。

弄懂了这两个问题,那么这个模型就已经创建起来了,决策树的整体流程是“分而治之”的思想,一是自根至叶的递归过程,一是在每一个中间节点寻找一个“划分”属性,至关于就是一个特征属性了。接下来咱们来逐个解决以上两个问题。

这颗“树”长到何时停

  • 当前结点包含的样本全属于同一类别,无需划分;例如:样本当中都是决定去相亲的,属于同一类别,就是无论特征如何改变都不会影响结果,这种就不须要划分了。

  • 当前属性集为空,或是全部样本在全部属性上取值相同,没法划分;例如:全部的样本特征都是同样的,就形成没法划分了,训练集太单一。

  • 当前结点包含的样本集合为空,不能划分。

1.3“树”怎么长

在生活当中,咱们都会碰到不少须要作出决策的地方,例如:吃饭地点、数码产品购买、旅游地区等,你会发如今这些选择当中都是依赖于大部分人作出的选择,也就是跟随大众的选择。其实在决策树当中也是同样的,当大部分的样本都是同一类的时候,那么就已经作出了决策。

咱们能够把大众的选择抽象化,这就引入了一个概念就是纯度,想一想也是如此,大众选择就意味着纯度越高。好,在深刻一点,就涉及到一句话:信息熵越低,纯度越高。我相信你们或多或少都据说过“熵”这个概念,信息熵通俗来讲就是用来度量包含的“信息量”,若是样本的属性都是同样的,就会让人以为这包含的信息很单一,没有差别化,相反样本的属性都不同,那么包含的信息量就不少了。

一到这里就头疼了,由于立刻要引入信息熵的公式,其实也很简单:

image

Pk表示的是:当前样本集合D中第k类样本所占的比例为Pk。

信息增益

废话很少说直接上公式:

image

看不懂的先无论,简单一句话就是:划分前的信息熵--划分后的信息熵。表示的是向纯度方向迈出的“步长”。

1.3.1ID3算法

解释:在根节点处计算信息熵,而后根据属性依次划分并计算其节点的信息熵,用根节点信息熵--属性节点的信息熵=信息增益,根据信息增益进行降序排列,排在前面的就是第一个划分属性,其后依次类推,这就获得了决策树的形状,也就是怎么“长”了。

若是不理解的,能够查看我一下分享的示例,结合我说的,包你看懂:

1.https://www.wailian.work/images/2018/12/11/image39e7b.png

2.https://www.wailian.work/images/2018/12/11/image61cdc.png

3.https://www.wailian.work/images/2018/12/11/image9e194.png

4.https://www.wailian.work/images/2018/12/11/image09288.png

不过,信息增益有一个问题:对可取值数目较多的属性有所偏好,例如:考虑将“编号”做为一个属性。这就引出了另外一个 算法C4.5。

1.3.2C4.5

为了解决信息增益的问题,引入一个信息增益率:

image

属性a的可能取值数目越多(即V越大),则IV(a)的值一般就越大。信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。不过有一个缺点:

  • 缺点:信息增益比偏向取值较少的特征。

使用信息增益比:基于以上缺点,并非直接选择信息增益率最大的特征,而是如今候选特征中找出信息增益高于平均水平的特征,而后在这些特征中再选择信息增益率最高的特征。

1.3.3CART算法

数学家真实聪明,想到了另一个表示纯度的方法,叫作基尼指数(讨厌的公式):

image

表示在样本集合中一个随机选中的样本被分错的几率。举例来讲,如今一个袋子里有3种颜色的球若干个,伸手进去掏出2个球,颜色不同的几率,这下明白了吧。Gini(D)越小,数据集D的纯度越高。

举个例子

假设如今有特征 “学历”,此特征有三个特征取值: “本科”,“硕士”, “博士”,

当使用“学历”这个特征对样本集合D进行划分时,划分值分别有三个,于是有三种划分的可能集合,划分后的子集以下:

1.划分点: “本科”,划分后的子集合 : {本科},{硕士,博士}

2.划分点: “硕士”,划分后的子集合 : {硕士},{本科,博士}

3.划分点: “硕士”,划分后的子集合 : {博士},{本科,硕士}}

对于上述的每一种划分,均可以计算出基于 划分特征= 某个特征值 将样本集合D划分为两个子集的纯度:

image

于是对于一个具备多个取值(超过2个)的特征,须要计算以每个取值做为划分点,对样本D划分以后子集的纯度Gini(D,Ai),(其中Ai 表示特征A的可能取值)

而后从全部的可能划分的Gini(D,Ai)中找出Gini指数最小的划分,这个划分的划分点,即是使用特征A对样本集合D进行划分的最佳划分点。到此就能够长成一棵“大树”了。

1.3.4三种不一样的决策树

  • ID3:取值多的属性,更容易使数据更纯,其信息增益更大。

    训练获得的是一棵庞大且深度浅的树:不合理。

  • C4.5:采用信息增益率替代信息增益。

  • CART:以基尼系数替代熵,最小化不纯度,而不是最大化信息增益。

1.4随机森林(Random Forest)

Bagging思想

Bagging是bootstrap aggregating。思想就是从整体样本当中随机取一部分样本进行训练,经过屡次这样的结果,进行投票获取平均值做为结果输出,这就极大可能的避免了很差的样本数据,从而提升准确度。由于有些是很差的样本,至关于噪声,模型学入噪声后会使准确度不高。

举个例子

假设有1000个样本,若是按照之前的思惟,是直接把这1000个样本拿来训练,但如今不同,先抽取800个样原本进行训练,假如噪声点是这800个样本之外的样本点,就颇有效的避开了。重复以上操做,提升模型输出的平均值。

随机森林

RandomForest(随机森林)是一种基于树模型的Bagging的优化版本,一棵树的生成确定仍是不如多棵树,所以就有了随机森林,解决决策树泛化能力弱的特色。(能够理解成三个臭皮匠顶过诸葛亮)

而同一批数据,用一样的算法只能产生一棵树,这时Bagging策略能够帮助咱们产生不一样的数据集。Bagging策略来源于bootstrap aggregation:从样本集(假设样本集N个数据点)中重采样选出Nb个样本(有放回的采样,样本数据点个数仍然不变为N),在全部样本上,对这n个样本创建分类器(ID3\C4.5\CART\SVM\LOGISTIC),重复以上两步m次,得到m个分类器,最后根据这m个分类器的投票结果,决定数据属于哪一类。

总的来讲就是随机选择样本数,随机选取特征,随机选择分类器,创建多颗这样的决策树,而后经过这几课决策树来投票,决定数据属于哪一类(投票机制有一票否决制、少数服从多数、加权多数)

优势:

  • 在当前的不少数据集上,相对其余算法有着很大的优点,表现良好。

  • 它可以处理很高维度(feature不少)的数据,而且不用作特征选择(由于特征子集是随机选择的)。

  • 在训练完后,它可以给出哪些feature比较重要。

  • 训练速度快,容易作成并行化方法(训练时树与树之间是相互独立的)。

  • 在训练过程当中,可以检测到feature间的互相影响。

  • 对于不平衡的数据集来讲,它能够平衡偏差。

  • 若是有很大一部分的特征遗失,仍能够维持准确度。

缺点:

  • 随机森林已经被证实在某些噪音较大的分类或回归问题上会过拟合。

  • 对于有不一样取值的属性的数据,取值划分较多的属性会对随机森林产生更大的影响,因此随机森林在这种数据上产出的属性权值是不可信的。

1.5Python代码

决策树模型demo

随机森林模型demo

寻觅互联网,少有机器学习通俗易懂之算法讲解、案例等,项目立于这一问题之上,整理一份基本算法讲解+案例于文档,供你们学习之。通俗易懂之文章亦不能够面概全,但凡是有不正确或争议之处,望告知,自当不吝赐教!

.

.

.

.

image

欢迎添加微信交流!请备注“机器学习”。

相关文章
相关标签/搜索