CART树(分类回归树)

article/2025/9/24 16:45:11

主要内容

(1)CART树简介

(2)CART树节点分裂规则

(3)剪枝

---------------------------------------------------------------------------------------------------------------------

一、简介

CART分类回归树是一种典型的二叉决策树,可以做分类或者回归。若预测结果是离散型数据,则CART树为分类树;若预测结果是连续型数据,则CART树是回归树。若为分类树时,输出结果为叶子节点中样本所属的最多类别;若为决策树时,输出结果为叶子节点中样本的均值。

二、CART树节点分裂规则

1、CART分类树

选择具有最小的Gini的属性及其属性值,作为最优分割属性以及最优分裂属性值。Gini值越小,二分之后的子样本‘纯度’越高,即说明选择该属性及其属性值作为分裂属性(值)效果越好。

遍历所有的属性和属性值,选择最小的Gini

对于样本集S,Gini计算如下:

Gini(S) = 1 - \sum_{k=1}^{N}P_{k}^{2} = P_{k}(1-P_{k}) 

其中,P_{k}为第k个类别出现的频率,N为类别数

通过某个属性及其属性值,将样本切分为S_{1}S_{2},对于属性A,Gini计算如下

Gini(S|A) = \frac{|S_{1}|}{|S|}Gini(S_{1})+\frac{|S_{2}|}{|S|}Gini(S_{2})

目标(分裂规则):找出最小的Gini(S|属性),得到最优的分裂属性和属性值

2、CART回归树

遍历所有的属性和属性值

对于样本集S,目标(分裂规则)如下:

min_{j,s}[min_{c1}\sum_{x_{i}\epsilon R_{1}(j,s)}(y_{i}-c_{1})^2+min_{c2}\sum_{x_{i}\epsilon R_{2}(j,s)}(y_{i}-c_{2})^2]

其中,j为属性,s为属性值,R_{1}R_{2}为属性j和属性值s切分的两部分区域,c_{1}c_{2}分别为R_{1}R_{2}下样本的平均值

上述采用平方误差最小作为最优分割,事实上可采用其他的方式,例如MAE作为规则,当然得到的结果也不一样。

三、CART剪枝

详见《李航.统计学习方法》


http://chatgpt.dhexx.cn/article/m2LEQrIc.shtml

相关文章

CART树

算法概述 CART(Classification And Regression Tree)算法是一种决策树分类方法。 它采用一种二分递归分割的技术,分割方法采用基于最小距离的基尼指数估计函数,将当前的样本集分为两个子样本集,使得生成的的每个非叶子节点都有两个分支。因此…

Pytorch之view,reshape,resize函数

对于深度学习中的一下数据,我们通常是要变成tensor格式,并且需要对其调整形状,很多时候我们往往只关注view之后的结果(比如输出的尺寸),而不关心过程。但有时候还是要关注一下这个到底是怎么变换过来的&…

OpenCV-Python图像处理:插值方法及使用resize函数进行图像缩放

☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 图像缩放用于对图像进行缩小或扩大,当图像缩小时需要对输入图像重采样去掉部分像素,当图像扩大时需要在输入图像中根据算法生成部分像素,二者都会利用插值算法来实现。 一…

vector的resize函数和reserve函数

博客原文:C基础篇 -- vector的resize函数和reserve函数_VampirEM_Chosen_One的博客-CSDN博客,写的特别好,谢谢原博主。 正文: 对于C的vector容器模板类,存在size和capacity这样两个概念,可以分别通过vect…

OpenCV 图片尺寸缩放——resize函数

文章目录 OpenCV中的缩放:resize函数代码案例 OpenCV中的缩放: 如果要放大或缩小图片的尺寸,可以使用OpenCV提供的两种方法: resize函数,是最直接的方式;pyrUp,pyrDown函数,即图像…

OpenCV的resize函数优化

背景 在使用OpenCV做图像处理的时候,最常见的问题是c版本性能不足,以resize函数为例来说明,将size为[864,1323,3]的函数缩小一半: Mat img0;gettimeofday(&t4, NULL);cv::resize(source, img0, cv::Size(cols_out,rows_out)…

C++ | resize函数的用法

最近在leetcode用C刷题,刚遇到一题需要给重新弄一个容器,并给容器初始化。新建容器要在private类中声明resize函数用来初始化preSum容器。 resize函数是C中序列式容器的一个共性函数,vv.resize(int n,element)表示调整容器vv的大小为n&#x…

opencv的resize函数

一、Opencv官方文档中resize的描述: resize Resizes an image. C: void resize(InputArray src, OutputArray dst, Size dsize, double fx0, double fy0, int interpolationINTER_LINEAR ) Python: cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]]) …

resize()函数

resize(),设置大小(size); reserve(),设置容量(capacity); size()是分配容器的内存大小,而capacity()只是设置容器容量大小,但并没有真正分配内存。 打个比方:正在建造…

OpenCV 图像缩放:cv.resize() 函数详解

目录 系列前言API函数详解参数列表缩放方式其一缩放方式其二两种方式的优先级关于插值方式 扩展 —— 相关函数 系列前言 这个系列是我第一个想要更下去的系列。每篇会全面介绍一个 OpenCV 函数,会给出 API 和示例。示例主要是用 Python 去写,但是 Open…

安卓中的几种线程间通信方式

一:Handler实现线程间的通信 andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。 在Android,这里的…

Java中的线程通信的几种方式

Java中的线程间通信是指不同线程之间相互协作,以完成一些复杂的任务或实现某些功能的过程。线程间通信主要包括两个方面:线程之间的互斥和同步,以及线程之间的数据共享和通信。Java提供了多种方式来实现线程间通信,本文将介绍Java…

创建线程的四种方式 线程通信

文章目录 1.1 创建线程1.1.1 创建线程的四种方式1.1.2 Thread类与Runnable接口的比较1.1.3 Callable、Future与FutureTask 1.2 线程组和线程优先级1.3 Java线程的状态及主要转化方法1.4 Java线程间的通信1.4.1 等待/通知机制1.4.2 信号量1.4.3 管道 1.1 创建线程 1.1.1 创建线…

【多线程间几种通信方式】

一、使用 volatile 关键字 基于 volatile 关键字来实现线程间相互通信是使用共享内存的思想。大致意思就是多个线程同时监听一个变量,当这个变量发生变化的时候 ,线程能够感知并执行相应的业务。这也是最简单的一种实现方式 代码案例 package com.han…

线程之间的通信方式

前言 我只是个搬运工,尊重原作者的劳动成果,本文来源下列文章链接: https://zhuanlan.zhihu.com/p/129374075 https://blog.csdn.net/jisuanji12306/article/details/86363390 线程之间为什么要通信? 通信的目的是为了更好的协…

Java线程间的通信方式

文章目录 线程间通信的定义一、等待—通知(1)等待—通知机制的相关方法:(2)注意事项:(4)notify()方法的核心原理(5)等待—通知机制的经典范式(6&a…

线程间实现通信的几种方式

目录 线程通信相关概述提出问题方式一:使用Object类的wait() 和 notify() 方法方式二:Lock 接口中的 newContition() 方法返回 Condition 对象,Condition 类也可以实现等待/通知模式方法三:使用 volatile 关键字方法四&#xff1a…

线程间的通信方式

对共享数据进行更改的时候,先到主内存中拷贝一份到本地内存中,然后进行数据的更改,再重新将数据刷到主内存,这中间的过程,其他线程是看不到的。 1、为什么需要线程通信 线程是操作系统调度的最小单位,有自…

进程和线程的几种通信方式

进程之间通信的几种方式 1. 管道:是内核里面的一串缓存 管道传输的数据是单向的,若相互进行通信的话,需要进行创建两个管道才行的。 2. 消息队列: 例如,A进程给B进程发送消息,A进程把数据放在对应的消息队…

线程的几种通信方式

目录 一、Object的wait()、notify()、notifyAll()方法 二、Condition的await()、signal()、signalAll()方法 三、CountDownLatch 四、CyclicBarrier 五、Semaphore 线程间的通信方式常用的有如下几种: Object的wait()、notify()、notifyAll()方法; …