当前位置: 首页 > news >正文

【统计学习|书籍阅读】第五章 决策树 p55-p75

文章目录

  • 思路
  • 决策树模型与学习
  • 特征选择
    • 信息增益
    • 信息增益比
  • 决策树的生成(生成算法)
    • ID3算法
    • C4.5生成算法
  • 决策树的剪枝
  • CART算法

思路

决策树是一种基本的分类与回归方法。主要讨论分类决策树。决策树模型呈树形结构,在分类问题中,表示基于特征对实例进行分类的过程。可以认为是if-then规则的集合,也可认为是定义在特征空间与类空间的条件概率分布。
学习时,利用训练数据,根据损失函数最小化原则建立决策树模型。预测时,对新的数据,利用决策树模型进行分类。
决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的修建。

决策树模型与学习

决策树是由训练数据集估计条件概率模型
用损失函数表示是否有很好的拟合
学习问题转化为在损失函数意义下的最优决策树问题
递归选择最优特征生成决策树
可能发生过拟合所以进行剪枝

决策树的学习目标是根据给定的训练数据集构建一个决策树模型,使它能够对实例进行正确的分类。决策树学习是由训练数据估计条件概率模型,基于特征空间划分的类的条件模型有无穷多个,选择的条件模型应该不仅对训练数据有很好的拟合,而且对未知数据有很好的预测。
决策树学习用损失函数实现这一目标。决策树损失函数通常是正则化的极大似然函数,决策树学习策略是以损失函数为目标函数的最小化。当损失函数确定之后,决策树学习问题就变为在损失函数意义下选择最优决策树问题。因为从所有可能的决策树中选取最优决策树是NP完全问题,所以现实中决策树学习算法通常使用启发式算法,近似求解优化问题。

决策树学习算法:

特征选择
决策树的生成
决策树的剪枝

特征选择

特征选择在于选取对训练数据具有分类能力的特征。特征选择的准则是信息增益信息增益比

信息增益

信息增益可以直观地表示一个特征具有更好的分类能力。
定义: 特征A对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A),定义为集合D的经验熵 H ( D ) H(D) H(D)与特征A给定条件下D的经验条件熵 H ( D ∣ A ) H(D|A) H(DA)之差,即: g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A)=H(D)-H(D|A) g(D,A)=H(D)H(DA)一般地,熵 H ( Y ) H(Y) H(Y)与条件熵 H ( Y ∣ X ) H(Y|X) H(YX)之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

根据信息增益准则的特征选择方法:对训练数据集D,计算其每个特征的信息增益,并比较他们的大小,选择信息增益最大的特征。

信息增益比

在分类困难时,即在训练数据集的经验熵大的时候,信息增益值会偏大,反之,信息增益值会偏小。使用信息增益比可以对这一问题进行校正。
定义: 信息增益比定义为信息增益与训练数据集的经验熵之比。

决策树的生成(生成算法)

ID3算法

ID3算法的核心是在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。

C4.5生成算法

C4.5在生成的过程中,用信息增益比来选择特征。

决策树的剪枝

决策树生成算法递归产生决策树,直到不能继续下去为止。这样产生的树往往对训练数据的分类很准确,但是对于为止数据的分类却没有那么准确,即容易出现过拟合现象,为了防止这种现象的产生我们提出决策树的剪枝,对树进行简化。

决策树的剪枝往往通过极小化决策树整体的损失函数来实现。
设树T的叶结点个数为 ∣ T ∣ |T| T,t是树T的叶结点,该叶结点上有Nt个样本点,其中k类的样本点有 N t k N_{tk} Ntk个, k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K H t ( T ) H_t(T) Ht(T)为叶结点t上的经验熵, α ≥ 0 \alpha \ge 0 α0为参数,则决策树学习损失函数可以定义为:
C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_{\alpha }(T) = \sum_{t=1}^{|T|}N_tH_t(T)+\alpha |T| Cα(T)=t=1TNtHt(T)+αT
其中经验熵为: H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T)=-\sum_{k}\frac{N_{tk}}{N_t}log \frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk
在损失函数中,将损失函数第一项记做: C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k K N t k N t l o g N t k N t C(T)=\sum_{t=1}^{|T|} N_tH_t(T)=-\sum_{t=1}^{|T|} \sum_{k}^{K}\frac{N_{tk}}{N_t}log \frac{N_{tk}}{N_t} C(T)=t=1TNtHt(T)=t=1TkKNtNtklogNtNtk
这是有: C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha (T)=C(T)+\alpha |T| Cα(T)=C(T)+αT.
C ( T ) C(T) C(T)表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ |T| T表示模型复杂度,参数 α ≥ 0 \alpha \ge 0 α0控制两者之间的影响。较大的 α \alpha α促使选择较简单的模型,反之; α = 0 \alpha = 0 α=0意味着只考虑模型与训练数据的拟合程度,不考虑模型的复杂程度。

上式定义的损失函数极小化等价于正则化的极大似然估计。所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择。

CART算法

决策树的生成
决策树的剪枝

分类回归树(classification and regression tree,CART),既可用于分类也可用于回归。对回归树用平方误差最小化准则,对分类树用基尼指数(Gini index)最小化准则,进行特征选择,生成二叉树。

使用“基尼指数”来选择划分属性,结点的纯度可用基尼值来度量:
G i n i ( p ) = ∑ k = 1 K p k ( 1 − p k ) = 1 − ∑ k = 1 K p k 2 Gini(p)=\sum_{k=1}^{K}p_k(1-p_k)=1-\sum_{k=1}^{K}p_k^2 Gini(p)=k=1Kpk(1pk)=1k=1Kpk2
对于给定的样本D,其基尼指数为: G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum_{k=1}^{K} (\frac{|C_k|}{|D|} )^2 Gini(D)=1k=1K(DCk)2
在特征A的条件下,集合D的基尼指数定义为: G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+ \frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)

相关文章:

  • 【GlobalMapper精品教程】009:DSM过滤植被和房屋并生成等高线案例教程
  • web前端期末大作业:我的家乡广东(html+css布局)div制作
  • 【C进阶】——内存操作函数memcpy、memmove、memcmp、memset详解及其模拟实现
  • 【DNS服务器的配置】实操
  • mysql索引下推与回表
  • 安装Scala
  • [C#小技巧]如何捕捉上升沿和下降沿
  • 一行代码,将2D转3D图表!
  • C++编程 杨辉三角详解
  • JavaScript 中的异步编程(上)
  • 【一起学数据结构与算法】快速教你了解并实现单链表
  • 用Pytorch实现一个线性回归
  • 【C++】二叉搜索树set/map
  • 最短路径查找Dijkstra算法
  • [数字媒体] Photoshop基础之图像校正、抠图(证件照)和融合
  • Android开源项目规范总结
  • javascript 哈希表
  • Java编程基础24——递归练习
  • Java新版本的开发已正式进入轨道,版本号18.3
  • js如何打印object对象
  • js中forEach回调同异步问题
  • Python_网络编程
  • React系列之 Redux 架构模式
  • spring security oauth2 password授权模式
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 关于extract.autodesk.io的一些说明
  • 我从编程教室毕业
  • 小程序开发之路(一)
  • 怎样选择前端框架
  • 终端用户监控:真实用户监控还是模拟监控?
  • Android开发者必备:推荐一款助力开发的开源APP
  • NLPIR智能语义技术让大数据挖掘更简单
  • 湖北分布式智能数据采集方法有哪些?
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #100天计划# 2013年9月29日
  • #include<初见C语言之指针(5)>
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (pojstep1.3.1)1017(构造法模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (蓝桥杯每日一题)love
  • (论文阅读30/100)Convolutional Pose Machines
  • (生成器)yield与(迭代器)generator
  • (转)Linq学习笔记
  • .jks文件(JAVA KeyStore)
  • .net 7 上传文件踩坑
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NetCore项目nginx发布
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @AutoConfigurationPackage的使用
  • []AT 指令 收发短信和GPRS上网 SIM508/548
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗