树模型详解

决策树

决策树模型

  • ① 树模型不用做scaling
  • ② 树模型不太需要做离散化
  • ③ 用Xgboost等工具库,是不需要做缺失值填充
  • ④ 树模型是非线性模型,有非线性的表达能力

决策树基于“树”结构进行决策:
每个“内部结点”对应于某个属性
每个分支对应于该属性的某个取值
每个“叶结点”对应于一个“预测结果”

学习过程: 通过对训练样本的分析来确定“划分属性”(即内部结点所对应的属性)
预测过程: 将测试示例从根结点开始,沿着划分属性所构成的“判定测试序列”下行,直到叶结点

现想象一位捉急的母亲想要给自己的女娃介绍一个男朋友,于是有了下面的对话:…这个女孩的挑剔过程就是一个典型的决策树。

决策树的构造

  • 总体流程:“分而治之”(divide-and-conquer)

自根至叶的递归过程
在每个中间结点寻找一个"划分"(split or test)属性

决策树的构造是一个递归的过程,有三种情形会导致递归返回:

(1) 当前结点包含的样本全属于同一类别,这时直接将该节点标记为叶节点,并设为相应的类别;(2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分,这时将该节点标记为叶节点,并将其类别设为该节点所含样本最多的类别;

(3) 当前结点包含的样本集合为空,不能划分,这时也将该节点标记为叶节点,并将其类别设为父节点中所含样本最多的类别。

算法的基本流程如下图所示:

最佳属性选择方法

可以看出:决策树学习的关键在于如何选择划分属性,不同的划分属性得出不同的分支结构,从而影响整颗决策树的性能。决策树划分最佳属性有常用的三种方法:ID3,C4.5和CART。

ID3算法

ID3算法使用信息增益为准则来选择划分属性。

  • 信息熵

“信息熵”(information entropy)是度量样本集合“纯度”的常用指标,假定当前样本集合D中第k类样本所占比例为pk,则样本集合D的信息熵定义为:

计算信息熵时约定: 若p=0,则plog2p=0.Ent(D) 的最小值为 0,最大值为log2ylog_2 ylog2​y。Ent(D)的值越小,则D的纯度越高,Ent(D)的值越大,则D越不纯,即D越混乱。

假如袋子里面有三种球红白黄,每种球数量一样时,摸球时不确定性最大即熵最大;
只有红球时,熵最小为0(p1=0,p2=0,p3=1,Ent(D)=0)。

  • 信息增益

信息增益(information gain)使用划分前后集合熵的差值(信息的不确定减少的程度)来衡量使用当前特征对于样本集合D划分效果的好坏。
离散属性 a 的取值 a1,a2,a3,...aV{a^1,a^2,a^3,...a^V}a1,a2,a3,...aV,其中,DvD^vDv表示D中在a上取值的样本集合.也就是说,通过属性a划分样本集D,产生了V个分支节点,v表示其中第v个分支节点。易知:分支节点包含的样本数越多,表示该分支节点的影响力越大。

以属性a对数据集D进行划分,故可以计算出划分后相比原始数据集D获得的“信息增益”为:

​ 其中,∣⋅∣|·|∣⋅∣ 表示样本量。

**因此,信息增益就表示划分前后集合的不确定性下降多少,信息增益越大,表示不确定性下降越多,**使用该属性划分样本集D的效果越好,因此ID3算法在递归过程中,每次选择最大信息增益的属性作为当前的划分属性。

C4.5算法

ID3算法存在一个问题,就是偏向于取值数目较多的属性。因此C4.5算法使用了“增益率”(gain ratio)来选择划分属性,来避免这个问题带来的困扰。

属性a 的可能取值数目越多(即V 越大),则IV(a) 的值通常就越大.

使用情形:首先使用ID3从候选划分属性中找出信息增益高于平均水平的,接着C4.5计算这些候选属性的增益率,从中选取增益率最高的作为划分属性。

CART算法

CART决策树使用“基尼指数”(Gini index)来选择划分属性,基尼指数反映的是从样本集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)越小越好。信息熵越小,类别不一致概率越小,因此,基尼指数也越小。即信息熵<=>基尼指数。

基尼指数定义如下:

进而,使用属性α划分后的基尼指数为:

剪枝处理

剪枝(pruning)则是决策树算法对付过拟合的主要手段,剪枝的策略有两种如下:

  • 预剪枝(pre-pruning):在构造的过程中先评估,再考虑是否分支。

  • 后剪枝(post-pruning):在构造好一颗完整的决策树后,自底向上,评估分支的必要性。

预剪枝“贪心”的本质阻止了分支的展开,在一定程度上带来了欠拟合的风险。而后剪枝则通常保留了更多的分支,因此采用后剪枝策略的决策树性能往往优于预剪枝,但其自底向上遍历了所有节点,并且计算性能,训练时间开销相比预剪枝大大提升。

连续值与缺失值处理

一、连续值处理

对于连续值的属性,若每个取值作为一个分支则显得不可行,因此需要进行离散化处理,常用的方法为二分法,具体做法为:n 个属性值可形成(n-1) 个候选划分,把n-1个候选划分值当做离散属性处理, 使用二分法寻找最佳划分点t将样本集D在属性α上分为≤t与>t。

1.首先将α的所有取值按升序排列,所有相邻属性的均值作为候选划分点(n-1个,n为α所有的取值数目)。

2.计算每一个划分点划分集合D(即划分为两个分支)后的信息增益,选择最大信息增益的划分点作为最优划分点。

二、缺失值处理

现实中常会遇到不完整的样本,即某些属性值缺失。有时若简单采取剔除,则会造成大量的信息浪费,因此,在属性值缺失的情况下需要解决两个问题:

(1)如何选择划分属性。

(2)给定划分属性,若某样本在该属性上缺失值,如何划分到具体的分支上。

基本思路: 样本赋权,权重划分

假定为样本集中的每一个样本都赋予一个权重,根节点中的权重初始化为1,则定义:

对于(1):仅通过无缺失值的样例来判断划分属性的优劣。

具体做法是通过在样本集D中选取在属性α上无缺失值的样本子集,计算在该样本子集上的信息增益,最终的信息增益等于该样本子集划分后信息增益乘以样本子集占样本集的比重。即:

Gain(D,a)小于Gain(D~,a)Gain(\tilde D,a)Gain(D~,a)的物理含义:因为因为样本增多,下降的信息熵变少,即信息增益减少,因此,Gain(D,a)小于Gain(D~,a)Gain(\tilde D,a)Gain(D~,a)

对于(2):若该样本子集在属性α上的值缺失,则将该样本以不同的权重(即每个分支所含样本比例)划入到所有分支节点中。该样本在分支节点中的权重变为:

回归树

分类回归树(Classification and Regretion Tree,CART),回归树是将属性映射到分数(score)的函数,每棵子树就是一个函数,整颗分类树就是一个分段函数。

回归树模型定义了如何得到预测分数,它可以用于分类,回归,排名…

  1. 模型结构:对特征进行二元分裂。
  2. 叶子结点输出值:对应一个得分。

二维分段函数

  1. 属性划分依据:在候选属性中,选择使得划分后基尼系数最小的那个属性。

反映了从D中随机抽取两个样例,其类别不一致的概率:

如果以西瓜书为例的话,其中pkp_kpk​就是模型输出好瓜的概率.

机器学习(六)树模型详解相关推荐

  1. 【机器学习】决策树模型详解

    现在工业和竞赛上比较流行的模型大都是集成学习模型, 如LGB, XGB, 这些模型的本质是若干个决策树组成的, 虽然单纯决策树本身的使用不是特别广泛, 但是从本质上理解这个基础模型, 能更好地理解集成 ...

  2. 图解机器学习算法(6) | 决策树模型详解(机器学习通关指南·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/34 本文地址:https://www.showmeai.tech/article-d ...

  3. 使用pickle保存机器学习模型详解及实战(pickle、joblib)

    使用pickle保存机器学习模型详解及实战 pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. "Pickling"是将Python对象层次结构转换为字节 ...

  4. 【机器学习基本理论】详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

    [机器学习基本理论]详解最大似然估计(MLE).最大后验概率估计(MAP),以及贝叶斯公式的理解 https://mp.weixin.qq.com/s/6H0gmMWvTExySMraroLVlQ 最 ...

  5. 基于spark mllib_Spark高级分析指南 | 机器学习和分析流程详解(下)

    - 点击上方"中国统计网"订阅我吧!- 我们在Spark高级分析指南 | 机器学习和分析流程详解(上)快速介绍了一下不同的高级分析应用和用力,从推荐到回归.但这只是实际高级分析过程 ...

  6. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  7. ASP.NET Core的配置(2):配置模型详解

    在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式,其中涉及到三个重要的对象,它们分别是承载结构化配置信息的Configuration,提供原始配置源数据的ConfigurationProvi ...

  8. 自编码器模型详解与实现(采用tensorflow2.x实现)

    自编码器模型详解与实现(采用tensorflow2.x实现) 使用自编码器学习潜变量 编码器 解码器 构建自编码器 从潜变量生成图像 完整代码 使用自编码器学习潜变量 由于高维输入空间中有很多冗余,可 ...

  9. OSI七层模型详解物理层、数据链路层、网络层、传输层.....应用层协议

    OSI七层模型详解(物理层.数据链路层.网络层.传输层.....应用层协议与硬件) OSI 七层模型通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯,因此其最主要的功能就是帮助不同类型 ...

最新文章

  1. 用人话理解hash算法、特性、唯一性等
  2. [C#学习]多线程编程——多线程基础
  3. SSRS动态设置文本框属性
  4. android 动态label,Android仿抖音实现动态壁纸
  5. IOS —— 网络那些事(上) - http协议
  6. java获得jsp的name注解_记录Java注解在JavaWeb中的一个应用实例
  7. python中的split函数的用法实例_python中的split()函数的用法
  8. 关于JVM方法调用的那些事
  9. 网上商城项目总结报告
  10. Excel VBA宏编程入门(五)——用户交互
  11. er studio mysql_解决ER\Studio无法生成mysql列注释问题
  12. ggplot做双曲线阈值火山图
  13. ubuntu使用certbot给nginx添加ssl证书
  14. mysql的索引缺点_Sqlite数据库中索引的使用、索引的优缺点
  15. MSDC 4.3 接口规范(12)
  16. 渗透攻击MS08-067
  17. 把音频中的某个人声去掉_能不能把一段音频中的人声和背景音乐分开
  18. 解决腾讯地图标记多个点,只渲染最后一个点问题
  19. 如何在本地进行一个IP访问多个域名
  20. 网站安全检测之信息收集类工具

热门文章

  1. JDK isn‘t specified for module ‘demo-mail‘异常的解决办法
  2. 新建用户并赋予oracle用户权限
  3. What is CRUD?
  4. 单变量微积分笔记7——曲线构图
  5. 开源LLM「RWKV」想要打造AI领域的Linux和Android|ChatAI
  6. Fedora 31安装网易云音乐
  7. wg26协议c语言程序,WG26/WG34两种协议的说明
  8. 清华大学计算机与芯片专业,池保勇
  9. [幻灯片]04-系统用例图和用例规约-软件需求设计方法学全程实例剖析
  10. 数据库大作业:Python实现疫苗接种数据库管理