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

【22.1-决策树的构建1】

22.1 衡量示例集的纯度

一组猫和狗的照片作为示例集, 三只猫三只狗;

使用熵函数来测量示例集的不纯度

熵函数 H(p1)

纵轴代表熵的值,横轴代表示例中猫的比例 p1

当示例集中有三只猫和三只狗时,认为不纯度最高,熵最高,H = 1;而当示例集中全为猫/狗时,纯度最高,H = 0;

image.png

第二个示例集,五只猫和一只狗,则p1,即正例所占的比例,标记为1的例子所占的份额为5/6,则对应的 H = 0.65;

惯例上,计算熵时,使用的底数是2而不是e。取2为底数是为了使得该曲线的峰值为1;

image.png

该熵函数的定义,看起来和损失函数的定义非常相似。存在数学依据,暂不讨论。

22.2 选择拆分信息增益

在构建决策树时,我们是如何选择特征来进行拆分呢?该特征的选择能够最大程度的减少熵,增加纯度;

在决策树学习中,熵的减少被称为信息增益,如何计算信息增益 information gain 呢?从而在决策树的每个节点上,选择某特征来进行拆分;

在某节点上,通过耳朵形状、脸形状、胡须来分类,可得到两组分类后的;

我们的目的是减少熵,增加纯度,但是对于数量级较少的组(比如分类后某组有两个,一个是猫,一个是狗,那它的熵是1,不纯度最高),

它所对应的熵的说服力较差,即它的熵值不太具备代表性,所以需要通过加权平均来计算熵,将两个熵值合为一个。

惯例上,使用和根节点对比起来的熵的差值,即熵的降低的数值,用来评估该特征是否是一个好的分类特征。使用根节点的熵值作为被减数;

寻找这个分类特征,即寻找熵值下降最快的方向。

image.png

事实证明,决定是否不再分类,其停止标准之一是看熵的减少程度;如果熵减少得太少,可能会决定,没有必要增加树的大小来取降低那么一点点熵,并且树越大,过拟合的风险越高。

如果熵低于某个阈值,也没必要继续分类下去了。

信息增益 Information Gain

w - 权重;

信息增益的定义

根节点的熵值 - (左分支权重 * 左分支熵值 + 右分支权重 * 右分支熵值)
在这里插入图片描述

22.3 构建决策树的流程

信息增益标准,帮助决定在一个节点如何选择特征进行分类;

在决策树的多个地方使用该决策方法,来构建大型的决策树;

构建决策树的流程

1、在根节点开始,使用所有的样本集

2、对所有可能特征,计算信息增益,并选择熵减少最多的(即信息增益最多)那个特征;

3、根据选择的特征分组,创建左分支和右分支;

4、在树的左右分支上,重复进行特征选择和分类操作;直到达到停止标准

当一个节点完全是一种单一类别;

再分裂节点会导致树超过设定的最大深度;

在分裂的信息增益少于一个阈值;

节点中的示例数低于阈值;

构建决策树的过程,类似于递归算法,当达到某个停止条件时,停止递归。

image.png

如何选择最大深度,

最大深度越大,你所构建的决策树就越大,有点像拟合高阶多项式,或训练更大的神经网络。让决策树学习更复杂的模型,为数据拟合一个非常复杂的函数,有很大的过拟合的风险。

理论上,可以使用交叉验证来选择参数,比如最大深度,尝试使用不同的深度,并选择在交叉验证集熵效果最好的。开源库有更好的方法来帮助选择参数。

在示例中,使用了两个类别,但有时会包含多个类别或离散值 discrete value 的特征,会存在多个类别。

22.4 使用分类特征的一种one-hot编码

对于一些分类特征,比如胡须的有无,用yes/no可以表示,但是比如脸型可能有矩形、三角形、圆型、椭圆形多种形状,这一种特征需要有好几个枚举值,才能表示。

比如耳朵形状,现在有Pointy尖的、Floppy耷拉的、Oval椭圆形,这意味着如果你使用耳朵形状对一批动物进行分类,你会得到三个子分支。

现在有一种新的解决特征标记的方法,即使用one-hot encoding,即将三种耳朵的形状重新分配为三种独立的特征:即,是否有尖耳朵、是否有耷拉的耳朵、是否有椭圆的耳朵

对于第一个动物,假设它有尖耳朵,则所对应的是否有尖耳朵的特征值为1,耷拉耳朵和椭圆耳朵的特征值为0;

If a categorical feature can take on k values, create k binary features (0 or 1 valued)

如果某种特征具有k个枚举值,则将该特征分为k个二元特征,每个特征的取值是0或1;

image.png

由某种特征衍生创建出的k个二元特征,这些k个二元特征中只有一个为1,其他都为0,所以这种特征构造方法称为 one-hot encoding。其中只有一个特征的取值为1,该特征称为 one-hot。

image.png

使用one-hot encodeings来编码类别特征的方法,也适用于训练神经网络(不止适用于决策树)。

通过将特征编码为0/1,来作为神经网络的输入。

通过one-hot encoding可以处理超过两个离散值的特征。

那如何处理一些可以取任意值的特征呢?而不是有限个离散值的特征,如何处理可连续取值的特征?

22.5 处理具有连续值的特征

在决策树中,如何处理那些可能取值为任意值的特征呢?

例子:在猫咪收养分类系统(区分猫和其他动物),增加一个特征:体重;

增加体重这个特征,也是为了能获得更多的信息增益,即,能够更好地将猫和狗区分开来的信息;(信息增益Information gain:熵的减少值,根节点的熵 - 加权平均后的子节点的熵)

熵函数H§:一个开口向下的曲线,峰值为1,轴线为0.5;

当考虑基于体重特征划分时,需要界定一个阈值,当小于等于该阈值时,认定为猫,否则认定为狗;

体重是一个连续值,需要考虑取若干不同的阈值,分别来计算它们的信息增益,从而选取信息增益最大的那个阈值。

image.png

实际上,所尝试的阈值不止三个,而是沿着x轴逐个尝试,一种惯例是根据体重(根据这个特征的值)对所有样本进行排序,取排序后的样本列表中所有值的中点(midpoints)作为阈值来考虑,即如有十个样本,那么取九个中点的值,作为阈值来测评。根据每个阈值来计算信息增益,最后选择得到信息增益最大的那个阈值。

小结:为了让决策树在每个节点处理连续值特征时能分割,考虑使用不同的值来分类,进行常规的信息增益计算,然后选择信息增益最大的那个阈值。

22.6 决策树泛化为回归算法

将决策树泛化为回归算法,以便能预测;

问题:如果一个动物它是尖尖耳朵,圆脸,那么它的预测的体重是?

决策树将基于训练样本中的权重平均值进行预测。

image.png

如果从头构建一颗决策树,如何选择特征,使用这个数据集来预测体重,如何选择特征以分类

这颗决策树的目的不是分类,而是预测体重(不用管猫或狗),即通过哪个特征分类所得到的两组,他们的体重值的方差最小,那么通过该特征所预测的体重就越好。

(具备哪种特征的动物,可能具备更大的体重/更小的体重/平均体重)

image.png

对于每个特征所分类的两组,计算它们的方差,及加权平均后的值。

类似于信息增益中,计算的是熵的减少值,这里也计算方差的减少值,所以需要计算根节点数值的方差值。

含义是,通过某特征的分类,该组体重值的变动/方差变得更加小,预测的也就更准确。

在回归树中,选择带来最大的方差减少的特征。

选择了耳朵作为分类特征后,再分别拿左右的五个样本,来继续构建决策树,选择新的特征来分组(选择那个能带来最大方差减少的特征),从而使得体重值的分布更加均匀,方差更小,递归地循环这个过程,直到达到了可以停止的标准。

比如方差小于某个阈值,比如回归树的深度达到最大深度,等。

22.7 使用多个决策树

使用单个决策树的缺点:它可能对数据中微小的变化高度敏感;

方案:构建多个决策树,决策树集群 tree ensemble,以达到更稳健的算法,

仅改变一个样本时,信息增益的最高的特征就会从耳朵变为胡须。

改变一个样本就能导致算法在根节点进行不同的分割,从而得到完全不同的树,这使得这个算法比较敏感,不稳健not robust。

如果不止训练一棵树,而是训练一堆不同的树,会得到更加精准的预测。

Tree ensemble 树集成

假设有三棵树,每颗都是一种合理的区分猫和非猫的方法。

image.png

如果有一个新样本来区分猫和非猫;

需要做的就是在这个新样本上运行这三棵树,并且让它们对最终预测投票,。

假设一个样本,它有尖尖耳朵,非圆脸,有胡须,在这三棵树上,分别预测得到的结果是:猫、非猫、猫;

实际上会让他们投票,投票结果为两个猫一个非猫,那么这个树集成的预测结果就是猫。

image.png

我们使用树集成的原因是它拥有大量的决策树,并且让他们投票,这使得整体算法对任何单颗树的影响变得不那么敏感。这使得整个算法更加健壮。

但是,如何得出所有这些树的不同结果的合理解释呢?对于同样的样本,但是每颗树的预测结果可能不同,如何让它们进行合理的投票?

一种统计学中的技术,有放回抽样,有助于构建树集成。

22.8 构建树集合-有放回抽样

四个颜色的tokens:红色、黄色、绿色、蓝色;

进行有放回的抽样;

多次重复这个有放回的抽样;

有放回抽样在构建树集合中的应用

构建多个随机训练集,这些训练集和原始训练集略有不同。

原始训练集:五只猫 + 五只狗;

从训练集中随机取一只动物,记录特征(耳朵脸型胡须等),并放回

然后重复这个有放回抽样的过程,不断记录特征。

最后得到十个例子,其中有些是相同的。最后得到的这个训练集并不是原始训练集的全部,只是其中的一部分。

image.png

有放回的抽样过程,构造了一个新训练集,有些类似于原始训练集,但又不同。

这将是构建树集合的关键。

随机森林算法:一个强大的树集合算法,效果远好于使用单个决策树。

构建树样本:

一个大小为 m 的训练集;

b = 1 写为 B

使用有抽样放回方法创建一个大小为m的新训练集(可能存在重复样本);

使用这个新训练集训练一个决策树;

重复执行第2、3步,得到一个新的决策树。

B为循环重复的次数,建议64-128,;

假如生成了100个决策树,在下一次的预测中,让这100个树都参与投票决策。

事实证明,设定更大的B,不会影响性能。但超过某个值后,收益会递减,当B远大于该数值时,实际效果不会有明显的提升。该数值大概在100左右。

这种树集成的具体实例有时也被称为袋装决策树,指的是将原始训练集放入虚拟袋中,以构建新训练集。

image.png

改良:修改这个算法,可以使其表现更好。这会将这个算法从袋装决策树 bagged decision tree 转变为 随机森林算法 the random forest algorithm。关键思想是,即使使用这种有放回的抽样程序,有时你最终总是在决策树的根节点使用相同的分裂,以及在根节点附近进行非常相似的分裂。(在当前示例的训练集中,根节点使用了不同的特征来分类,但实际对于其他很多数据集来说,在决策树的根节点几乎总是使用相同的特征来分类)。

对算法可以修改,可以进一步尝试在每个节点随机化特征选择,这些在节点处特征的更随机的选择,可能会导致所训练得到的树集合变得更加的不同(认为是学到了更多维度的特征?及其关联关系?因为原数据集放回抽样得到的新训练集总是相似的?)。这样,你会得到更加准确的预测。

通常的做法是,在每个节点选择特征进行分裂时,如果有n个特征可用,我们从中选择一个特征的随机子集(包含k个特征,k<n),并允许算法仅从这k个特征子集中选择,换句话说,你会选择k个特征作为允许选择的范围,从这k个特征中,选择信息增益最高的特征,作为分裂作用的特征。

当n很大时,比如几十个,几百个,k的典型选择是选择n的平方根。

这种做法既保证了公平性,也保证客观性,知识在树的数量的选择和特征的数量上,我们需要通过某种方法和公式进行权衡,在计算量和客观性中的 tradeoff。

随机森林算法,更多使用于具有大量特征的更大问题。

通过对这种算法的进一步修改,得到了随机森林算法,通常会工作的更好,比单个决策树要健壮 robust 得多。

为什么它更健壮?

放回抽样方法引起了算法探索了数据的许多小变化,用这些新训练集在训练不同的决策树时,这些变化是平均到数据上了,这意味着对训练集的任何小的进一步改动,都不太可能对随机森林算法整体的输出有较大的影响。因为它已经探索并平均了新训练集的许多微小变化。

1. 随机森林进一步降低模型方差,增强泛化能力
这是最根本的原因。

  • 袋装法的作用:
    袋装法本身就是为了降低方差而设计的。通过对数据进行有放回抽样,并训练多个模型进行集成,可以平滑掉单棵决策树因对训练数据过于敏感而产生的高方差。但是, 如果基础模型(决策树)本身非常不稳定且高度相似,那么集成的效果会受限。

  • 随机森林的改进:通过特征随机性,随机森林强制让每棵树变得更加“不同”。

分析:想象一下,如果所有树都在每个节点上审视所有特征,那么最有预测力的那几个特征总是会出现在树的顶部节点。这会导致所有树的结构非常相似,即树与树之间是高度相关的。虽然袋装法用了不同的数据子集,但如果数据有噪声,这些高度相关的树可能会“集体犯错”。

随机森林通过限制特征选择,刻意地让每棵树“学得差一点”、更片面一点。有的树可能因为没看到关键特征而被迫使用次要特征进行分裂。这样,每棵树都从不同的“视角”去看待数据。当这些多样化的、不完美的模型集成在一起时,它们犯的错误各不相同,通过“集体投票”可以互相纠正,从而得到更稳定、更准确的结果。这显著降低了模型整体的方差。

机器学习工程师在哪里露营?

在随机森林中…

http://www.dtcms.com/a/461573.html

相关文章:

  • asp制作网站wordpress使用端口
  • 【机器学习】(一)实用入门指南——如何快速搭建自己的模型
  • 【数值分析】插值法实验
  • 地方门户网站的前途搜索引擎大全全搜网
  • 如何给oracle新建架构(schema)
  • 天地数码携手一半科技PLM 赋能应对全球市场,升级热转印色带研发能力
  • 构筑智能防线:大视码垛机如何重新定义工业安全新标准
  • iPhone17实体卡槽消失?eSIM 普及下的安全挑战与应对
  • 什么RPA可以生成EXE
  • 网站开发设计jw100交换链接的作用
  • 企业推广网站建设报价吉林网站建站系统平台
  • 热壁MOCVD有助于GaN-on-AlN HEMT
  • 网站app微信三合一怎么看网站后台什么语言做的
  • 【深度学习新浪潮】大模型推理实战:模型切分核心技术(上)—— 张量并行原理+国内开源案例+踩坑点
  • 高效SQLite操作:基于C++模板元编程的自动化封装
  • uniApp App内嵌H5打开内部链接,返回手势(左滑右滑页面)会直接关闭H5项目
  • 文字排版网站网站建设的宣传词
  • K8s学习笔记(十七) pod优雅终止流程
  • Redis-基础介绍
  • Redis常用数据库及单线程模式
  • Subword-Based Tokenization策略之BPE与BBPE
  • 网站关键词用热门的还是冷门青岛天河小学网站建设
  • 个人域名备案 网站名称一元购网站建设流程图
  • 企业级灰度发布架构:基于Nginx的精细化流量治理与平滑演进实践
  • 【滑动窗口专题】第一讲:长度最小的子数组
  • 软考-系统架构设计师 基于架构的软件开发方法详细讲解
  • 电子电气架构 --- 操作系统的基本概念
  • 苏州做网站公司电话wordpress资源分享网
  • 手机能建设网站企业的做网站
  • Unity笔记(十一)——换装、Spine骨骼动画、3D动画相关