1. 什么是决策树

学过数据结构与算法的小伙伴应该对树不陌生吧,这里的决策树也是大同小异的,只是每次反之都有一个条件来决定流向的。

1.1 决策节点

通过条件判断而进行分支选择的节点。如:将某个样本中的属性值(特征值)与决策节点上的值进行比较,从而判断它的流向。

1.2 叶子节点

没有子节点的节点,表示最终的决策结果。

1.3 决策树的深度

所有节点的最大层次数。

决策树具有一定的层次结构,根节点的层次数定为0,从下面开始每一层子节点层次数增加

1.4 决策树优点:

可视化 - 可解释能力-对算力要求低

1.5 决策树缺点:

容易产生过拟合,所以不要把深度调整太大了。

2. 为什么有决策树这个算法

决策树的出现,本质上是为了模拟人类的结构化决策过程,并解决实际场景中 “如何从数据中提炼规则” 的问题。具体原因可从以下角度理解:

2.1 模拟人类决策逻辑
人类在做决策时,往往会通过一系列 “是非判断” 逐步缩小范围。例如:买水果时,先看 “是否成熟”→ 再看 “价格是否合理”→ 最后决定 “买不买”;医生诊断时,先问 “是否发烧”→ 再查 “是否咳嗽”→ 最后判断 “可能的疾病”。决策树正是将这种 “层层判断” 的逻辑转化为数学模型,用树状结构(根节点→内部节点→叶节点)清晰呈现决策步骤,让机器能像人一样 “有条理地思考”。

2.2 解决 “从数据到规则” 的转化问题

现实中,很多数据隐含着可解释的决策规则(比如 “什么样的用户会流失”“哪些贷款申请有风险”),但这些规则往往混杂在大量数据中,难以直接观察。
决策树通过算法自动从数据中挖掘这些规则(例如 “如果用户月消费>500 元且使用时长>2 年,则流失概率低”),并以树状图的形式可视化,让规则变得可理解、可复用。

2.3 应对复杂场景的灵活性
与早期的简单模型(如线性回归)相比,决策树能处理非线性关系(例如 “年龄对购买意愿的影响不是简单的正比或反比”),也能同时处理数值型数据(如收入)和类别型数据(如性别),适用场景更广泛。

    举个例子

    我们的决策树深度越深是不是就分的越详细,然后就越正确,但是这样往往就会过度拟合了,我们前面介绍到决策树算力较低那这个地方体现在哪里,看上面的例子,左边和右边的起始条件不同,所以分类的过程也是不一样的,但是我的起始条件对分类越重要是不是就能越快得出结果,那我们怎么来确定这个特征的重要程度呢?

    3. 基于信息增益决策树的建立

    3.1 信息熵

    熵这个词出现在热力学中,熵越大,说明事物越混乱,越不确定,在机器学习中,特征越是不确定是不是就越难确定最终的分类结果,这种不确定性在这里成为信息熵,熵的大小取决于 “不同取值的概率分布是否均匀”,比如

    用 “身高” 预测 “是否喜欢吃辣”。假设身高 160cm 的人中,50% 喜欢吃辣、50% 不喜欢;身高 170cm 的人中,同样是 50% 喜欢、50% 不喜欢…… 无论身高取什么值,目标类别的分布都接近均匀。此时 “身高” 的不确定性高(熵大),但身高数据本身是准确测量的(比如用卷尺精确记录),只是它和 “是否喜欢吃辣” 无关。

    3.2 信息商的公式

    3.3 信息增益

    信息增益是一个统计量,用来描述一个属性区分数据样本的能力。信息增益越大,那么决策树就会越简洁。这里信息增益的程度用信息熵的变化程度来衡量, 上面的例子就有信息增益的影子,信息增益公式:

    信息增益越大的是不是越能反映和类别的关联程度,所以越大的特征就放到前面的决策点出。

    3.4 信息增益决策树建立步骤

    我们先来算一下信息增益,

    但是这里我们算的是职业他的类别很少,我们可以有具体得分类,要是我们看年龄的信息增益且不是要分好多次,所以我们这里以35为界限,弄一个范围,假如我们每一个值都归为一类虽然算力大,但是确实很准的,我们可不能要很准的结果。

    假如就是职业算的信息增益最大,那我们就把他放到第一个判断的决策点,然后我们将这个特征筛选出,对剩下的重新计算,算出新的最大的信息增益。

    4 基于基尼指数决策树的建立(了解)

    基尼指数(Gini Index)是决策树算法中用于评估数据集纯度的一种度量,基尼指数衡量的是数据集的不纯度,或者说分类的不确定性。在构建决策树时,基尼指数被用来决定如何对数据集进行最优划分,以减少不纯度。

    基尼指数的计算

    对于一个二分类问题,如果一个节点包含的样本属于正类的概率是 (p),则属于负类的概率是 (1-p)。那么,这个节点的基尼指数 (Gini(p)) 定义为:

    基尼指数的意义

    • 当一个节点的所有样本都属于同一类别时,基尼指数为 0,表示纯度最高。

    • 当一个节点的样本均匀分布在所有类别时,基尼指数最大,表示纯度最低。

    基尼指数越小的,越排到前面,确定了第一个之后,后面的也继续重复操作。

    5 api

    class sklearn.tree.DecisionTreeClassifier(....)
    参数:
    criterion "gini" "entropy” 默认为="gini" 
    当criterion取值为"gini"时采用 基尼不纯度(Gini impurity)算法构造决策树,
    当criterion取值为"entropy”时采用信息增益( information gain)算法构造决策树.
    max_depth    int, 默认为=None  树的最大深度

    # 可视化决策树
    function sklearn.tree.export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)
    参数:
    estimator决策树预估器
    out_file生成的文档
    feature_names节点特征属性名
    功能:
    把生成的文档打开,复制出内容粘贴到"http://webgraphviz.com/"中,点击"generate Graph"会生成一个树型的决策树图

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.tree import DecisionTreeClassifier, export_graphviz# 1)获取数据集
    iris = load_iris()# 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)#3)标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)# 4)决策树预估器
    estimator = DecisionTreeClassifier(criterion="entropy")estimator.fit(x_train, y_train)# 5)模型评估,计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:\n", score)# 6)预测
    index=estimator.predict([[2,2,3,1]])
    print("预测:\n",index,iris.target_names,iris.target_names[index])# 可视化决策树
    export_graphviz(estimator, out_file="iris_tree.dot", feature_names=iris.feature_names)

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如若转载,请注明出处:http://www.pswp.cn/pingmian/92919.shtml
    繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92919.shtml
    英文地址,请注明出处:http://en.pswp.cn/pingmian/92919.shtml

    如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    地球磁层全球MHD模型中模拟Dst指数的半经验方法

    A semi-empirical approach to simulating the Dst index in global MHD models of Earth’s magnetosphere pdf 1 Introduction Dst指数 (Disturbance storm time index, 地磁暴时扰动指数) 是描述磁暴活动强度应用最广泛的指数,对于研究地磁扰动和磁暴具有重要意…

    什么是脏读、幻读、不可重复读?

    脏读、幻读和不可重复读是数据库事务隔离级别中常见的三种数据一致性问题。它们描述了在并发事务环境下可能出现的异常现象。下面通过对比表格和具体示例进行清晰解析:核心概念对比表问题类型触发场景本质原因示例脏读 (Dirty Read)事务A读取了事务B未提交的修改读取…

    腾讯位置商业授权微信小程序关键词输入提示

    微信小程序JavaScript SDK 开发指南 关键词输入提示 getSuggestion(options:Object) 用于获取输入关键字的补完与提示,帮助用户快速输入 注:坐标系采用gcj02坐标系 options属性说明 属性类型必填说明keywordString是用户输入的关键词(希望…

    LabVIEW菜单操控

    该程序围绕运行时菜单栏操作,实现从初始化构建菜单结构(含菜单项、快捷键 ),到响应交互删除特定菜单项,再到监控界面事件驱动逻辑,完成自定义菜单交互全流程,适配需灵活菜单控制的程序开发场景。…

    Web 服务详解:HTTP 与 HTTPS 配置

    Web 服务详解:HTTP 与 HTTPS 配置 一、HTTP 服务概述 HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在网络上传输网页数据的基础协议,默认使用80 端口,以明文形式传输数据。常见的 HTTP 服务软…

    YOLO-v2-tiny 20种物体检测模型

    一、简介 YOLO-v2-tiny是基于YOLO(You Only Look Once)实时目标检测算法的轻量级版本,专门为嵌入式设备和资源受限环境优化。本模型能够检测20种常见物体类别,在保持较高检测精度的同时大幅减少了计算量和模型大小。 20种物体检测模型, 使用…

    heterophilic graph和hetergeneous graph区别(附带homophilic graph 和homoegeneous graph)

    Heterophilic Graph(异配图)连接的节点在属性上不相似,但是所有节点和边的类别都是同一种类型,数据集如squirrel / chameleon,它们是 heterogeneous graph(异质图)而不是Heterophilic Graph(异配…

    Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,Getshell

    工具介绍 Thinkphp(GUI)漏洞利用工具,支持各版本TP漏洞检测,命令执行,Getshell。JAVAFX可视化编写,博主第一次用javafx来写界面,第一次学习尝试,仅仅只用于学习尝试如果缺少什么payload,欢迎提交…

    GitHub分支保护介绍(Branch Protection)(git分支保护)(通过设置规则和权限来限制对特定分支的操作的功能)

    文章目录**1. 核心功能****a. 防止误操作****b. 强制代码审查****c. 状态检查(Status Checks)****d. 权限控制****2. 如何设置分支保护?**1. **进入仓库设置**2. **添加分支保护规则**3. **配置保护规则**4. **保存设置****3. 常见应用场景**…

    怎么理解On-Premises

    On-Premises 指的是—— 软件、系统、数据中心等部署并运行在企业自己管理的本地硬件或机房里,而不是放在云端或第三方托管环境中。 你可以把它理解成:“服务器在你自己家里(公司机房),而不是寄放在别人家(…

    UserController类讲解

    用户管理控制器,实现了用户CRUD操作的RESTful API: 1. 类结构与核心注解 1.1 控制器声明 RestController RequestMapping("/api/users") public class UserControllerRestController 深度解析: 组合注解:Controller Re…

    【剑指offer】搜索算法

    目录 📁 JZ53 数字在升序数组中出现的次数​编辑 📁 JZ4 二维数组中的查找​编辑 📁 JZ11 旋转数组的最小数字 📁 JZ38 字符串的排列​编辑 📁 JZ53 数字在升序数组中出现的次数 这就是一道简单的模板题&#xff0…

    ETLCloud批流一体化体现在哪

    ETLCloud批流一体化体现在哪 企业对数据处理的实时性、高效性和准确性的要求越来越高。批流一体化作为一种先进的数据处理理念,逐渐被企业所采用。 目前许多国产化ETL工具也装配了十分强大的批流一体化能力,ETLCoud就是一个很好的代表,它能够…

    Mybatis学习之缓存(九)

    这里写目录标题一、MyBatis的一级缓存1.1、工作原理1.2、一级缓存失效的四种情况1.3、不同的SqlSession对应不同的一级缓存1.4、同一个SqlSession但是查询条件不同1.5、同一个SqlSession两次查询期间执行了任何一次增删改操作1.6、同一个SqlSession两次查询期间手动清空了&…

    windows10装Ubuntu22.04系统(双系统)

    参考链接:Windows和Linux双系统的保姆级安装教程,新手小白跟着也能装_windows安装linux双系统-CSDN博客 1 前期准备 1.下载Ubuntu22.04.5 的iso镜像文件:Download Ubuntu Desktop | Ubuntu 2.准备一个U盘(空,已有文…

    Pandas数据处理与分析实战:Pandas数据清洗与处理入门

    数据清洗:Pandas数据处理入门 学习目标 本课程将引导学员了解数据清洗的基本概念,掌握使用Pandas库处理数据集中的缺失值、重复数据和异常值的方法,确保数据的质量,为后续的数据分析和机器学习任务打下坚实的基础。 相关知识点 Pa…

    Python爬虫实战:研究ScrapyRT框架,构建图书商城数据采集系统

    1. 引言 1.1 研究背景 在当今数字化时代,互联网已成为全球最大的信息库,蕴含着海量的有价值数据,涵盖商业、教育、科研、医疗等各个领域。根据 IDC(国际数据公司)预测,到 2025 年全球数据圈将增长至 175ZB,其中网络数据占比超过 60%。这些数据不仅是企业制定商业策略、…

    springboot接口请求参数校验

    参数校验 参数校验可以防止无效或错误的数据进入系统。通过校验前端输入的参数,可以确保数据的完整性,避免因为缺少必要的信息而导致程序错误或异常。例如,对于密码字段,可以通过校验规则要求用户输入至少8个字符、包含字母和数字…

    Docker部署 Neo4j 及集成 APOC 插件:安装与配置完整指南(docker-compose)

    Docker部署 Neo4j 及集成 APOC 插件:分步骤指南 摘要 :本文将分两部分详细介绍相关内容。第一部分讲解如何使用 Docker Compose 部署 Neo4j 图数据库,提供完整配置文件及常见问题解决方案;第二部分在前者基础上,介绍 A…

    TLSv1.2协议与TCP/UDP协议传输数据内容差异

    一、Wireshark中常见的TLSv1.2在用Wireshark抓包时,除了看到课堂上教过的经典的TCP/UDP协议,还有一个协议经常出现——TLSv1.2。并且这个协议的Info解释是Application data,其实看到这个解释,我大概猜出来了TLSv1.2是用来给用户数…