决策树(Decision Tree)

2023-11-06

简介和算法

决策树是机器学习最常用的算法之一,它将算法组织成一颗树的形式。其实这就是将平时所说的if-then语句构建成了树的形式。 这个决策树主要包括三个部分:内部节点、叶节点和边。内部节点是划分的属性,边代表划分的条件,叶节点表示类别。构建决策树 就是一个递归的选择内部节点,计算划分条件的边,最后到达叶子节点的过程。

伪代码:
输入: 训练数据集D,特征集A,阈值 ϵ \epsilon ϵ.
输出: 决策树T.

  1. 如果D中所有实例属于同一类 C k C_k Ck,则置T为单结点树,并将 C k C_k Ck作为该结点的类,返回T.
  2. 如果 A = ∅ A=\emptyset A=, 则置T为单结点树,并将D中最多的类 C k C_k Ck作为该节点的类,返回T.
  3. 否则,根据相应公式计算A中各个特征对D的(信息增益、信息增益比、基尼指数等),选择最合适的特征 A g A_g Ag.
  4. 如果 A g A_g Ag的得分小于 ϵ \epsilon ϵ,则置T为单结点树,并将 C k C_k Ck作为该结点的类,返回T.
  5. 否则,根据 A g A_g Ag特征取值,对数据D进行划分,继续递归构造决策树, 返回T.

核心公式

信息熵: P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X=x_i)=p_i, i=1,2,...,n P(X=xi)=pi,i=1,2,...,n 则随机变量X的熵定义为: H ( P ) = − ∑ i = 1 n p i l o g p i H(P)=-\sum_{i=1}^{n}p_ilog{p_i} H(P)=i=1npilogpi 熵越大,随机变量的不确定性就越大,当 p i = 1 n p_i=\frac{1}{n} pi=n1时,随机变量的熵最大等于logn,故 0 ≤ H ( P ) ≤ l o g n 0 \leq H(P) \leq logn 0H(P)logn. 常见的决策树由三种: ID3、C4.5、CART.

model feature select 树的类型 计算公式
ID3 {分类:信息增益} 多叉树 g ( D , A ) = H ( D ) − H A ( D ) g(D,A)=H(D)-H_A(D) g(D,A)=H(D)HA(D)
C4.5 {分类:信息增益比} 多叉树 g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
CART {分类:基尼指数} 二叉树 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
CART {回归:平方误差} 二叉树 m i n j , s [ m i n c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − c 1 ) 2 + m i n c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] min_{j,s}[min_{c_1} \sum_{x_i \in R_1(j,s)}(y_i-c_1)^2 + min_{c_2} \sum_{x_i \in R_2(j,s)}(y_i-c_2)^2] minj,s[minc1xiR1(j,s)(yic1)2+minc2xiR2(j,s)(yic2)2]

其中, H A ( D ) = H ( D ∣ A ) H_A(D)=H(D|A) HA(D)=H(DA), R 1 ( j , s ) = x ( j ) ≤ s R_1(j,s)={x^{(j)}\leq s} R1(j,s)=x(j)s, R 2 ( j , s ) = x ( j ) > s R_2(j,s)={x^{(j)} > s} R2(j,s)=x(j)>s.

算法十问

1.决策树和条件概率分布的关系?

决策树可以表示成给定条件下类的条件概率分布. 决策树中的每一条路径都对应是划分的一个条件概率分布. 每一个叶子节点都是通过多个条件之后的划分空间,在叶子节点中计算每个类的条件概率,必然会倾向于某一个类,即这个类的概率最大.

2.ID3和C4.5算法可以处理实数特征吗?如果可以应该怎么处理?如果不可以请给出理由?

ID3和C4.5使用划分节点的方法分别是信息增益和信息增益比,从这个公式中我们可以看到 这是处理类别特征的方法,实数特征能够计算信息增益吗?我们可以定义X是实数特征的信息增益是, G ( D ∣ X : t ) = H ( D ) − H ( D ∣ X : t ) G(D|X:t)=H(D)-H(D|X:t) G(DX:t)=H(D)H(DX:t).其中 H ( D ∣ X : t ) = H ( D ∣ x ≤ t ) p ( x ≤ t ) + H ( D ∣ x > t ) p ( x > t ) H(D|X:t)=H(D|x \leq t)p(x \leq t)+H(D|x>t)p(x>t) H(DX:t)=H(Dxt)p(xt)+H(Dx>t)p(x>t),则 G ( D ∣ X ) = m a x t = G ( D ∣ X : t ) G(D|X)=max_t=G(D|X:t) G(DX)=maxt=G(DX:t). 对于每一个实数可以使用这种方式进行分割. 除此之外,我们还可以使用特征的分桶,将实数特征映射到有限个桶中,可以直接使用ID3和C4.5算法.

3.既然信息增益可以计算,为什么C4.5还使用信息增益比?

在使用信息增益的时候,如果某个特征有很多取值,使用这个取值多的特征会的大的信息增益,这个问题是出现很多分支,将数据划分更细,模型复杂度高,出现过拟合的机率更大。使用信息增益比就是为了解决偏向于选择取值较多的特征的问题. 使用信息增益比对取值多的特征加上的惩罚,对这个问题进行了校正.

4.基尼指数可以表示数据不确定性,信息熵也可以表示数据的不确定性. 为什么CART使用基尼指数?

信息熵0, logK都是值越大,数据的不确定性越大. 信息熵需要计算对数,计算量大;信息熵是可以处理多个类别,基尼指数就是针对两个类计算的,由于CART树是一个二叉树,每次都是选择yes or no进行划分,从这个角度也是应该选择简单的基尼指数进行计算.

5.决策树怎么剪枝?

一般算法在构造决策树的都是尽可能的细分,直到数据不可划分才会到达叶子节点,停止划分. 因为给训练数据巨大的信任,这种形式形式很容易造成过拟合,为了防止过拟合需要进行决策树剪枝. 一般分为预剪枝和后剪枝,预剪枝是在决策树的构建过程中加入限制,比如控制叶子节点最少的样本个数,提前停止. 后剪枝是在决策树构建完成之后,根据加上正则项的结构风险最小化自下向上进行的剪枝操作. 剪枝的目的就是防止过拟合,是模型在测试数据上变现良好,更加鲁棒.

6.ID3算法,为什么不选择具有最高预测精度的属性特征,而不是使用信息增益?

7.为什么使用贪心和其发生搜索建立决策树,为什么不直接使用暴力搜索建立最优的决策树?

决策树目的是构建一个与训练数据拟合很好,并且复杂度小的决策树. 因为从所有可能的决策树中直接选择最优的决策树是NP完全问题,在使用中一般使用启发式方法学习相对最优的决策树.

8.如果特征很多,决策树中最后没有用到的特征一定是无用吗?

不是无用的,从两个角度考虑,一是特征替代性,如果可以已经使用的特征A和特征B可以提点特征C,特征C可能就没有被使用,但是如果把特征C单独拿出来进行训练,依然有效. 其二,决策树的每一条路径就是计算条件概率的条件,前面的条件如果包含了后面的条件,只是这个条件在这棵树中是无用的,如果把这个条件拿出来也是可以帮助分析数据.

9.决策树的优点?

优点: 决策树模型可读性好,具有描述性,有助于人工分析;效率高,决策树只需要一次性构建,反复使用,每一次预测的最大计算次数不超过决策树的深度。
缺点: 对中间值的缺失敏感;可能产生过度匹配的问题,即过拟合。

10.基尼系数存在的问题?

基尼指数偏向于多值属性;当类数较大时,基尼指数求解比较困难;基尼指数倾向于支持在两个分区中生成大小相同的测试。

面试真题

  1. 决策树如何防止过拟合?
  2. 信息增益比相对信息增益有什么好处?
  3. 如果由异常值或者数据分布不均匀,会对决策树有什么影响?
  4. 手动构建CART的回归树的前两个节点,给出公式每一步的公式推到?
  5. 决策树和其他模型相比有什么优点?
  6. 决策树的目标函数是什么?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

决策树(Decision Tree) 的相关文章

  • 【VSCode】Windows系统的WSL无法启动vscode问题

    在WSL环境中无法启动vscode时 有可能是 WSL 插件的影响 可以使用下面的步骤来解决 Open VS Code on Windows Open Extensions and then search on WSL It should
  • Qt使用Qt Designer进行界面设计

    上一章我们使用代码直接进行界面设计 这一章我们使用Qt Designer进行界面设计 简单直接 所见即所得 大大提高了工作效率 特别是对于复杂界面 1熟悉Qt Designer Qt Designer是Qt专为界面设计做的软件 使得用户能够
  • 使用Python和OpenCV进行图像拼接和全景图构建

    使用Python和OpenCV进行图像拼接和全景图构建 1 效果图 2 原理及步骤 3 源码 3 1 拼接类源码 3 2 拼接用到的工具类 3 3 叠加多张图像源码 参考 这篇博客将介绍如何使用OpenCV执行图像拼接和全景构建 即给定两个
  • Hana Studio开发简介

    Hana Studio作为SAP官方的IDE 工具 推出也有一段时间了 就目前使用的情况来看 如果是做常规S 4开发 SAP GUI还是首要选择 一 IDE安装路径 链接 https pan baidu com s 1qMg8duocTa3
  • pyqt5实现按钮单窗口多页面切换

    1 使用QT Designer进行设计 创建一个MainWindow 从左侧选出Push Button Stacked Widget分别拖到我们的MainWindow里 怕看不见Stacked Widget 给他上个色 在QT Design
  • vant-weapp Area 省市区选择的使用及遇到的坑

    json中 导入 van area vant weapp area index 基础用法
  • SpringCloud gateway (史上最全)

    1 1 SpringCloud Gateway 简介 SpringCloud Gateway 是 Spring Cloud 的一个全新项目 该项目是基于 Spring 5 0 Spring Boot 2 0 和 Project Reacto
  • Kubernetes踩坑(二): Service IP(LVS)间断性TCP连接故障排查

    问题阶段 一 用户反应某个redis使用卡顿 连接该redis服务使用的是svc代理 即ipvs snat的方式 ipvsadm L发现 VIP收到的6379端口的数据包 会以rr的方式分别转发到pod的80 6379端口上 相当于会有50
  • mysql增加分区

    增加分区 是修改原有分区 从而替换现有分区 ALTERTABLE xxx表 PARTITION BY RANGE COLUMNS CREATE TIME PARTITION p20210901 VALUES LESS THAN 2021 1
  • 【华为OD机试c++】最长广播效应【2023 B卷

    题目描述 某通信网络中有N个网络结点 用1到N进行标识 网络中的结点互联互通 且结点之间的消息传递有时延 相连结点的时延均为一个时间单位 现给定网络结点的连接关系link i u v 其中u和v表示网络结点 当指定一个结点向其他结点进行广播
  • linux grep 带空格的内容,或者搜索多个单词,一段话

    错误示范 more xxx log grep UPDATE user info 正确方法 more xxx log grep UPDATE user info
  • 第23讲 Python range 数据类型

    您的 关注 和 点赞 是认可 是支持 是动力 如意见相佐 可留言 本人必将竭尽全力试图做到准确和全面 终其一生进行修改补充更新 本文首发在IT羊资源网 IT羊资源网 网址 https www ityangzy com IT羊资源网是IT世界
  • GB9706.1-2007+2020和IEC60601-1:2005 3.0+2012 3.1标准主要差异解析

    目录 GB9706 1 2007医用电气设备 第1部分 安全通用要求 GB9706 1 2020医用电气设备 第1部分 基本安全和基本性能的通用要求 IEC60601 1 第二版和第三版差异 1 最关键变化 2 新术语名词引用 3 设备分类

随机推荐

  • [1022]Hive insert 字段表错位

    文章目录 Hive insert 字段表错位踩坑 1 问题描述 2 排查过程 3 问题定位 4 解决方案 hive的insert语句列顺序问题以及新增字段遇到的坑 insert语句列顺序 对新增字段插入数据再查询发现是NULL Hive i
  • 技术管理主要做什么?

    最近一直在思考技术转管理过程中需要注意到的一些事情 现在就总结下分享给大家看看 核心职责 确定团队目标 不论项目大小 一定要有目标 有目标才能让所有人看到方向 明确每天工作的意义 单纯技术人员应该切换思维为全局性 而不局限于技术层面 现在个
  • 某盾滑块js逆向

    注 本篇博客仅供学习使用 请勿用做其他商业用途 如有侵权 请联系本菜鸟删除 本小菜鸟已经快两个月没更新文章了 一年总有那么356天不想努力 就想躺平 最开始学习js逆向的时候 用Python算法还原了某盾的空间推理 到现在已经过去半年多 这
  • Mybaties-plus 分页使用

    1 简介 查询分页分为物理分页和逻辑分页 1 逻辑分页 一次性查出所有数据 然后在内存中筛选需要的数据 缺点 大数据量时容易造成内存溢出 因为是一次性查出每次返回需要的所有数据时效性低不推荐使用 2 物理分页 通过sql 的limit 去控
  • 联想小新Pro14安装Ubuntu后无法进入系统、亮度无法调节、蓝牙无法打开、输入卡顿延迟等问题的解决办法

    联想小新Pro14安装Ubuntu后无法进入系统 亮度无法调节 蓝牙无法打开等问题的解决办法 前言 月初买了台联想小新Pro14 AMD锐龙5800H版本 在安装Ubuntu 20 04 2 LTS 系统时遇到了一些问题 所幸在众多网友前辈
  • Fetch&Fetch的二次封装

    前言 客户端服务器端通信方式ajax ajax JQ的类库 axios类库 jsonp fetch fetch是Es6新提供的API 基于不同于 XMLHttpRequest的方式 基于客户端和服务器端的数据通信 而且本身是基于promis
  • 数据预测分析

    数据预测分析 Matlab实现TCN时间卷积网络数据预测分析 目录 数据预测分析 Matlab实现TCN时间卷积网络数据预测分析 基本介绍 数据下载 程序设计 参考资料 致谢 基本介绍 此示例说明如何使用通用时间卷积网络 TCN 对序列数据
  • 南邮NOJ上机系统#PROB1005涂色问题

    涂色问题 描述 这是一个涂色问题 现在有一张网格 一共 3 行 每行 n 个 你需要用 3 种颜色给网格上色 需要确保相邻格子颜色不同 请问一共有多少种上色方案呢 答案对 109 7 取模 输入 一行一个整数 n 1 n 106 输出 一行
  • spring学习记录笔记-AOP 通知的五大注解详解

    印象云笔记记录 提供链接 点我打开笔记
  • python3中TypeError: data type not understood的解决方法X_b = np.hstack([np.ones((len(x), 1)), x.reshape(-1,

    学习6 4 实现线性回归中的梯度下降法时 在JupterNotebook中按照教程来完全没有问题 但是在pycharm中封装这个方法时 def fit gd self X train y train eta 0 01 n iters 1e4
  • 【动手学习深度学习v2】循环神经网络-2.文本预处理

    上一篇 动手学深度学习V2 循环神经网络 1 序列模型 文章目录 2 文本预处理 2 1 读取数据集 2 2 词元化 2 3 词表 2 4 整合 2 文本预处理 序列数据的多种形式中 文本数据是最常见的一种 在英文文本中一篇文章或者一段句子
  • C++中类似于Integer.MAX_VALUE的INT_MAX表示

    要想使用需要添加头文件 include
  • Maven下载依赖踩坑:Could not transfer artifact org.springframework.boot:spring-boot-starter-parent

    环境 IDEA 公司办公环境 本文只适用于启用了代理服务进行联网的情况 非此情况的朋友们还请另找原因 创建工程后spring boot starter parent等依赖标红 因为对应的依赖找不到 下载时报错误 Could not tran
  • Unity学习之性能分析

    Unity 提供的性能分析工具 Unity Profiler 测量 Unity 编辑器 您的应用程序在运行模式下 或在开发模式下连接到设备运行时的性能 Profiling Core 包 提供的 API 可用于将上下文信息添加到 Unity
  • Python获取各大企业招聘需求以及可视化分析展示

    前言 大家早好 午好 晚好吖 欢迎光临本文章 课程亮点 1 爬虫的基本流程 2 可视化分析展示 3 requests模块的使用 4 保存csv 开发环境 python 3 8 运行代码 pycharm 2022 3 2 辅助敲代码 专业版
  • antd table表格组件基本使用

    第一次使用antd的table表格组件 借用官方文档数据 展示下Demo import React from react import Table from antd const columns title Name dataIndex n
  • 全国计算机等级考试二级C语言考试学习笔记

    1 C语言程序的结构 1 1 程序的构成 main函数和其他函数 1 1 1 main函数 一个完整的C语言程序 是由一个 且只能有一个main 函数 又称主函数 必须有 和若干个其他函数结合而成 可选 main函数是C语言程序的入口 程序
  • 药监局网瑞数绕过与反爬学习

    药监局瑞数反爬学习 贴逆向好的js代码 剩下靠你们自己了 需要返回cookie 否则无限跳转 文件夹中带有nginx静态服务配置 使用nginx后 并在hosts中添加一行app1 nmpa gov cn 你nginx的ip 浏览器访问ht
  • 原生js实现对select下拉列表的内容过滤

    原生js实现对select下拉列表的内容过滤 场景描述 笔者在工作的过程中 经常碰到这样的业务场景 客户要求一个下拉列表框旁边要有一个输入过滤的功能 如下图所示 由于在一个项目中出现了好多这样的需求 笔者就写了个采用原生js实现的对下拉的过
  • 决策树(Decision Tree)

    Author xiaoran Email PursuitFlow 163 com xiaoranone 126 com Datawhale 简介和算法 决策树是机器学习最常用的算法之一 它将算法组织成一颗树的形式 其实这就是将平时所说的if