zoukankan      html  css  js  c++  java
  • 决策树

      一、决策树

    1、基本流程

     有三种情况会让递归停止:1、当前节点包含的样本属于同一类别,无需划分。2、属性集为空,所有样本在所有属性上取值都一致,返回的是这个节点样本最多的类别。3、当前节点样本为空,这时候返回父节点的样本最多的类别

    2、划分选择

    1)熵:

    2)信息增益:,信息增益最大的就是最优的选择,这就是ID3算法

    3)信息增益率:,在信息增益基础上,消除由于特征取值过多,导致信息增益变大的影响。同时由于信息增益率会偏向于取值较少的特征,因此这里并不是直接使用信息增益率,而是在候选划分属性中找到信息增益高于平均水平的属性,再从中选择信息增益率最高的。这个就是从ID3算法发展上来的C4.5算法

    4)基尼系数:基尼系数表示随机取两个样本,其类别不一致的概率,基尼系数越小代表概率越小,纯度越高。这个就是CART算法

    5)上面讲的都是分类树的划分标准,还有回归树的划分标准如下:使用的是最小误差平方和

     3、评价函数(也就是损失函数)

    由于决策树最终分类只是又叶子节点的类别来决定的,所以直接计算叶子节点的熵加权累加,就可以当做损失函数,熵越小,累加越小,代表损失函数越小

    这里需要了解,真正对分类起作用的是叶子结点的情况,因此对于叶子节点中,可以计算每个叶子节点的熵,再将这棵树所有的叶子节点的熵进行加权求和(这是因为每个叶子的样本数不一样),这样就得到这棵树的评价函数

    (其实这里的评价函数有一点损失函数的感觉,随着树越来越生长,损失值应该越来越小)

     三种算法的比较

    4、防止过拟合 

    防止过拟合的方法:1、设置树的深度,比如最多5层;2、设置叶子结点的最少样本数;3、预剪枝、后剪枝

    预剪枝:在生成过程中剪枝:比如叶子节点最少样本多少就停止,熵小于多少就停止

    后剪枝:依次从T0剪枝到T1剪枝到T2剪枝到T3最后到Tk,一共得到K颗树,用验证集对这K棵树进行评价,选择损失函数最小的就可以,所以问题现在就在,如何选择节点来做剪枝,也就是每次应该先选择哪一个节点呢。这就需要前面的评价函数来确定剪枝系数,就是下面的

    1、树越生长,损失值越小,所以c(T)<c(t) 没生长的树,但是如果树一直长,就会导致决策树越复杂,我们为了防止过复杂,并不能直接使用损失函数C(t)的值来做对比,因为如果只用这个值对比,肯定最大的树损失最小也就最好,因此在原来损失基础上加入一个项,就是,这个东西是一个系数乘以叶子的数量,也就是如果叶子数量过多,损失函数就没办法小了,其实跟L2正则是一个意思(l2正则也是参数过多会是损失函数变大)。

    2、确定下来alpha值之后,选择最小的那个剪枝,一直选择最小的一直剪,最后剪到只剩下根节点形成K棵树

    3、用测试集对K个树进行评价选择最好的树

  • 相关阅读:
    JQ trigger函数无法触发a标签的两种解决方法
    Normalize.css
    wow.js中各种特效对应的类名
    利用伪元素:after清除浮动
    单词超出隐藏显示省略号(单行或多行)并设置是否将单词打断
    利用伪元素和css3实现鼠标移入下划线向两边展开效果
    css3 兼容各个浏览器
    html 初始化
    将博客搬至CSDN
    Linux配置问题
  • 原文地址:https://www.cnblogs.com/jiegege/p/8559024.html
Copyright © 2011-2022 走看看