机器学习·决策树

前言

决策树是分类与回归问题中常用的方法之一。其实不仅是机器学习领域,在每天的日常决策中,我们都在使用决策树。流程图实际上就是决策树的可视化表示。


一、基本概念
  1. 决策树原理

    • 通过一系列 逻辑规则(特征分割条件) 构建树形结构,用于分类或回归。

    • 每个内部节点表示一个特征判断,分支表示判断结果,叶节点表示最终类别或数值。

  2. 关键术语

    • 熵(Entropy):衡量系统不确定性
      \( S = -\sum_{i=1}^N p_i \log_2 p_i \)
      \( p_i \) 为第 \( i \) 类样本的比例。

    • 信息增益(Information Gain):分割后熵的减少量
      \( IG(Q) = S_0 - \sum_{i=1}^q \frac{N_i}{N} S_i \)

    • 基尼系数(Gini Index):衡量数据不纯度
      \( G = 1 - \sum_{k} (p_k)^2 \)

  3. 分割质量指标对比

    指标公式特点
    信息增益(熵)\( IG = S_0 - \sum \frac{N_i}{N} S_i \)对类别分布敏感
    基尼系数\( G = 1 - \sum p_k^2 \)计算更高效,与熵效果相似
    错分率\( E = 1 - \max p_k \)不推荐使用,对概率变化不敏感

二、决策树构建算法
  1. 核心思想

    • 贪婪算法:每一步选择 信息增益最大(或基尼系数最小)的特征进行分割。

    • 递归分裂:重复分割直到满足停止条件(如节点纯度达标、深度限制等)。

  2. 常用算法

    算法特点
    ID3使用信息增益,仅支持分类,无法处理连续特征和缺失值
    C4.5改进 ID3,支持连续特征、缺失值处理,引入信息增益率防止过拟合
    CART使用基尼系数(分类)或均方误差(回归),支持分类和回归,生成二叉树
  3. 停止条件

    • 节点样本数小于阈值

    • 节点纯度达到要求(如熵/基尼系数接近 0)

    • 树达到预设最大深度


三、分类与回归应用
  1. 分类树

    • 目标:预测离散类别标签。

    • 质量指标:熵或基尼系数。

    • 示例代码(sklearn)

      from sklearn.tree import DecisionTreeClassifier
      clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
      clf.fit(X_train, y_train)
  2. 回归树

    • 目标:预测连续数值。

    • 质量指标:均方误差(MSE)
      \( D = \frac{1}{\ell} \sum_{i=1}^\ell (y_i - \bar{y})^2 \)
      \( \bar{y} \) 为叶节点样本均值。

    • 示例代码(sklearn)

      from sklearn.tree import DecisionTreeRegressor
      reg = DecisionTreeRegressor(max_depth=3)
      reg.fit(X_train, y_train)

四、过拟合与剪枝
  1. 过拟合表现

    • 决策树过深,叶节点样本过少,模型在训练集上完美拟合但在测试集上效果差。

  2. 解决方法

    • 预剪枝(Pre-pruning):提前限制模型复杂度

      • max_depth:树的最大深度

      • min_samples_leaf:叶节点最少样本数

      • max_features:分割时考虑的最大特征数

    • 后剪枝(Post-pruning):先构建完整树,再自底向上合并节点(如 CCP 方法)。


五、决策树的优缺点
优点缺点
可解释性强,规则可视化对噪声敏感,易过拟合
支持数值和类别特征边界为轴平行超平面,可能不如其他模型灵活
训练和预测速度快数据微小变化可能导致树结构剧变(不稳定)
无需特征标准化无法外推(只能预测训练集特征范围内的值)

六、实战注意事项
  1. 参数调优

    • 使用交叉验证选择最佳 max_depthmin_samples_leaf 等参数。

    • 示例代码:

      from sklearn.model_selection import GridSearchCV
      params = {'max_depth': [3, 5, 7], 'min_samples_leaf': [1, 5, 10]}
      grid = GridSearchCV(DecisionTreeClassifier(), params, cv=5)
      grid.fit(X, y)

  2. 可视化决策树

    • 使用 sklearn.tree.plot_tree 或第三方库(如 Graphviz)生成树结构图。

    • 示例代码:

      from sklearn.tree import plot_tree
      plt.figure(figsize=(20, 10))
      plot_tree(clf, filled=True, feature_names=X.columns)
      plt.show()

七、应用
  1. 分类问题:客户信用评估、疾病诊断、垃圾邮件识别。

  2. 回归问题:房价预测、销量趋势分析。

  3. 特征重要性分析:通过节点分裂次数或信息增益量评估特征重要性。

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

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

相关文章

Linux下载安装2

安装VMWare虚拟机 VMware是一个老牌的虚拟化软件。虚拟机指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整。 下载CentOS 进入Centos官网找要下载的版本https://vault.centos.org/ …

Excel中不用复杂公式根据指定X列的数值N复制整行数据N行简单方法

Excel中不用复杂公式根据指定X列的数值N复制整行数据N行简单方法 1、在“数据表”sheet1中对指定X列(假设X列的数字从X2开始到Xn结束)求和,和为Y。 2、在“数据表”sheet1数据列之外新建一列Z,Z1输入表头“匹配数据列”&#xff…

DeepSeek、Kimi、文心一言、通义千问:AI 大语言模型的对比分析

在人工智能领域,DeepSeek、Kimi、文心一言和通义千问作为国内领先的 AI 大语言模型,各自展现出了独特的特点和优势。本文将从技术基础、应用场景、用户体验和价格与性价比等方面对这四个模型进行对比分析,帮助您更好地了解它们的特点和优势。…

数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例

MongoDB数据库存储模式为文档数据存储库,存储方式是将文档存储在集合之中。 MongoDB数据库是开源数据库,同时提供具有附加功能的商业版本。 MongoDB中的数据是以键值对(key-value pairs)的形式显示的。在模式设计上,数据库受到的约束更少。这…

Flink在指定时间窗口内统计均值,超过阈值后报警

1、需求 统计物联网设备收集上来的温湿度数据,如果5分钟内的均值超过阈值(30摄氏度)则发出告警消息,要求时间窗口和阈值可在管理后台随时修改,实时生效(完成当前窗口后下一个窗口使用最新配置)。 物联网设备的数据从kafka中读取&#xff0c…

Flutter Gradle 命令式插件正式移除,你迁移旧版 Gradle 配置了吗?

在 Flutter 3.29 版本里官方正式移除了 Flutter Gradle Apply 插件,其实该插件自 3.19 起已被弃用,同时 Flutter 团队后续也打算把 Flutter Gradle 从 Groovy 转换为 Kotlin,并将其迁移到使用 AGP(Android Gradle Plugin&#xff…

15.Python网络编程:进程池、进程间通信、多线程、进程和线程区别、网络通信、端口、IP地址、socket、UDP、TCP、http

1. 进程池(Process Pool) 进程池是通过将多个进程放入池中管理来避免频繁地创建和销毁进程,提高效率。Python 提供了 multiprocessing.Pool 类来实现进程池,它可以用于并行计算任务。 示例:使用进程池 from multipr…

Vue 中报错 TypeError: crypto$2.getRandomValues is not a function

问题 在新建的项目中,使用的是 npm init vue 创建项目后,执行命令 npm i ,然后去 npm run dev 这个时候报错 TypeError: crypto$2.getRandomValues is not a function 起初是以为搞错了,然后再删掉 node_modules 和 package-lo…

如何通过挂载debugfs来访问内核调试信息

1. DebugFS 的作用 bugFS 的作用 内核调试接口:允许内核模块或子系统在 DebugFS 中创建虚拟文件或目录,暴露调试信息。 动态交互:用户可以直接读写这些文件来查看或修改内核状态(如调整日志级别、触发特定操作)。 零…

001 SpringCloudAlibaba整合 - Nacos注册配置中心、Sentinel流控、Zipkin链路追踪、Admin监控

SpringCloudAlibaba 文章目录 SpringCloudAlibaba1.版本依赖关系2022.x 分支2021.x 分支2.2.x 分支 组件版本关系 2.基础项目构建1.引入全局pom文件2.创建对应的模块 3.SpringBootAdmin监控服务整合1.cloud-admin服务搭建1.导入服务端依赖2.主启动类添加EnableAdminServer注解启…

常用的网络安全设备

一、 WAF 应用防火墙 范围:应用层防护软件 作用: 通过特征提取和分块检索技术进行模式匹配来达到过滤,分析,校验网络请求包的目的,在保证正常网络应用功能的同时,隔绝或者阻断无效或者非法的攻击请求 可…

Jenkins 新建配置Pipeline任务 三

Jenkins 新建配置Pipeline任务 三 一. 登录 Jenkins 网页输入 http://localhost:8080 输入账号、密码登录 一个没有创建任务的空 Jenkins 二. 创建 任务 图 NewItem 界面左上角 New Item 图NewItemSelect 1.Enter an item name:输入任务名 2.Select an ite…

如何构建有效的人工智能代理

目录 什么是 AI 代理? 何时应使用 AI 代理? 人工智能代理的构建模块 构建 AI 代理的常用方法 1. 提示链接(分步说明) 2.路由(将任务发送到正确的地方) 3.并行处理(同时做多件事) 4. 协调者和工作者 AI(团队合作) 5. 评估器和优化器(修复错误) 如何让人工…

linux 下连接mysql(下)

case 表达式 表t1中的数据如下。 select * from t1; ---------------------------- | id | student_no | name | age | ---------------------------- | 3 | 202501 | ll | 10 | | 4 | 202502 | tt | 15 | ----------------------------如果学号是202501,…

hivemetastore 连接过多导致sql查询慢

MetaStore (DB)修改对应的处理连接数maxConnectionsPerPartition建议设置成 100 (不能超过最大值300),重启Hive服务。 建议值100是根据与工行规模相当集群的设置作参考,尽量大满足连接数请求的同时考虑connection占用资源(如果connection太多会占用太多的…

sqli-labs布尔盲注

通过?id1及?id1判断是否存在sql注入的漏洞 ?id1有回显 ?id1无回显 再使用?id1 and 11 --及?id1 and 12 --判断是否为布尔盲注 ?id1 and 11 --有回显 ?id1 and 12 --无回显 为布尔盲注,使用python获取其中的库名,表名,列名及数据 1…

ovs源码分析

源码版本 ovs 内核部分的代码在linux内核的 /net/openswitch目录下,应用层控制面代码在ovs项目中。 Linux kernel: version 6.2.0 Ovs: v3.4.1 总体架构 整体结构图 ovs的架构如下图所示,主要由内核datapath、vswitchd、ovsdb以及用户空间的ovs-vs…

vue3实战-----使用mock模拟接口数据

vue3实战-----使用mock模拟接口数据 1.安装和配置2.创建mock数据3.使用axios测试 1.安装和配置 安装依赖:https://www.npmjs.com/package/vite-plugin-mock pnpm install -D vite-plugin-mock mockjs在 vite.config.js 配置文件启用插件: import { viteMockServe } from vit…

DeepSeek+Excel 效率翻倍

2025年初,DeepSeek以惊人的效率突破技术壁垒,用极低的成本实现了与行业顶尖AI相媲美的性能,瞬间成为全球科技领域的热门话题。 那么AI工具的普及将如何改变我们的工作方式?Excel会被取代吗? 今天,珠珠带你…

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…