zoukankan      html  css  js  c++  java
  • 决策树与树集成模型(bootstrap, 决策树(信息熵,信息增益, 信息增益率, 基尼系数),回归树, Bagging, 随机森林, Boosting, Adaboost, GBDT, XGboost)

     1.bootstrap   在原始数据的范围内作有放回的再抽样M个, 样本容量仍为n,原始数据中每个观察单位每次被抽到的概率相等, 为1/n , 所得样本称为Bootstrap样本。于是可得到参数θ的一个估计值θ^(b),这样重复若干次,记为B 。为了可以避免一些误差点对少量树的决策影响。 

     2.决策树 : 

       信息熵: Ent(D) = - ΣPk*logPk, Ent(D)的值越小,则D的纯度越高
               信息增益: ID3中使用, 存在过拟合的情况,

                           避免过拟合的方法,1. 通过significant test,用判断成功的概率来判断要不要进行剩下的分类

                                                            2. 进行剪枝,去掉该枝还是可以完成正确的分类,就说明该枝没有用

               举例说明: 17个西瓜, 8个好瓜, 9个坏西瓜

                                P1 = 8/17, P2 = 9/17 

                                当前的信息熵 = -(8/17*log(8/17)+9/17*log(9/17))

                                根据色泽特征(绿色,红色,白色)分成了3类

                                             绿色里面有6个瓜,3个好瓜,3个坏瓜, 红色里面有4个好瓜,2个坏瓜, 白色里面有一个好瓜,4个坏瓜

                                             Ent(D1) = -(3/6*log(3/6) + 3/6*log(3/6))  根据绿色条件分出了6个西瓜,其中3个好瓜,3个坏瓜

                                             Ent(D2) = -(4/6*log(4/6) + 2/6*log(2/6))  根据红色条件分出了6个西瓜,其中4个好瓜,2个坏瓜

                                             Ent(D3) = -(1/5*log(1/5) + 4/5*log(4/5))   根据白色条件分出了5个西瓜,其中1个坏瓜,4个好瓜
                                 信息增益率 = 上一次的信息熵 - 当前信息熵 

                                                   =  -(8/17*log(8/17)+9/17*log(9/17)) - (6/17 * Ent(D1)  + 6/17 * Ent(D2) + 5/17*Ent(D3))  > 0 说明存在信息增益

                    信息增益率: C4,5

                              通过进行前后的信息熵的相除 

                     CART算法: 基尼系数, 从两个样本中随机抽取两个样例,其类别标记不一致的概率

                                                Gini(D) = 1 - ΣPk^2 

                       如果是连续值的话,那么进行的就是回归树的分类

                        多分类  ΣΣPk*logPk

                  决策树:优势:

                                      - 非黑盒

                                      - 轻松去除无关attribute(Gain=0)

                                      - test 起来很快
                                劣势:

                                      - 只能线性分割数据
                                      - 贪婪算法(可能找不到最好的树)

    3. Bagging 表示集群树进行投票,根据票数的结果来统计最终结果

    4. Random Forest (随机森林) 在选取有限样本的同时,选取的特征也是有限的,有点像dropout,最后的结果进行投票

    5.  Boosting :

           1. 先在原始数据集中长出一个Tree,

           2 把前一个tree没有完美分类的数据,进行数据权重的重构,让没有分好的数据所占的权重更大

           3. 用新的re-weighted tree再训练一个tree

           4.最终的分类结果由投票决定

           根据前一个树的分类结果,来强化当前的树

    6. Adaboost

           步骤1 : 首先初始化数据的权重分布,每个训练样本最开始被赋予相同的权值

            D1 = (w11, w12, ...., W1n) W1i = 1/n i= 1, 2, ....N

           步骤2: 使用权值分布Dm的训练集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器)

            步骤3: 计算Gm(x) 在训练数据集上的分类误差率,Wm = 当前分类器的分类误差, 根据错误率对训练数据进行加权

                          em = ΣWmIGm(xi) != yi

             步骤4: 带入上述进行权重加权的em,然后表示当前分类器的受重视程度

                          am = 1/2log(1-em/em) 当em<1/2 时 am>=0 且am随着em的减小而增大
                          意味着分类误差率越小的基本分类器在最终分类器的作用越大

               步骤5:组合各个弱分类器

    7.GBDT 

            Adaboost 的Regreesion版本
            Adaboost的em , 这里可以使用欧式距离或者交叉熵做为错误率判断的方式

            把残差做为下一轮的学习目标

           c .最终的结果有加权和值得到,不再是简单的多数投票

           G(x) = ΣamGm(x)

    8. XGboost 本身也是一种GBDT,但是把速度与效率做到了极值

    a. 使用L1, L2 Regularization 防止Overfitting, 加入正则化偏质相,使得每次梯度方向都存在一定的偏差,减少局部拟合的情况

    L1 

      w = argminΣ(t(xj) - Σwihi(xj)^2) + λΣwi 

    L2 

       w =argminΣ(t(xj) - Σwihi(xj)^2) + λΣwi^2 

    b. 对代价函数一阶与二阶求导,更快的Converge

    c. 树长全后再进行剪枝,防止贪心算法



                

     
       

         

                                                   

                                   

                         

                     

  • 相关阅读:
    微软 安全用户教育影片 有MM 哦
    数据字典是什么?
    调用Object.GetHashCode的缺省实现
    CCharp 中委托和事件的机制和应用
    C#.NET 中的类型转换
    解决在全文搜索中搜索中文字符
    ADO.NET 获取大型 数据
    Realize the Potential of Office 2003 by Creating Smart Tags in Managed Code
    MSDN 智能客户端开发人员中心
    ADO.Net 缓冲 插入大型数据
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/9768912.html
Copyright © 2011-2022 走看看