zoukankan      html  css  js  c++  java
  • 决策树学习笔记

    决策树笔记

    参考西瓜书及刘建平博客,仅此做简单笔记,帮助理解python操作。
    决策树是一种常见的额机器学习方法。其中,CART算法可用于分类与回归问题。一般,一棵决策树包含一个根节点、若干个内部节点和若干个叶节点。根节点和内部节点都是对一个属性进行划分,而叶节点对应的是决策的结果。从根节点到每个叶节点的路径对应了一个判定测试序列。决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
    决策树的关键是选择最优划分属性,随着划分的进行,让分支节点所包含的样本尽可能属于同一类别,即结点的纯度越来越高。
    Generally,我们常见ID3、C4.5、CART三种算法来选择最优属性。
    sklearn中直接用CART来进行,因为该算法在多种算法中较优,所以可直接用该模块中的方法生成决策树。

    一.决策树的生成

    1.ID3算法

    在介绍ID3、C4.5前,我们先引入几个基本概念。
    信息熵(information entropy):H(X)度量样本集合的纯度指标。熵越大,事物的不确定性越大。
    条件熵:表示在已知Y的情况下,X剩下的不确定性,用H(X|Y)表示。
    而信息增益:用H(X)-H(X|Y)表示,表达的是在知道Y的情况下,X的信息熵减少程度。(可借用条件概率来理解)
    ID3就是用信息增益来选择最优划分属性,信息增益最大的属性,将作为划分属性。示例见西瓜书P75-77。
    缺点:
    1.仅针对类别属性,不能应用于连续型属性。
    2.对于分类较多的属性,计算得出的信息增益通常较大,使得最优划分属性偏向于这类属性。(西瓜书P78,展示“编号”这一属性因分类较多,计算得出的信息增益最大,而作为最优划分属性。虽然用编号来划分样本,每个分支节点的纯度已达到最大,但是,obviously,这样的决策树压根不具有划分泛华能力。此时,用信息增益来选择最优属性无效。)
    3.对缺失值的情况没有做考虑
    4.没有考虑过拟合问题

    2.C4.5算法

    因为ID3的bug,C4.5算法采用二分法来处理连续型属性、对缺失值有了一定的处理方法,并用信息增益率和信息增益来选择最优属性。
    信息增益率会偏向选择可取数目较少的属性,所以C4.5结合信息增益与信息增益率来选择最优划分属性。具体:从候选的划分属性中,挑选信息增益高于平均水平的属性,再从中选择信息增益率最高的划分属性。

    3.CART算法

    引入基尼值来度量数据集的纯度。Gini(D)越小,数据集D的纯度越高。
    使用基尼指数来选择划分属性,基尼指数最小的属性将作为最优划分属性。
    Python中sklearn中直接用CART。
    CART中用二叉树,上面两种算法用的都是多叉树。每个划分属性出现次数可能大于1。

    缺点:

    (1)上述三种算法,都是选择最优划分属性来做分类决策(仅一个),但是大多数分类决策应该由一组特征决定,这样得到的决策树更加精准。由此,产生了多变量决策树,通过构造特征的一个线性组合,然后选择最优组合来做决策(代表算法OC1)。
    (2)如果样本数据稍有改动,就会导致树结构的剧烈改变。解决办法是用升级版的:集成方法里的随机森林 。

    分类树和回归树的最大区别在于:
    1.对连续属性的处理方式不一样。
    2.决策树建立后,做预测的方式不一样。
    说明:
    (1)分类树用基尼指数来衡量连续属性的各个划分点的好坏,选择基尼指数小的作为连续属性的最优划分点;而回归树采用了和方差指标来选定划分点。首先,对连续属性a,找到任意划分点b,将样本集D划分为D1和D2,使用基尼指数来选择划分属性。求出使D1和D2各自集合的均方差最小,同时D1和D2的均方差之和最小所对应的特征和特征值划分点。
    (2)做预测时,分类树采用叶子节点里概率最大的类别作为当前节点的预测类别。回归树采用的是叶节点的均值or中位数来预测输出结果。

    二.剪枝处理

    决策树生成很可能造成过拟合现象,即将训练数据学得太好了,但是对新数据的预测能力却不那么好。那么,我们可以通过剪掉一些子树(分支)来降低过拟合的风险。

    1.预剪枝

    定义:在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化能力提升,则停止划分,并将当前结点标记为叶节点。
    优点:因为预剪枝的动作,使得决策树未能完全展开。使得:
    1.降低过拟合风险
    2.显著减少决策树的训练时间开销和测试时间开销
    缺点:
    1.有些分支当前的划分可能不太理想(不能提升泛化能力,或者暂时导致泛化能力有所下降),但是可能后续的划分有显著的性能提升。
    2.预剪枝基于贪心原则剪枝,可能带来欠拟合。

    2.后剪枝

    定义:At first,由训练集数据生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若该节点对应的子树替换为叶结点能提升决策树的泛化能力,则将子树替换为叶结点。
    优点:
    1.欠拟合的风险很小
    2.泛化性能往往优于预剪枝
    缺点:
    1.训练时间开销较大。因为后剪枝是在完整的决策树生成后进行的,而且自底向上对树中的所有非叶结点逐个进行考察。

    Skearn采用CART算法,而CART采用后剪枝法,其先生成决策树,然后产生所有可能的剪枝后的CART树,接着使用交叉验证来检验各种剪枝效果,最后选择泛化能力最好的剪枝策略。
    度量损失标准:
    分类树:基尼系数
    回归树:均方差

  • 相关阅读:
    为EasySharding.EFCore提供Dapper相关查询扩展
    古典音乐作品编号标记解读
    乐理基础
    音乐指挥家
    2021年,年终总结
    有关Android launchMode 在APP(task)之间的应用——扔物线视频
    Springboot Jpa 有关多数据源的问题
    Python运算符及优先级
    高中信息技术(Python)重难点4:切片
    高中信息技术(Python)必修1 数据与计算 出现的模块和函数
  • 原文地址:https://www.cnblogs.com/wyy1480/p/10335177.html
Copyright © 2011-2022 走看看