精华内容
下载资源
问答
  • 随机决策树方法总结,鲁明羽,肖智博,随机决策树(Random Decision Tree)作为一种不含有任何属性选择的决策树构建方法,不仅可以作为一种分类和回归方法使用,还可以作为集成��
  • Vol.45 No.9 计算机与数字工程 总第335 期 1802 Computer & Digital Engineering 第45 卷 2017 年第9 期 基于改进随机决策树算法的分布式数据挖掘 石红姣 商洛学院 商洛 726000 摘 要 随着大数据时代带来的数据量...
  • 随机决策树改进算法在大数据上的设计与实现,赵梦琪,李文生,随着互联网技术的快速发展,人们积累的数据量越来越大,运用机器学习算法挖掘数据中的价值成为研究热点。但是大数据量级和维度的
  • 文章提出一种基于属性重要度的随机决策树构造算法ASRDT,该算法利用粗糙集理论计算每个属性的属性重要度,提升重要属性的影响因子,使得建树过程中随机选择属性时,不同属性之间的区分度得以体现,从而显著提高了...
  • 最新决策树随机森林的Python实现代码,适合新手小白
  • 决策树随机森林算法教程、源代码事例,已经关于决策树随机森林算法的衍生混合算法代码
  • 传统的决策树分类方法(如ID3和C4.5),对于相对小的...采用了一种基于随机模型的决策树算法,在保证分类准确率的基础上,减少了对系统资源的占用,并通过对比实验表明该算法在对计算机入侵数据的分类上有着出色的表现。
  • 合肥工业大学2021年数据结构课程设计--随机决策树的生成。在test文件夹中有测试数据以及生成的决策树结果。本人课程设计得分优
  • 第六章 多分类、决策树分类、随机森林分类 第七章 分类评估、聚类 第八章 密度聚类、谱聚类 第九章 深度学习、TensorFlow安装和实现 第十章 TensorFlow深入、TensorBoard 十一章 DNN深度神经网络手写图片识别 十二章...
  • 基于改进随机决策树算法的分布式数据挖掘.pdf
  • 初始决策树随机森林 初始决策树随机森林 初始决策树随机森林
  • 主要介绍了Python决策树随机森林算法,集合实例形式详细分析了决策树随机森林算法的概念、原理及Python相关实现技巧与注意事项,需要的朋友可以参考下
  • 决策树随机森林

    万次阅读 多人点赞 2018-07-13 21:27:04
    一、 决策树的简介  决策树是一种基本的分类与回归方法,学习通常包含三个步骤:特征选择、决策树的生成和决策树的剪枝。  决策树学习本质是从训练数据集中归纳出一组分类规则;决策树学习的损失函数通常是正则...

    一、 决策树的简介

        决策树是一种基本的分类回归方法,学习通常包含三个步骤:特征选择决策树的生成决策树的剪枝

        决策树学习本质是从训练数据集中归纳出一组分类规则;决策树学习的损失函数通常是正则化的极大似然函数,学习策略是由训练数据集估计条件概率模型。

        决策树学习的算法通常是一个递归地选择最优特征,并根据该特征进行分割。这一过程对应着决策树的构建,也对应着特征空间的划分。使得划分之后的各个子集能够被基本分类,那么构建叶节点;否则继续递归划分。

        决策树可能发生过拟合,因此需要剪枝,从下而上进行,减去过于细分的结点,使其会退到父结点。

    根节点

    非叶子节点(决策点):代表测试的条件,对数据属性的测试

    叶子节点:代表分类后所获得的分类标记

    分支:代表测试的结果

     

     

       先构建决策树(训练阶段),再使用决策树(分类阶段)

     

    二、特征选择

        特征选择的准则:信息增益信息增益比。我们选择信息增益最大的那个分割。

    A.熵(entropy)与基尼(Gini)系数

        熵:物体内部的混乱程度或不确定性,熵值越大,则物体内部的混乱程度越大;反之,熵值越低,物体内部纯净度越高

        由熵的公式可知,当物体内部某个类的概率 较小时,则 (负数)的绝对值就越大。由此可知,当物体或集合内部的类别非常多时(即物体内部混乱程度很高),每个类别的概率就会很小,就会导致物体的熵值很高。

     

    三、决策树的生成(目的:得到熵值降低速度最快的决策树)

        构造决策树的基本思想:随着树深度的增加,节点的迅速地降低。熵降低的速度(引入信息增益信息增益比的概念)越快越好,以便得到一棵高度最矮的决策树

     

    案例

     

        首先,确定根节点,分别假设outlook、temperature、humidity、windy为根节点,求出对应的熵,从而得到信息熵

        然后,再与原始熵对比,得到信息增益信息增益率,从而确定根节点;

        其次,通过递归的方法构造出决策树的其他节点;

        最后,决策树构造完成后,通过评价函数(目标函数)来判断当前的决策树的好坏程度。

        下面计算假设outlook为根节点时对应的熵值

    outlook=sunny时,entropy==0.971

    outlook=overcast时,entropy=0

    outlook=rainy时,entropy==0.971

        根据历史统计数据,outlook取sunny、overcast、rainy的概率分别为5/14、4/14、5/14,所以当outlook为根节点时的信息熵为:

        根据历史数据,新的一天打球的概率是9/14,不打的概率是5/14,则原始熵值(固有熵值)

       信息增益为:

    gain(outlook):0.940-0.693=0.247

       同理可以计算出:

    gain(temperature)=0.029

    gain(humidity)=0.152

    gain(windy)=0.048

        综上所述,gain(outlook)最大(即outlook在第一步使得系统的信息熵下降得最快),所以决策树的根节点取outlook

     

    ID3算法:信息增益(传统算法)

       --通常情况下,仅仅根据信息增益判断是不靠谱的

       --缺点:当某个特征下的属性非常稀疏(即类别很多),每个属性对应样本的个数又很少时,选用该节点计算熵值时,显然可以使得熵值下降最快,但是该属性很有可能与问题无关,从而引出信息增益率

    C4.5算法:信息增益率

       --

       -- C4.5算法是ID3算法的扩展

    CART算法:Gini系数

    评价函数(目标函数):

       --越小越好,类似损失函数

       -- Nt:每个叶子节点包含的样本数

       -- H(t):叶子节点的自身熵值

        决策树构造完成后,通过评价函数(目标函数)来判断当前的决策树的好坏程度。

        决策树不仅可以处理像上述的离散型属性,也能够处理连续型的属性。首先将连续型属性离散化,把连续型属性的值分成不同的区间,依据是比较各个分裂点的信息增益值的大小。

     

    四、决策树的剪枝(目的:得到高度最矮的决策树)

        如果决策树考虑了所有的训练数据集,得到的决策树将会过于庞大。虽然这个决策树对于训练数据集的拟合概率为100%,但是由于过分考虑所有的数据,将数据切得太碎太碎了,这样就会使得决策树学习到一些噪音点、错误点,出现过拟合的现象。

        过拟合的主要原因在于构建决策树时过于复杂。

        决策树的剪枝通过极小化决策树整体的损失函数或代价函数来实现。

    4.1 预剪枝

           在构建决策树的过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶子节点。

       --最小样本数

       --最大深度

    4.2 后剪枝

           决策树构建好后,然后自底向上地对非叶子节点进行考察,若将该节点对应的子树替换为叶子节点能带来决策树泛化性能提升,则将该子树替换为叶子节点。

       --

       --叶子节点数越多,损失越大

       -- a:人工设置,该值越大,说明叶子节点数的权重越大;该值越小,叶子节点数影响较小

       -- Tleaf:叶子节点数

     

    五、随机森林

    采样方式

    Bootstraping:有放回采样

    Bagging:有放回采样n个样本

     

        对于一个测试数据,将它投入到随机森林中的不同决策树中,会得到不同的测试结果。若问题是一个分类问题,则可以通过求众数来得出测试数据的类别;若问题是一个回归问题,则可以通过求平均值得出测试数据的值。

     

    双重随机性

        数据样本采样的随机性:通过从训练数据集中有放回的随机采样,构造出很多的、不同的决策树

       --目的:使得某些决策树选不到异常样本

    数据特征采样的随机性:通过从特征中的随机采样(无放回,特征不能重复)构造随机森林

       --目的:使得某些决策树选不到异常特征

    更多AI资源请关注公众号:大胡子的AI

    欢迎各位AI爱好者加入群聊交流学习:882345565(内有大量免费资源哦!)

    版权声明:本文为博主原创文章,未经博主允许不得转载。如要转载请与本人联系。

    展开全文
  • 该内容共包含四部分代码,包含用python的sklearn包实现对kaggle上面泰坦尼克号的生存预测
  • 决策树随机森林初探

    万次阅读 2018-08-19 13:11:04
    决策树的最关键的问题,如何选择划分属性的顺序才能使得决策树的平均性能最好 举例: 这堆西瓜的熵是Ent(D),按照某种属性划分之后这堆西瓜的熵是Ent(D′),Ent(D′) &...

    1、特征选择的几种方式

    2、几种常见的决策树算法

    3、过拟合处理——剪枝

    4、连续值属性特征的处理

    5、Bagging(代表:随机深林)

    6、Boosting(提升)(代表:AdaBoost、GBDT、XGBoost)

    7、决策树算法小结

    决策树的优势力与劣势

    1、特征选择的几种方式

    决策树的最关键的问题,如何选择划分属性的顺序才能使得决策树的平均性能最好

    举例:


    这堆西瓜的熵是Ent(D),按照某种属性划分之后这堆西瓜的熵是Ent(D′),Ent(D′) <= Ent(D。这两者的差,就是这个属性对于这堆西瓜有序化的贡献。

    1)信息熵(Entropy)


    熵(Entropy:在物理学上表示物质的混乱程度,在信息学上可以作类比。熵增加,表示信息更加混乱,熵减,表示信息更加有序。

    2)信息增益

    计算出当前属性集合{色泽,根蒂,敲声,纹理,脐部,触感}中每个属性的信息增益。
    先计算根节点的信息熵:



    可见:属性纹理的信息增益最大,于是它被选为划分属性,给出基于纹理对根节点进行划分的结果:

    然后,决策树学习算法将对每个分支节点做进一步划分。以上图第一个分支节点(纹理=清晰)为例,该节点包含的样例集合D1中有编号为{1,2,3,4,5,6,8,10,15}的9各样例,可用属性集合为{色泽,根蒂,敲声,脐部,触感},少了一个纹理属性。

    3)信息增益率

    4)自有信息


    根据上表数据计算自信息(属性a的可能值数目越多(即V越大),则IV(a)的值通常会越大):

    5)基尼系数


    直观来说,Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率。因此,Gini(D)越小,则数据集D的纯度越高,这和信息增益(比)是相反的。于是,对于属性集合A中,选择那个使得划分后基尼系数最小的属性作为最优划分属性。
    例如:

    基尼系数和熵之半的曲线非常接近,仅仅在45度角附近误差稍大。因此,基尼系数可以做为熵模型的一个近似替代。

    2、几种常见的决策树算法

    ID3,C4.5主要应用于分类任务,CART树,主要应用于预测任务

    更多的应用场景:

    ID3

    奥卡姆剃刀定律:当你有两个处于竞争地位的理论能得出同样的结论,那么简单的那个更好。
    ID3算法的核心思想就是以【信息增益】来度量属性的选择,选择分裂后信息增益最大的属性进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策空间。

    ID3的缺点:
    1. 永远可以把N个数据分成100%纯洁的N组
    2. 如果在『 期』这个条件下做分裂,就GG

    C4.5

    C4.5是在ID3的基础上改进而提出的。ID3采用的信息增益度量存在一个缺点,它一般会优先选择有较多属性值的Feature,因为属性值多的Feature会有相对较大的信息增益?(信息增益反映的给定一个条件以后不确定性减少的程度,必然是分得越细的数据集确定性更高,也就是条件熵越小,信息增益越大).为了避免这个不足C4.5中是用【信息增益比率(gain ratio)】来作为选择分支的准则。信息增益比率通过引入一个【自信息】的项来惩罚取值较多的Feature。除此之外,C4.5还弥补了ID3中不能处理特征属性值连续的问题。但是,对连续属性值需要扫描排序,会使C4.5性能下降,

    C4.5并不一个算法,而是一组算法—C4.5,非剪枝C4.5和C4.5规则。
    优点:C4.5算法产生的分类规则易于理解,准确率较高。
    缺点:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导致算法的低效。此外,C4.5只适合于能够驻留于内存的数据集,当训练集大得无法在内存容纳时程序无法运行。

    CART

    (Classification and Regression tree)分类回归树

    ID3中根据属性值分割数据,之后该特征不会再起作用,这种快速切割的方式会影响算法的准确率。CART是一棵二叉树,采用二元切分法,每次把数据切成两份,分别进入左子树、右子树。而且每个非叶子节点都有两个孩子,所以CART的叶子节点比非叶子多1。相比ID3和C4.5,CART应用要多一些,既可以用于分类也可以用于回归。CART分类时,使用【基尼指数(Gini)】来选择最好的数据分割的特征,gini描述的是纯度,与信息熵的含义相似。CART中每一次迭代都会降低GINI系数,回归时使用均方差作为loss function。

    1)、CART分类树建立算法的具体流程

    下面我们看看CART分类树建立算法的具体流程:

        算法输入是训练集D,基尼系数的阈值,样本个数阈值。

        输出是决策树T。

        我们的算法从根节点开始,用训练集递归的建立CART树。

        1) 对于当前节点的数据集为D,如果样本个数小于阈值或者没有特征,则返回决策子树,当前节点停止递归。

        2) 计算样本集D的基尼系数,如果基尼系数小于阈值,则返回决策树子树,当前节点停止递归。

        3) 计算当前节点现有的各个特征的各个特征值对数据集D的基尼系数。

        4) 在计算出来的各个特征的各个特征值对数据集D的基尼系数中,选择基尼系数最小的特征A和对应的特征值a。根据这个最优特征和最优特征值,把数据集划分成两部分D1和D2,同时建立当前节点的左右节点,做节点的数据集D为D1,右节点的数据集D为D2.

        5) 对左右的子节点递归的调用1-4步,生成决策树。

        对于生成的决策树做预测的时候,假如测试集里的样本A落到了某个叶子节点,而节点里有多个训练样本。则对于A的类别预测采用的是这个叶子节点里概率最大的类别。

    2)、CART回归树建立算法的具体流程

    CART回归树和CART分类树的建立算法大部分是类似的,所以这里我们只讨论CART回归树和CART分类树的建立算法不同的地方。

        首先,我们要明白,什么是回归树,什么是分类树。两者的区别在于样本输出,如果样本输出是离散值,那么这是一颗分类树。如果果样本输出是连续值,那么那么这是一颗回归树。

        除了概念的不同,CART回归树和CART分类树的建立和预测的区别主要有下面两点:

        1)连续值的处理方法不同
        对于连续值的处理,我们知道CART分类树采用的是用基尼系数的大小来度量特征的各个划分点的优劣情况。这比较适合分类模型,但是对于回归模型,我们使用了常见的和方差的度量方式,这很好理解,被预测出错的越多,错的越离谱,均方差就越大,通过最小化均方差能够找到最靠谱的分枝依据。
        CART回归树的度量目标是,对于任意划分特征A,对应的任意划分点s两边划分成的数据集D1和D2,求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。表达式为:

        2)决策树建立后做预测的方式不同。
        对于决策树建立后做预测的方式,上面讲到了CART分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。而回归树输出不是类别,它采用的是用最终叶子的均值或者中位数来预测输出结果

    3、过拟合处理——剪枝

    完整的决策树并不是一棵分类预测新数据对象的最佳树。其原因是完整的决策树对Training Data描述过于“精确”。我们知道,随着决策树的生长,决策树分枝时所处理的样本数量在不断减少,决策树对数据总体代表程度在不断下降。在对根节点进行分枝时,处理的是全部样本,再往下分枝,则是处理的不同分组下的样本。可见随着决策树的生长和样本数量的不断减少,越深层处的节点所体现的数据特征就越个性化,可能出现如上推理规则:“年收入大于50000元且年龄大于50岁且姓名叫张三的人购买了此产品”。这种过度学习从而精确反映Training Data特征,失去一般代表性而无法应用于新数据分类预测的现象,叫过度拟合(Overfitting)或过度学习。那我们应该怎么办呢?修剪!

    常用的修剪技术有预修剪(Pre-Pruning)和后修剪(Post-Pruning)。

    预剪枝(pre-pruning):

    1、预剪枝就是在构造决策树的过程中,先对每个结点在划分前进行估计,若果当前结点的划分不能带来决策树模型泛华性能的提升,则不对当前结点进行划分并且将当前结点标记为叶结点。

    总结: 对比未剪枝的决策树和经过预剪枝的决策树可以看出:预剪枝使得决策树的很多分支都没有“展开”,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间开销。但是,另一方面,因为预剪枝是基于“贪心”的,所以,虽然当前划分不能提升泛华性能,但是基于该划分的后续划分却有可能导致性能提升,因此预剪枝决策树有可能带来欠拟合的风险。

    2、事先先指定决策树的最大深度,或最小样本量,以防止决策树过度生长。前提是用户对变量聚会有较为清晰的把握,且要反复尝试调整,否则无法给出一个合理值。注意,决策树生长过深无法预测新数据,生长过浅亦无法预测新数据。

    后剪枝(post-pruning):

    后剪枝就是先把整颗决策树构造完毕,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛华性能的提升,则把该子树替换为叶结点。

    对比预剪枝和后剪枝,能够发现,后剪枝决策树通常比预剪枝决策树保留了更多的分支,一般情形下,后剪枝决策树的欠拟合风险小,泛华性能往往也要优于预剪枝决策树。但后剪枝过程是在构建完全决策树之后进行的,并且要自底向上的对树中的所有非叶结点进行逐一考察,因此其训练时间开销要比未剪枝决策树和预剪枝决策树都大得多。

    决策树中的C4.5、C5.0、CHAID、CART和QUEST都使用了不同 剪枝策略。

    4、连续值属性特征的处理


    对于数据集中的属性“密度”,决策树开始学习时,根节点包含的17个训练样本在该属性上取值均不同。我们先把“密度”这些值从小到大排序:

    然后计算可能的属性分割点:

    下面开始计算t 取不同值时的信息增益:

    计算得到的各属性的信息增益值:

    比较能够知道纹理的信息增益值最大,因此,“纹理”被选作根节点划分属性,下面只要重复上述过程递归的进行,就能构造出一颗决策树:

    有一点需要注意的是:与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。

    5、Bagging(代表:随机深林)

    bagging方法bootstrap aggregating(自助聚集)的缩写,采用的是随机有放回的选择训练数据然后构造分类器,最后组合。

    随机深林

    整个随机森林算法的过程中,有两个随机过程:

    第一个: 【输入数据】是随机的从整体的训练数据中选取一部分作为一棵决策树的构建,而且是有放回的选取;
    第二个: 每棵决策树的构建所需的【特征】是从整体的特征集随机的选取的;

    这两个随机过程使得随机森林很大程度上避免了过拟合现象的出现。

    过程:

    1、从训练数据中选取n个数据作为训练数据输入,一般情况下n是远小于整体的训练数据N的,这样就会造成有一部分数据是无法被去到的,这部分数据称为袋外数据,可以使用袋外数据做误差估计。

    2、选取了输入的训练数据的之后,需要构建决策树,具体方法是每一个分裂结点从整体的特征集M中选取m个特征构建,一般情况下m远小于M。

    3、在构造每棵决策树的过程中,按照选取最小的基尼指数进行分裂节点的选取进行决策树的构建。决策树的其他结点都采取相同的分裂规则进行构建,直到该节点的所有训练样例都属于同一类或者达到树的最大深度。

    4、 重复第2步和第3步多次,每一次输入数据对应一颗决策树,这样就得到了随机森林,可以用来对预测数据进行决策。

    5、 输入的训练数据选择好了,多棵决策树也构建好了,对待预测数据进行预测,比如说输入一个待预测数据,然后多棵决策树同时进行决策,最后采用多数投票的方式进行类别的决策。

    随机森林算法的注意点:

    1、 在构建决策树的过程中是不需要剪枝的。
    2、 整个森林的树的数量和每棵树的特征需要人为进行设定。
    3、 构建决策树的时候分裂节点的选择是依据最小基尼系数的。

    随机森林有很多的优点:

    a. 在数据集上表现良好,两个随机性的引入,使得随机森林不容易陷入过拟合。

    b. 在当前的很多数据集上,相对其他算法有着很大的优势,两个随机性的引入,使得随机森林具有很好的抗噪声能力。

    c. 它能够处理很高维度(feature很多)的数据,并且不用做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。

    d. 在创建随机森林的时候,对generlization error使用的是无偏估计。

    e. 训练速度快,可以得到变量重要性排序。

    f. 在训练过程中,能够检测到feature间的互相影响。

    g 容易做成并行化方法。

    h. 实现比较简单。

    6、Boosting(提升)(代表:AdaBoost、GBDT、XGBoost)

    Bagging只是将分类器进行简单的组合,实际上,并没有发挥出分类器组合的威力来。

    Boosting是一种提高任意给定学习算法准确度的方法。
    Boosting的提出与发展离不开Valiant和 Kearns两位大牛的不懈努力,下面是他们的“奋斗史”:
    Boosting的思想起源于 Valiant提出的 PAC ( Probably Approximately Correct)(可能近视正确)学习模型。Valiant和 Kearns提出了弱学习和强学习的概念:
    弱学习:识别错误率小于1/2(即准确率仅比随机猜测略高的学习算法)
    强学习:识别准确率很高并能在多项式时间内完成的学习算法
    同时 ,Valiant和 Kearns首次提出了 PAC学习模型中弱学习算法和强学习算法的等价性问题,即任意给定仅比随机猜测略好的弱学习算法 ,是否可以将其提升为强学习算法 ? 如果二者等价 ,那么只需找到一个比随机猜测略好的弱学习算法就可以将其提升为强学习算法 ,而不必寻找很难获得的强学习算法。

    1)、AdaBoost

    AdaBoost通过改变样本的分布突出错分类,并进而训练弱分类器得到弱分类器的权重,最终根据权重整合在一起得到最终的强分类器。

    Boosting这其实思想相当的简单,举个例子:

    对一份数据集建立M个模型(比如分类),一般这种模型比较简单,称为弱分类器(weak learner)。每次分类都将上一次分错的数据权重提高一点再进行分类,这样最终得到的分类器在测试数据与训练数据上都可以得到比较好的成绩。

    Boosting算法基本步骤:

    1、先对N个训练样本S1的学习得到一个弱分类器M1;
    2、将S1中分错的样本和其他新的数据一起构成新的N个训练样本S2,再得到一个弱分类器M2;
    3、将S1和S2中都分错的样本和其他新的数据一起构成新的N个训练样本S3,再得到一个弱分类器M3;
    4、最终得到一堆弱分类器,可根据弱分类器的多数投票表决。

    2)、GBDT(Gradient Boosted Decision Tree)梯度提高决策树


    首先gbdt 是通过采用加法模型(即基函数的线性组合),以及不断减小训练过程产生的残差来达到将数据分类或者回归的算法。

    GBDT训练过程:

    gbdt通过多轮迭代,每轮迭代产生一个弱分类器,每个分类器在上一轮分类器的残差基础上进行训练。对弱分类器的要求一般是足够简单,并且是低方差和高偏差的。因为训练的过程是通过降低偏差来不断提高最终分类器的精度。
    弱分类器一般会选择为CART TREE(也就是分类回归树)。由于上述高偏差和简单的要求 每个分类回归树的深度不会很深。最终的总分类器 是将每轮训练得到的弱分类器加权求和得到的(也就是加法模型)

    但是其实我们真正关注的:
    1.是希望损失函数能够不断的减小;
    2.是希望损失函数能够尽可能快的减小。所以如何尽可能快的减小呢?
    让损失函数沿着梯度方向的下降。这个就是gbdt 的 gb的核心了。 利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中的残差的近似值去拟合一个回归树。
    gbdt 每轮迭代的时候,都去拟合损失函数在当前模型下的负梯度。
    这样每轮训练的时候都能够让损失函数尽可能快的减小,尽快的收敛达到局部最优解或者全局最优解。

    gbdt如何选择特征?

    其实就是CART选择特征的过程。

    gbdt 如何构建特征 ?

    gbdt 本身是不能产生特征的,但是我们可以利用gbdt去产生特征的组合。

    如图所示,我们 使用 GBDT 生成了两棵树,两颗树一共有五个叶子节点。我们将样本 X 输入到两颗树当中去,样本X 落在了第一棵树的第二个叶子节点,第二颗树的第一个叶子节点,于是我们便可以依次构建一个五纬的特征向量,每一个纬度代表了一个叶子节点,样本落在这个叶子节点上面的话那么值为1,没有落在该叶子节点的话,那么值为 0.
    于是对于该样本,我们可以得到一个向量[0,1,0,1,0] 作为该样本的组合特征,和原来的特征一起输入到逻辑回归当中进行训练。实验证明这样会得到比较显著的效果提升。

    gbdt 如何用于分类的 ?

    gbdt 如何用于分类:查看转载

    3)、XGBoost(X (Extreme) GBoosted)



    https://blog.csdn.net/ice_martin/article/details/63683657

    7、决策树算法小结

        终于到了最后的总结阶段了,这里我们不再纠结于ID3, C4.5和 CART,我们来看看决策树算法作为一个大类别的分类回归算法的优缺点。这部分总结于scikit-learn的英文文档。

        首先我们看看决策树算法的优点:

        1)简单直观,生成的决策树很直观。

        2)基本不需要预处理,不需要提前归一化,处理缺失值。

        3)使用决策树预测的代价是O(log2m)。 m为样本数。

        4)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。

        5)可以处理多维度输出的分类问题。

        6)相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释

        7)可以交叉验证的剪枝来选择模型,从而提高泛化能力。

        8) 对于异常点的容错能力好,健壮性高。

        我们再看看决策树算法的缺点:

        1)决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。

        2)决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。

        3)寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。

        4)有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。

        5)如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

    展开全文
  • 2)效率高,决策树只需要一次构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。 看了一遍概念后,我们先从一个简单的案例开始,如下图我们样本: 对于上面的样本数据,根据不同特征值我们最后是选择...
  • 随机梯度提升决策树,可独立使用,并通过 Python 接口。 ArXiv 上的论文: FastBDT:用于多元分类的随机梯度提升决策树的速度优化和缓存友好实现 随机梯度提升决策树被广泛用于多元分类和回归任务。 本文提出了一种...
  • 本文来自于作者汪毅雄,本文用容易理解的语言和例子来解释了决策树三种常见的算法及其优劣、随机森林的含义,相信能帮助初学者真正地理解相关知识。决策树,是机器学习中一种非常常见的分类方法,也可以说是所有算法...
  • 该数据集用于决策树随机森林天气预测数据集,利用前一天和历史最高平均气温,实现气温预测的随机森林模型。
  • matlab程序下的决策树随机森林分类算法的详细案例,含doc介绍,方便学习
  • 决策树随机森林

    2018-07-24 17:25:19
    决策树随机森林详解,决策树随机森林详解,决策树随机森林详解,决策树随机森林详解,决策树随机森林详解
  • 随机森林有决策树的所有优点而且还在一定程度上缓解了决策树过拟合的问题,但决策树随机森林的基础,所以两者都需要了解。 正文 一、决策树 1.原理 看看书上是怎么说的 本质上,它从一层层的 if/else 问题中进行...

    前言

    决策树给我的感觉就是一系列的if else,随机森林就是一系列的决策树合并,并添加随机性。随机森林有决策树的所有优点而且还在一定程度上缓解了决策树过拟合的问题,但决策树是随机森林的基础,所以两者都需要了解。由于算法的原因,两者不需要对数据进行归一化处理,还是比较方便的。

    正文

    一、决策树

    1.原理
    看看书上是怎么说的

    本质上,它从一层层的 if/else 问题中进行学习,并得出结论。这些问题类似于你在“20 Questions”游戏 9
    中可能会问的问题。想象一下,你想要区分下 面这四种动物:熊、鹰、企鹅和海豚。你的目标是通过提出尽可能少的if/else
    问题来得到正确答案。你可能首先会问:这种动物有没有羽毛,这个问题会将可能的动物减少到只有两种。如果答案是“有”,你可以问下一个问题,帮你区分鹰和企鹅。例如,你可以问这种动物会不会飞。如果这种动物没有毛,那么可能是海豚或熊,所以你需要问一个问题来区分这两种动物——比如问这种动物有没有鳍。
    在这里插入图片描述

    算法具体是怎么做的呢?
    简单来说就是每寻找能把数据尽可能分开的一个测试,然后递归调用这个过程,直到把所有数据都分开。
    比如:
    第一次划分(决策树的第一层)是这样的:
    在这里插入图片描述
    第九次划分是这样的:
    在这里插入图片描述
    很显然,决策树太深的话很容易过拟合,我们可以通过“预剪枝”操作来减轻过拟合,就是限制其深度只能达到一个值。(类似于提前停止)
    2.代码实例
    先看下数据集:

    import matplotlib.pyplot as plt
    from sklearn.model_selection import train_test_split
    from sklearn.datasets import load_breast_cancer
    cancer = load_breast_cancer()
    print(cancer.data.shape)
    print(cancer.target.shape)
    

    用的是预测肿瘤阴性还是阳性的二分类数据集,训练集大小(569,30),即有30个特征。
    结果:

    (569, 30)
    (569,)
    
    X_train, X_test, y_train, y_test = train_test_split(
     cancer.data, cancer.target, stratify=cancer.target, random_state=42)
    tree = DecisionTreeClassifier(max_depth=4, random_state=0)
    tree.fit(X_train, y_train)
    print("train acc:{:.3f}".format(tree.score(X_train, y_train)))
    print("test acc:{:.3f}".format(tree.score(X_test, y_test)))
    

    结果:

    train acc:0.988
    test acc:0.951
    

    说明两点:
    (1)DecisionTreeClassifier()中的max_depth参数就是进行“预剪枝”的,限制最大深度;
    (2)train_test_split()中的stratify参数很重要,如果设置stratify参数,就可以让数据集按照类别比例进行划分,对于分类数据集中类别比例不一样的数据尤其有用。

    train_test_split()的参数

    测试集上结果还不错。
    3.特征重要性
    可以通过model.feature_importances_得到每个特征的重要性:

    print("Feature importances:\n{}".format(tree.feature_importances_))
    

    结果:

    Feature importances:
    [0.         0.         0.         0.         0.         0.
     0.         0.         0.         0.         0.01019737 0.04839825
     0.         0.         0.0024156  0.         0.         0.
     0.         0.         0.72682851 0.0458159  0.         0.
     0.0141577  0.         0.018188   0.1221132  0.01188548 0.        ]
    

    将这个属性可视化会有很好的效果:

    def plot_feature_importances_cancer(model):
     n_features = cancer.data.shape[1]
     plt.barh(range(n_features), model.feature_importances_, align='center')
     plt.yticks(np.arange(n_features), cancer.feature_names)
     plt.xlabel("Feature importance")
     plt.ylabel("Feature")
    plot_feature_importances_cancer(tree)
    

    结果:
    在这里插入图片描述

    二、随机森林

    1.原理
    背后思想

    决策树的一个主要缺点在于经常对训练数据过拟合。随机森林是解决这个问题的一种方法。随机森林本质上是许多决策树的集合,其中每棵树都和其他树略有不同。随机森林背后的思想是,每棵树的预测可能都相对较好,但可能对部分数据过拟合。如果构造很多树,并且每棵树的预测都很好,但都以不同的方式过拟合,那么我们可以对这些树的结果取平均值来降低过拟合。既能减少过拟合又能保持树的预测能力,这可以在数学上严格证明。

    构造随机森林。 想 要 构 造 一 个 随 机 森 林 模 型, 你 需 要 确 定 用 于 构 造 的 树 的 个 数。比如我们想要构造 10 棵树。这些树在构造时彼此完全独立,算法对每棵树进行不同的随机选择,以确保树和树之间是有区别的。想要构造一棵树,首先要对数据进行自助采样(bootstrap sample)。也就是说,从 n_samples 个数据点中有放回地(即同一样本可以被多次抽取)重
    复随机抽取一个样本,共抽取 n_samples 次。这样会创建一个与原数据集大小相同的数据集,但有些数据点会缺失(大约三分之一),有些会重复。

    举例说明,比如我们想要创建列表 [‘a’, ‘b’, ‘c’, ‘d’] 的自助采样。一种可能的自主采样是 [‘b’, ‘d’, ‘d’, ‘c’],另一种可能的采样为 [‘d’, ‘a’, ‘d’, ‘a’]。接下来,基于这个新创建的数据集来构造决策树。但是,要对我们在介绍决策树时描述的算法稍作修改。在每个结点处,算法随机选择特征的一个子集,并对其中一个特征寻找最佳测试,而不是对每个结点都寻找最佳测试。选择的特征个数由 max_features 参数来控制。每个结点中特征子集的选择是相互独立的,这样树的每个结点可以使用特征的不同子集来做出决策。由于使用了自助采样,随机森林中构造每棵决策树的数据集都是略有不同的。由于每个结点的特征选择,每棵树中的每次划分都是基于特征的不同子集。这两种方法共同保证随机森林中所有树都不相同。

    2.代码实例

    #随机森林
    from sklearn.ensemble import RandomForestClassifier
    X_train, X_test, y_train, y_test = train_test_split(
     cancer.data, cancer.target, random_state=0)
    forest = RandomForestClassifier(n_estimators=100, random_state=0)
    forest.fit(X_train, y_train)
    print("Accuracy on training set: {:.3f}".format(forest.score(X_train, y_train)))
    print("Accuracy on test set: {:.3f}".format(forest.score(X_test, y_test)))
    

    结果:

    Accuracy on training set: 1.000
    Accuracy on test set: 0.972
    

    说明:

    (1)RandomForestClassifier中的参数n_estimators表示随机森林中决策树的个数,原则上越多越好
    (2)随机森林model也有feature_importances_属性,可用来做上述可视化,效果很好

    展开全文
  • 1、决策树 基本概念:从一组无次序、无规则的实例中推理出决策树表示形式的分类规则。 1.1 ID3 具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征...

    目录

     

    1、决策树

    1.1 ID3

    1.2 C4.5

    1.3 CART

    1.4 预剪枝和后剪枝

    2 bagging与随机森林

    2.1 bagging

    2.2 随机森林

    3 极端随机树

    4 GBDT

    5 Adaboost


    1、决策树


    基本概念:从一组无次序、无规则的实例中推理出决策树表示形式的分类规则。

    1.1 ID3

    具体方法是:从根节点开始,对节点计算所有可能的特征的信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归调用以上方法,构建决策树。

    基础概念:
     - 熵:

    熵越大,随机变量的不确定性越大。

     - 条件熵:

    H(Y|X)表示在已知随机变量X的条件下随机变量Y的不确定性:

     - 信息增益:

    特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下的经验条件熵H(D|A)之差:

     

    例子:贷款申请样本数据表

    首先计算经验熵:

    然后计算各特征对数据集D的信息增益。分别以A1,A2,A3,A4表示年龄、有工作、有自己的房子和信贷情况4个特征。

    根据年龄有取值青年、中年、老年。
    青年贷款是2条记录,否3条记录,共5条记录
    中年贷款是3条记录,否2条记录,共5条记录
    老年贷款是4条记录,否1条记录,共5条记录

    年龄条件熵:

    D1,D2,D3分别是年龄取值为青年、中年、老年的样本子集。

    以年龄为条件的信息增益为

    image

    有工作的信息增益

    image

    有房子的信息增益

    image

    信贷情况的信息增益

    image

    由于特征A3(有自己房子)的信息增益值最大,所以选择特征A3作为根节点的特征。它将训练数据集划分为两个子集D1(A3取值为是)和D2(A3取值为否)。由于D1只有同一类样本点,可以明确要贷款给D1,所以它成为一个叶节点,节点类标记为“是”。

    对于D2则需要从特征A1(年龄),A2(有工作)和A4(信贷情况)中选择新的特征。计算各个特征的信息增益。
    image


    缺点:
    1.用信息增益选择属性时偏向于选择分枝比较多的属性值,即取值多的属性。
    2.不能处理连续属性。

     

    1.2 C4.5


    它是对ID3算法的改进,相对于ID3算法主要有以下几个改进
    (1)用信息增益比来选择属性
    (2)在决策树的构造过程中对树进行剪枝
    (3)对非离散数据也能处理
    (4)能够对不完整数据进行处理

    信息增益比:
    gain_ratio(S,A)=gain(S,A)/Split_info(S,A)
    其中Split_info(S,A)为关于属性值的熵,利用熵公式计算。

    对连续型变量由小到大递增排序,取相邻两个值的中点作为分裂点,然后按照离散型变量计算信息增益的方法计算信息增益,取其中最大的信息增益作为最终的分裂点。

     

    1.3 CART


    首先计算不纯度,然后利用不纯度计算Gini指标,选取最小的Gini指标作为分裂属性。

    不纯度:

    某个自变量的Gini指标的计算方式如下:

    算法停止计算的条件是节点中的样本个数小于预定阈值,或样本集的基尼指数小于预定阈值,或者没有更多特征。

     

    决策树的损失函数,后面需要加一个正则项:

    其中叶结点 t 上的经验熵 H_t(T)为:

     

    1.4 预剪枝和后剪枝

    本次讲解参考的仍是周志华的《机器学习》

    1、数据集

    其中{1,2,3,6,7,10,14,15,16,17}为测试集,{4,5,8,9,11,12,13}为训练集。

    https://img-blog.csdn.net/2018090610004025?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    2、预剪枝

    预剪枝是在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。

    (1)在未划分前,根据训练集,类别标记为训练样例数最多的类别,由于训练集中的好瓜与坏瓜是相同多的类别,均为5,因此任选其中一类,书中选择了好瓜作为标记类别。

    当所有节点集中在根节点,所有训练集属于标记类别的仅有{4,5,8},因此分类正确的是3/7*100%=42.9%

    编号

    好瓜(正确结果)

    4

    5

    8

    9

    11

    12

    13

     

    3/7

    (2)计算训练集的信息增益,得知脐部的信息增益最大,因此按照脐部进行划分。又因为在训练集中,凹陷特征好瓜的占比多,因此凹陷划分为好瓜,稍凹特征好过占比多,因此将其标记为好瓜,因此按照脐部划分的子树结果如下:

    https://img-blog.csdn.net/20180906105833587?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    划分后,对比结果如下:

    编号

    好瓜(正确结果)

    按照脐部划分

    4(凹陷)

    5(凹陷)

    8(稍凹)

    9(稍凹)

    是(划分错误)

    11(平坦)

    12(平坦)

    13(凹陷)

    是(划分错误)

    正确率

    3/7

    5/7(精度提高,划分)

    (3)在脐部划分的基础上,进一步计算凹陷、根蒂特征下,其他属性的信息增益,根据计算结果可知,在凹陷的情况下,色泽的信息增益最大,因此对于凹陷的西瓜,进一步确定按照色泽进行划分,划分结果如下:

    https://img-blog.csdn.net/20180906105857931?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    对于凹陷数据,进一步按照色泽进行划分后,对比划分前后的准确性:

    编号

    好瓜(正确结果)

    按照脐部划分

    对凹陷,按照色泽划分

    4(凹陷、青绿)

    5(凹陷、浅白)

    8(稍凹)

    (不满足条件的,按照上一次划分结果照写)

    9(稍凹)

    是(划分错误)

    11(平坦)

    12(平坦)

    13(凹陷、青绿)

    是(划分错误)

    正确率

    3/7

    5/7(精度提高,划分)

    4/7(精度降低,不划分)

    对稍凹数据集,进一步计算其他属性的信息增益,确定根蒂的信息增益最大,因此对稍凹,进一步按照根蒂进行划分:

    https://img-blog.csdn.net/20180906110327911?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    对于稍凹数据,进一步按照根蒂进行划分后,对比划分前后的准确性:

    编号

    好瓜(正确结果)

    按照脐部划分

    对稍凹,按照根蒂划分

    4(凹陷)

    (不满足条件的,按照上次换发你结果照写)

    5(凹陷)

    8(稍凹、蜷缩)

    9(稍凹、蜷缩)

    是(划分错误)

    11(平坦)

    12(平坦)

    13(凹陷)

    是(划分错误)

    正确率

    3/7

    5/7(精度提高,划分)

    5/7(精度不变,不划分)

    (4)因此按照预剪枝,最终形成的决策树如下图,其泛化性为71.4%。

    https://img-blog.csdn.net/20180906110951766?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    由图可知,预剪枝使得很多分支没有展开,这不仅降低了过拟合的风险,还显著减少了决策树的训练时间开销和测试时间。但是,有些分支虽当前不能提升泛化性。甚至可能导致泛化性暂时降低,但在其基础上进行后续划分却有可能导致显著提高,因此预剪枝的这种贪心本质,给决策树带来了欠拟合的风险。

    3、后剪枝

    后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。

    (1)我在此生成的决策树上将测试集的数据在此树上进行了标记,如下图所示:

    https://img-blog.csdn.net/20180906151944744?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    对比标记节点的划分类与各数据的真实分类,计算准确率,如下表所示:

    编号

    好瓜(正确结果)

    按照整棵树进行划分

    4

    5

    8

    9

    11

    12

    13

    正确率

     

    3/7

    生成的决策树,在验证集上的准确度为3/7*100%=42.9%

    (2)后剪枝将从决策树的底部往上进行剪枝,先看最底部的纹理,将其领衔的分支减掉,即将其换成叶子节点。由于在训练集上,替换后,包含的样本号为{7,15},好瓜坏瓜比例相等,因此选择好瓜进行标记,剪枝后的决策树为:

    https://img-blog.csdn.net/20180906152753494?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    编号

    好瓜(正确结果)

    按照整棵树进行划分

    减掉底部纹理划分

    4

    (其他不变,照写)

    5

    8

    (改变)

    9

    11

    12

    13

    正确率

     

    3/7

    4/7(准确率提高)

    当减掉底部纹理划分后,准确率提高,因此按照纹理划分需裁剪掉。

    (3)接着往上裁剪,此时应该是色泽部分,由于在训练集上,替换后,包含的样本号为{6,7,15},好瓜(2个)多于坏瓜(1个),因此选择好瓜进行标记,剪枝后的决策树为:

    https://img-blog.csdn.net/20180906153521806?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    编号

    好瓜(正确结果)

    按照整棵树进行划分

    减掉底部纹理划分

    减掉底部色泽划分

    4

    (其他不变,照写)

    是(其他不变,照写)

    5

    8

    (改变)

    9

    11

    12

    13

    正确率

     

    3/7

    4/7(准确率提高)

    4/7(准确率不变)

    此时决策树验证集精度仍为57.1%,因此可不进行剪枝,即对于脐部稍凹,根蒂稍蜷部分,可保留按照色泽进一步划分。

    (4)接下来,我们看脐部凹陷分支。由于在训练集上,将色泽替换为叶节点后,包含的样本号为{1,2,3,14},好瓜(3个)多于坏瓜(1个),因此选择好瓜进行标记,剪枝后的决策树为:

    https://img-blog.csdn.net/20180906154552935?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    编号

    好瓜(正确结果)

    按照整棵树进行划分

    减掉底部纹理划分

    减掉底部色泽划分

    减调色泽划分(最左侧色泽)

    4

    (其他不变,照写)

    (其他不变,照写)

    5

    (新划分,发生改变)

    8

    (改变)

    (其他不变,照写)

    9

    11

    12

    13

    正确率

     

    3/7

    4/7(准确率提高)

    4/7(准确率不变)

    5/7(准确率提高)

    当减掉最左侧色泽划分后,准确率提高,因此按照色泽划分需裁剪掉。

    (5)整棵树遍历基本完成,因此该决策树最终后剪枝的结果如下图所示,其验证精度为71.4%。

    https://img-blog.csdn.net/20180906155413873?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3pmYW41MjA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70

    4、总结

    对比预剪枝与后剪枝生成的决策树,可以看出,后剪枝通常比预剪枝保留更多的分支,其欠拟合风险很小,因此后剪枝的泛化性能往往由于预剪枝决策树。但后剪枝过程是从底往上裁剪,因此其训练时间开销比前剪枝要大。

     

    2 bagging与随机森林

    2.1 bagging

    算法流程:

        输入为样本集D={(x,y1),(x2,y2),...(xm,ym)},弱学习器算法, 弱分类器迭代次数T。

        输出为最终的强分类器f(x)

        1)对于t=1,2...,T:

          a)对训练集进行第t次随机采样,共采集m次,得到包含m个样本的采样集Dt

          b)用采样集Dt训练第t个弱学习器Gt(x)

        2) 如果是分类算法预测,则T个弱学习器投出最多票数的类别或者类别之一为最终类别。如果是回归算法,T个弱学习器得到的回归结果进行算术平均得到的值为最终的模型输出。

    2.2 随机森林

    随机森林是bagging的改进,特征随机选择。当可以生成好决策树后,就比较容易生成随机森林了。接下来是随机森林的构造过程,如下所示:

    第一、假如有N个样本,则有放回的随机选择N个样本(每次随机选择一个样本,然后返回继续选择)。这选择好了的N个样本用来训练一个决策树,作为决策树根节点处的样本。

    第二、当每个样本有M个属性时,在决策树的每个节点需要分裂时,随机从这M个属性中选取出m个属性,满足条件m << M。然后从这m个属性中采用某种策略(比如说信息增益)来选择1个属性作为该节点的分裂属性。

    第三、决策树形成过程中每个节点都要按照步骤2来分裂(很容易理解,如果下一次该节点选出来的那一个属性是刚刚其父节点分裂时用过的属性,则该节点已经达到了叶子节点,无须继续分裂了)。一直到不能够再分裂为止。注意整个决策树形成过程中没有进行剪枝。

    最后、按照步骤1~3建立大量的决策树,这样就构成了随机森林了。

    从上面的步骤可以看出,随机森林的随机性体现在每颗数的训练样本是随机的,树中每个节点的分类属性也是随机选择的。有了这2个随机的保证,随机森林就不会产生过拟合的现象了。

    随机森林有2个参数需要人为控制,一个是森林中树的数量,一般建议取很大。另一个是m的大小,推荐m的值为M的均方根。其中减小特征选择个数m,树的相关性和分类能力也会相应的降低;增大m,两者也会随之增大。所以关键问题是如何选择最优的m。通过oob误分率误分率解决。

    随机森林分类效果(错误率)与两个因素有关:

    • 森林中任意两棵树的相关性:相关性越大,错误率越大;
    • 森林中每棵树的分类能力:每棵树的分类能力越强,整个森林的错误率越低。

    缺点:

    1. 据观测,如果一些分类/回归问题的训练数据中存在噪音,随机森林中的数据集会出现过拟合的现象。

    2. 比决策树算法更复杂,计算成本更高,需要更多的时间来训练。

     

    3 极端随机树

    随机森林里的随机包含的意思是:
    样本随机
    特征随机
    参数随机
    模型随机(ID3 ,C4.5)
    极限树/极端随机树里的随机包含的意思是:
    特征随机
    参数随机
    模型随机(ID3 ,C4.5)
    分裂随机

    ET或Extra-Trees(Extremely randomized trees,极端随机树)算法与随机森林算法十分相似,都是由许多决策树构成。极限树与随机森林的主要区别:

    1、randomForest应用的是Bagging模型,extraTree使用的所有的样本,只是特征是随机选取的,因为分裂是随机的,所以在某种程度上比随机森林得到的结果更加好

    2、随机森林是在一个随机子集内得到最佳分叉属性,而ET是完全随机的得到分叉值,从而实现对决策树进行分叉的。

     

    4 GBDT

    GBDT (Gradient Boosting Decision Tree) 梯度提升迭代决策树(基于CART树)。GBDT的原理很简单,就是所有弱分类器的结果相加等于预测值,然后下一个弱分类器去拟合误差函数对预测值的残差(这个残差就是预测值与真实值之间的误差)。

    GBDT 既可以做回归也可以做分类,下面先描述一下做回归的算法流程:

    已知一个训练数据集 T = {(x1,y1),(x2,y2),...,(xn,yn)}, 如果将训练集分为不同的区域 R1,R2,...,Rn,然后可以确定每个区域输出的常识 c,c 的计算是将每个区域的 y 值相加再除以 y 的个数,其实就是求一个平均值。树可以表示为:

    然后通过下图方式来确定具体分割点:

    我将李航的统计学方法里面的例子粘出来,就知道提升树是如何计算的了:

    以上就是 GBDT 选择分割点的过程, 如果特征有多个的话也是一样的道理,选择特征和特征值使得误差最小的点,作为分割点。所以其实 GBDT 也可以用作特征选择,通过GBDT 可以将重要的特征选择出来,当特征非常多的时候可以用来做降维。然后再融合类似逻辑回归这样的模型再进行训练。

    优点

    1. 在分布稠密的数据集上,泛化能力和表达能力都很好,这使得GBDT在Kaggle的众多竞赛中,经常名列榜首。
    2. 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。

    缺点:

    1. GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
    2. GBDT在处理文本分类特征问题上,相对其他模型的优势不如它在处理数值特征时明显。
    3. 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度。

    5 Adaboost

    例子如下: 

    Adaboost与GBDT区别:Adaboost强调Adaptive(自适应),通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting。而GBDT则是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。

    优点

    1)  Adaboost是一种有很高精度的分类器

    2)  可以使用各种方法构建子分类器,Adaboost算法提供的是框架

    3)  当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单

    4)  简单,不用做特征筛选

    5)  不用担心overfitting(过度拟合)

    缺点

    1)  容易受到噪声干扰,这也是大部分算法的缺点

    2)  训练时间过长

    3)  执行效果依赖于弱分类器的选择

     

    参考博客链接:

    https://blog.csdn.net/gumpeng/article/details/51397737

    https://blog.csdn.net/zfan520/article/details/82454814

    https://blog.csdn.net/lc574260570/article/details/81813889

    https://www.jianshu.com/p/405f233ed04b

    https://www.cnblogs.com/ScorpioLu/p/8295990.html

    展开全文
  • 决策树随机森林算法,基于已有库的初步应用及所用数据集
  • 决策树随机森林 垃圾邮件和泰坦尼克号数据集的分类器。 只需从上到下运行提供的iPython Notebook,确保数据集位于同一目录中。 将CSV文件输出到当前目录。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,332
精华内容 25,332
关键字:

随机决策树