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

分类算法——决策树 详解

决策树的底层原理

        决策树是一种常用的分类和回归算法,其基本原理是通过一系列的简单决策,将数据集划分为多个子集,从而实现分类。决策树的核心思想是通过树形结构表示决策过程,节点代表特征,边代表决策,叶子节点代表类别。

        下面是一个决策树例子(用挑选好西瓜来举例,最终结果为判断是好瓜还是坏瓜):

1. 决策树的基本结构
  • 根节点:表示整个数据集。
  • 内部节点:表示根据某一特征进行的决策。
  • 叶子节点:表示最终的分类结果或回归值。

决策树的构建

        决策树的构建过程通常采用递归的方式,核心步骤包括特征选择、数据划分和停止条件。

2. 特征选择

在每个节点上,需要选择一个特征来划分数据集,常用的特征选择标准包括:

  • 信息增益:基于香农信息论,信息增益是划分前后信息的不确定性减少量。公式为:

    IG(D,A)=H(D)-\sum_{v\in A}^{} \frac{\left | D_{v} \right |}{\left | D \right |}H(D_{v})

    其中,H(D) 为数据集 D 的熵,D_{v}​ 为特征 A 取值为 v 的子集。

  • 信息增益率:为了解决信息增益偏向于选择取值较多的特征的问题,信息增益率在信息增益的基础上进行归一化:

    GainRatio(D,A)= \frac{IG(D,A)}{H(A)}

  • 基尼指数:主要用于 CART(Classification and Regression Trees)算法,计算某个特征的基尼指数,公式为:

    Gini(D)=1-\sum_{i=1}^{C}p_{i}^{2}

    其中,p_{i}​ 为类 i 在数据集 D 中的比例。

3. 数据划分

        根据选择的特征,将数据集划分为多个子集。对于连续特征,通常会选取一个阈值,将数据集分为小于阈值和大于阈值两部分;对于分类特征,则根据每个取值进行划分。

4. 停止条件

决策树的构建过程需要设定停止条件,常见的条件包括:

  • 达到最大深度。
  • 节点样本数低于某一阈值。
  • 信息增益或基尼指数的减少低于某一阈值。

决策树的剪枝

为了解决过拟合问题,决策树通常会进行剪枝,分为预剪枝和后剪枝:

  • 预剪枝:在树的构建过程中,实时评估当前分裂的效果,决定是否继续分裂。
  • 后剪枝:先构建完整的树,再从叶子节点向上进行剪枝,去掉一些不必要的分支。

决策树的算法

决策树的构建算法主要有 ID3、C4.5、CART 等。

  • ID3:使用信息增益作为特征选择的标准,适用于分类任务。
  • C4.5:改进了 ID3,使用信息增益率作为标准,支持连续特征和缺失值。
  • CART:使用基尼指数进行特征选择,支持分类和回归任务。

决策树的优缺点

优点:
  1. 直观易懂:决策树模型易于理解和可视化。
  2. 无需特征缩放:对特征的缩放和归一化不敏感。
  3. 适用性广:可以处理分类和回归问题,且对数据类型没有强要求。
缺点:
  1. 过拟合:决策树容易在训练数据上过拟合,尤其是深度较大的树。
  2. 不稳定性:对训练数据的微小变化敏感,可能导致树的结构有较大差异。
  3. 偏向于某些特征:使用信息增益时,可能偏向于选择取值较多的特征。

决策树的实现

在 Python 中,使用 scikit-learn 库可以非常方便地实现决策树。以下是一个基本的实现示例:

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import tree
import matplotlib.pyplot as plt# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 构建决策树模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X_train, y_train)# 预测
y_pred = clf.predict(X_test)# 可视化决策树
plt.figure(figsize=(12, 8))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()

决策树的应用

决策树广泛应用于金融、医疗、市场分析等多个领域,如:

  • 信用评分:评估客户的信用风险。
  • 医学诊断:帮助医生进行疾病预测和诊断。
  • 客户分类:根据客户特征进行市场细分。

总结

        决策树是一种强大的分类和回归模型,通过树形结构进行决策。其构建过程包括特征选择、数据划分、剪枝等步骤,易于理解和实现,但需注意过拟合和模型稳定性的问题。在实际应用中,可以根据具体场景选择合适的决策树算法和参数设置。

相关文章:

分类算法——决策树 详解

决策树的底层原理 决策树是一种常用的分类和回归算法,其基本原理是通过一系列的简单决策,将数据集划分为多个子集,从而实现分类。决策树的核心思想是通过树形结构表示决策过程,节点代表特征,边代表决策,叶子…...

C# 编程基础:深入解析构造函数与析构函数

在C#中,构造函数和析构函数是特殊的成员函数,它们分别在对象创建和销毁时自动调用。 构造函数 构造函数是一个在创建对象时自动调用的特殊方法,用于初始化对象的状态。它可以有参数,也可以没有参数。一个类可以有一个或多个构造…...

中国大学慕课视频资源分析

右键查看视频信息 关注点在 urls 这个参数,仔细分析就会发现其实是由若干个.ts拓展名和一个.m3u8拓展名的视频文件,每一个.ts视频文件的时长在10秒钟左右。 中国大学MOOC将课程的视频文件拆分成若干个这样的.ts片段,并且用.m3u8记录这些片段…...

简单的kafkaredis学习之redis

简单的kafka&redis学习之redis 2. Redis 2.1 什么是Redis Redis是一种面向 “Key-Value” 数据类型的内存数据库,可以满足我们对海量数据的快速读写需求,Redis是一个 NoSQL 数据库,NoSQL的全称是not only sql,不仅仅是SQL&…...

前端性能优化全攻略:提升用户体验,加速页面加载

在当今互联网时代,用户对于网页的加载速度和性能要求越来越高。快速响应的网页不仅能提升用户体验,还能提高网站的搜索引擎排名和转化率。因此,前端性能优化成为了前端开发中至关重要的一环。本文将深入探讨前端性能优化的原则、方法以及如何…...

手机玩亚托莉:我挚爱的时光!手机推gal、躺床玩漫改gal教程

亚托莉:我挚爱的时光是一款视觉与情感交织的好游戏 。游戏背景设定在因为不明原因导致全球海平面上升之后的未来,在全球大多数地方都被海洋淹没城市才是相对环境的情况下,在一场事故失去了一条腿的男主斑鸠夏生却选择了放弃城市,转…...

metasploit/modules/evasion 有哪些模块,以及具体使用案例

Metasploit框架的evasion模块用于生成绕过安全检测的有效载荷。以下是一些常见的evasion模块及其使用案例: 1. 通用Evasion模块 windows/meterpreter/reverse_tcp_rc4:使用RC4加密的反向TCP Meterpreter会话。 set PAYLOAD windows/meterpreter/reverse…...

网络安全入门文档-虚拟机配置篇

前言 虚拟机作为网络安全渗透测试中常见的工具。通常被用来安装kali系统 简单解释一下,目前操作系统分为三类 windows、linux、mac linux又有两个小类,分别是RedHat、Debian 而我们要安装的kali就是基于Debian的操作系统。 简单来说。虚拟机和系统是两个…...

class 041 最大公约数、同余原理

1. 辗转相除法 对下面的证明过程有什么问题和怀疑的直接随便找两个数字自己写一遍就行了. 1.1 利用辗转相除法计算最大公约数 直接记忆这段代码公式就行了(具体的证明过程直接去看左程云老师写的就行了). public static long gcd(long a, long b) { // Greatest Common Di…...

token的创建与解析,并配合拦截器使用

场景&#xff1a; 进行web应用开发时&#xff0c;往往需要对当前用户进行身份判断&#xff0c;此时可以使用token技术 1.导入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><scope>runtime<…...

Oracle 数据库历史备份数据恢复验证

Oracle ASM 管理的数据库历史备份数据恢复至单实例数据库 简介&#xff1a; 验证 ASM 管理的数据库的历史备份恢复至单实例数据库&#xff08;主要目的在于验证历史备份是否可用的一次恢复演练&#xff09; 一、恢复演练系统选择 根据数据库情况选择恢复测试的环境。 此次恢…...

【网络面积篇】TCP断开连接(笔记)

目录 一. 四次挥手 &#xff08;1&#xff09;过程描述 &#xff08;2&#xff09;为什么是四次挥手&#xff1f; 二、相关问题 1. 第一次挥手丢失了&#xff0c;会发生什么&#xff1f; 2. 第二次挥手丢失了&#xff0c;会发生什么&#xff1f; 补充&#xff1a;close …...

下跌多少才能涨回来?

文章目录 上涨下跌函数关系函数图形数学分析 上涨下跌函数关系 最近炒股很热&#xff0c;对于股票来说&#xff0c;有个很重要的参数涨跌幅&#xff0c;那么下跌多少才能涨回来&#xff1f;这个不需要太深的知识就可以计算出来&#xff0c;下跌和上涨不是等价的&#xff0c;下跌…...

【AAOS】【源码分析】CarSystemUI -- CarSystemBar

CarSystemBar不像Android手机那样固定的顶部“状态栏”和底部“导航栏”,而是将StatusBar和NavigationBar都统称为SystemBar,可以通过如下配置为每侧最多配置一个“系统栏”。 packages/apps/Car/SystemUI/res/values/config.xml<!-- Configure which system bars should …...

[供应链] 邀请招标

1.邀请招标定义 邀请招标(Invitation to Bid by Request) 也称为有限竞争性招标(limited Competitive Bidding)或选择性招标(Selected Bidding) 邀请招标的采购方式下&#xff0c;采购人(如政府机构、企业或其他组织)不是公开发布招标信息&#xff0c;而是根据供应商或承包商…...

VS2017+Qt5.12.9+CMake3.30.2编译VTK 9.2.0

一.准备工作 vs2017&#xff0c;QT&#xff0c;Cmake自行下载准备&#xff0c; VTK下载地址 1.官网下载 2.github下载 二.编译VTK源码 1.个人习惯创建以下目录&#xff0c;一个源码目录&#xff0c;Build为vs解决方案输出目录和编译输出以及中间生成文件目录 2.cmake基础…...

Java线程CPU占用过高如何排查?

使用ps命令查看java进程详细信息&#xff1a; ps aux | grep java使用top命令查看系统进程占用情况 top使用jstack命令导出Java进程的堆栈信息 jstack pid | grep tid -A 10 "java.lang.Thread.State" > gc.log找出占用cpu最高的线程id&#xff1a; top -Hp -d 1 …...

uniapp推送配置流程

Dcloud Dcloud注册账号 个推 了解即可 注册个推账号 ios配置流程 需配置含有推送的描述文件以及p8证书 配置推送证书 ios证书配置报技术错误&#xff08;参数错误&#xff09; TeamID-苹果开发者账号唯一的ID 安卓需配置多厂商 小米手机需要配置小米厂商 华为手机则需…...

qt QPicture详解

1、概述 QPicture类是Qt框架中的一个重要图形类&#xff0c;它主要用于记录和回放QPainter的绘图指令。这个类能够跨平台、无分辨率依赖地绘制图形&#xff0c;非常适合用于实现打印预览和图像操作等场景。QPicture可以将绘图操作序列化为一种独立于平台的格式&#xff0c;保存…...

ScheduledFuture Source Code Analysis

ScheduledFuture Overview is a delayed result-bearing action, 可以被cancel.通常是在ScheduledExecutorService里面schedule一个task, 然后ScheduledFuture是其task执行接受后的返回结果。 Code Analysis 继承于两个接口&#xff1a; extends Delayed, Future一些继承ch…...

CANN Triton排序选择算子优化

Sort/Select 算子优化 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体&#xff0c;本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 适用于需要迭代选择元素的算子&#xff1a;NMS、…...

DeepFace实战:用5行代码快速搭建一个本地人脸搜索系统(附完整代码)

DeepFace实战&#xff1a;5行代码构建本地人脸搜索系统的工程化实践 人脸识别技术早已不再是实验室里的黑科技&#xff0c;而是能够快速落地的实用工具。今天我们将用Python生态中最轻量级的DeepFace库&#xff0c;从工程化角度构建一个真正可用的人脸搜索系统。不同于简单的AP…...

普冉PY32F003单片机PWM呼吸灯实战:从8ms定时器中断到10KHz波形平滑调节

普冉PY32F003单片机PWM呼吸灯实战&#xff1a;从8ms定时器中断到10KHz波形平滑调节 在嵌入式开发中&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;技术是实现LED亮度渐变、电机调速等功能的基石。普冉PY32F003作为一款高性价比的32位单片机&#xff0c;其定时器模块的灵…...

形转化理论SYS方程组系数推导的现状:进展、成就与挑战

作者&#xff1a;温沛林日期&#xff1a;2026年5月20日摘要形转化理论&#xff08;FTT&#xff09;的核心动力学内核——形转化最小赋予系统&#xff08;SYS&#xff09;方程组——的系数完全确定&#xff0c;是从一个自洽的数学框架走向可计算、可检验物理模型的关键枢纽。本文…...

2026最新论文降AI全攻略:亲测5大高质量工具,掌握免费Prompt指令顺利交稿

为了找到真正靠谱的解决方案&#xff0c;我过去测试了市面上大部分号称能降低ai率的方法。从一分钱不花的模型指令&#xff0c;到各种付费的专业降ai率工具&#xff0c;用手头的文本做了几十次实操对比。说心里话&#xff0c;里面套路确实不少&#xff0c;有些方法用完后语句颠…...

YOLOv11厨房食材目标检测数据集-2499张-Meat-1_5

YOLOv11厨房食材目标检测数据集 &#x1f4ca; 数据集基本信息 目标类别&#xff1a; [‘ayam’, ‘beef’, ‘pork’]中文类别&#xff1a;[‘鸡肉’, ‘牛肉’, ‘猪肉’]训练集&#xff1a;2256 张验证集&#xff1a;164 张测试集&#xff1a;79 张总计&#xff1a;2499 张 …...

数据结构:3.包装类和泛型

【目标】1.了解包装类 2. 以 能阅读java集合源码 为目标学习泛型3.了解泛型1.包装类&#xff08;Wrapper Class&#xff09;1.1 引出包装类1.1.1 什么是包装类&#xff1f;一句话&#xff1a; 包装类就是把 Java 的 8 种基本数据类型&#xff08;int, double, char 等&a…...

【条件对抗生成网络】从理论到实践:CGAN如何实现可控图像生成

1. 条件对抗生成网络&#xff08;CGAN&#xff09;是什么&#xff1f; 想象一下&#xff0c;你正在教一个小朋友画画。普通GAN&#xff08;生成对抗网络&#xff09;就像让小朋友随意涂鸦&#xff0c;画出来的内容完全随机&#xff1b;而CGAN则像是你给小朋友一个明确的主题&am…...

别再被CAPL路径搞懵了!getAbsFilePath、setFilePath这几个函数到底怎么用?

CAPL文件路径操作全解析&#xff1a;从函数原理到实战避坑指南 在CANoe自动化测试开发中&#xff0c;文件路径操作堪称最基础却又最容易出错的环节之一。许多工程师都经历过这样的场景&#xff1a;精心编写的CAPL脚本在本地测试一切正常&#xff0c;换到同事电脑上却频频报错&a…...

手把手教你用示波器抓取Intel CPU的SVID时序(附读写判定与Intel送测指南)

实战指南&#xff1a;利用示波器精准解析Intel CPU的SVID通信时序 当一块新设计的服务器主板首次上电时&#xff0c;电源管理系统的稳定性往往决定了整个平台的可靠性。作为硬件工程师&#xff0c;我们常常需要直面这样的场景&#xff1a;主板虽然能点亮&#xff0c;但CPU与电压…...