决策树-相关作业

news2025/8/3 17:36:26

1. 请使用泰勒展开推导gini不纯度公式;

2. 请说明树的剪枝怎么实现;

●预剪枝(pre-pruning)通过替换决策树生成算法中的停止准则。(例如,最大树深度或信息增益大于某一阈值)来实现树的简化。预剪枝方法被认为是更高效的方法,因为它们不会反映整个数据集,而是从一开始就保持小树。预剪枝方法有一个共同的问题,即视界限制效应。一般不希望通过停止准则过早地终止诱导。

●后剪枝(post-pruning)是简化树的常见方法,用叶子代替中间节点和子树以提高复杂度。后剪枝不仅可以显著减小树的大小,还可以提高未见过的样本数据的分类精度。可能会出现在测试集上的预测准确率变差的问题,但树的分类准确率总体上会提高。

经典的剪枝算法如表

         代价复杂度剪枝方法在1984年Breiman的经典CART算法中首次提到并使用,是一种后剪枝方法。

        假设对于一棵CART决策树,R(T)是决策树误差(代价),f(T)是一个返回树T的叶子集合的函数。α是一个正则化参数,表示两者的平衡系数,其值越大,树越小,反之树越大。

        一棵树的好坏用下式衡量:

         其中\sum_{t \in f(T)} R(t)表示每个节点所产生的错误分类的误差纸盒。p(t)=\frac{n(t)}{n},n(t)表示叶子节点t所处理的样本记录值,n表示总的样本记录数。r(t)=r(t)=1-maxx_kp(C_k-t)表示误分类比例。

对一颗子树进行剪枝的过程如图。对于待剪枝的决策树T,将一棵以节点t为根节点的子树Tt替换为一个叶子节点,得到子树T-T_t,那么,R_\alpha(T-T_t)-R_a(T)就是剪枝降低决策树复杂度的同事带来的代价变化。

 CCP算法的完整流程如下。

1.初始化

假设α′=0,CART算法构建的原始决策树为T1且已经使R(T)最小化。

2. 步骤1

从决策树T^1选择分支节点t∈T^1,将以分支节点t为根节点的子树替换为叶子节点之后的决策树记为T^1_t,通过评估子树R(t)和决策树R(T^1_t)的误差,选择使下式最小化的分支节点t:

 

 假设选出的分支节点为t_1,那么,\alpha ^2=max\{\alpha^1,g_1(t_1)\},新得到的决策树为T^2=T^1-T^1_{t1}

3. 步骤2

决策树T^i选择分支节点t∈T^i,将以分支节点t为根节点的子树替换为叶子节点之后的决策树记为T^i_t,最小化下式:

 

 假设选出的分支节点为t_i,那么\alpha_{i+1}=max\{\alpha_i,g_i(t_i)\},新得到的决策树为T^{i+1}=T^i-T^i_{ti}

4. 输出

这样,每一个步骤都会生成一个剪枝后的决策树和对应的α值。即

●一系列的决策树Ti,且有T^1T^2...T^k…{root}。

●一系列的αi值,且有\alpha^1\leq \alpha^2 \leq ... \leq \alpha^k...。如何选择合适的α值,从这一系列的决策树中选择出最后剪枝后的决策树呢?可以使用交叉验证,实现最小化的验证误差,这有助于避免过拟合。

下面我们举一个例子,看看CCP算法的具体演算过程。假设原始决策树如图3.2所示。左边的原始决策树记为T^1,分支节点有t_1,t_2,t_3。右边是每个数据点的坐标位置,有两种类型的数据点,分别为菱形和三角形。

 取得最小的g(t)时,t=t2或t=t3,我们选择剪枝最少的情况,因此,将t3为根节点的子树剪除,得到\alpha^2=g(t_3)=1/8。剪枝后的决策树T^2如图

 接下来进行第2次迭代,对于决策树T^2,只有两个分支节点t_1t_2,同理计算得到表

 g(t2)=1/8为最小,因此将以t2为根节点的子树剪除,得到α3=g(t2)=1/8。剪枝后的决策树T3如图

 接下来进行第3次迭代,只有唯一的t1作为候选分支节点,因此剪枝得到决策树T^4,且

 这样,我们就有了一系列的决策树T1、T2、T3、T4以及对应的\alpha 1=0,\alpha 2=1/8,\alpha 3=1/8,\alpha 4=1/4,因此,根据选择的α值,可以得到代价复杂度最小化的决策树,如果0<α≤1/8,则可以选择T2或T3,如果1/8<α≤1/4,则选择T4。或者通过交叉验证,选择合适的决策树。

3. 请说明回归树怎么实现回归;

3.1 回归决策树的特征和分割点选择准则

        CART分类树采用基尼指数最小化准则或基尼增益最大化原则,而CART回归树常用均方误差(Mean Squared Error,MSE或L2)最小化准则作为特征和分割点的选择方法。

        事实上,对于回归树来说,常见的三种不纯度测量方法是[假设预测的均值为\bar{y}_m]

●均方误差最小化方法,即最小二乘法。这种方法类似于线性模型中的最小二乘法。分割的选择是为了最小化每个节点中观测值和平均值之间的误差平方和。该方法将节点的预测值设置为y_m

 ●最小平均绝对误差(Mean Absolute Error,MAE或L1)。这种方法最小化一个节点内平均数与中位数的绝对偏差。与最小二乘法相比,它的优点是对离群值不那么敏感,并提供一个更稳健的模型。缺点是在处理包含大量零值的数据集时不敏感。

 ●最小半泊松偏差(half Poisson deviance)

3.2 回归决策树的原理

CART回归树和CART分类树最大的区别在于输出:如果输出的是离散值,则它是一棵分类树;如果输出的是连续值,则它是一棵回归树。

对于回归树,每一个节点都可以被认为是一个回归值,只不过这个值不是最优回归值,只有最底层的节点回归值可能才是理想的回归值。一个节点有回归值,也有分割选择的属性。这样给定一组特征,就知道最终怎么去回归以及回归得到的值是多少了。直觉上,回归树构建过程中,分割是为了最小化每个节点中样本实际观测值和平均值之间的残差平方和。

给定一个数据集D=\{(x_1,y_1),(x_2,y_2),...,(x_i,y_i),...,(x_n,y_n)\},其中x_i是m维向量,即x_i含有k个特征,记为变量X,是自变量,每个特征记为x_j(j=1,2,...,k),y是因变量。回归问题的目标就是构造一个函数f(X)以拟合数据集D中的样本,是的该函数预测值与样本因变量实际值的均方误差最小。即

         用CART进行回归,目标也是一样的,即最小化均方误差。假设一棵构建好的CART回归树有M个叶子节点,这意味着CART将m维输入空间X划分成了M个单元R1,R2,...,R_M,同时意味着CART至多会有M个不同的预测值。CART最小化均方误差公式如下:

 

其中,c_m表示第m个叶子节点的预测值。

想要最小化CART回归树总体的均方误差,只需要最小化每一个叶子节点的均方误差即可,而最小化一个叶子节点的均方误差,只需要将预测值设定为叶子中含有的训练集元素的均值,即

         所以,在每一次分割时,需要选择分割特征变量(splitting variable)和分割点(splitting point),使得模型在训练集上的均方误差最小。

        这里采用启发式的方法,遍历所有的分割特征变量和分割点,然后选出叶子节点均方误差之和最小的那种情况作为划分。选择第j个特征变量x_j和它的取值s,作为分割变量和分割点,则分割变量和分割点将父节点的输入空间一分为二:

        CART选择分割特征变量x_j和分割点s的公式如下:

         采取遍历的方式,我们可以求出j和s。先任意选择一个特征变量x_j,再选出在该特征下的最佳划分s;对每一个特征变量都这样做,得到k个特征的最佳分割点,从这k个值中取最小值即可得到令全局最优的(j,s).根据这个(j,s)就可以构建一个节点,然后形成两个子区间。之后分别对这两个子区间继续上述过程,就可以继续创建回归树的节点,直到满足结束条件才停止对区间的划分。

        最小二乘回归树生成算法的主要思路为在训练数据集所在的输入空间中,递归地将每个区域划分为两个子区域并决定两个子区域上的输出值,构建二叉决策树。其输入为训练数据集D,输出为回归树f(x)。具体的算法流程如下:

1)选择最优切分变量j与切分点s,求解式(2.34).遍历变量j,对固定的切分变量j扫描切分点s,选择使式分割公式使得达到最小值的对(j,s)。

2)用选定的对(j,s)划分区域并决定相应的输出值。

3)继续对两个子区域调用步骤1和2直至满足停止条件。

4)将输入空间划分为M个区域R1,R2,…,RM,生成决策树:

3.3 回归树代码实战

from cart import CartRegressor
from tree_plotter import tree_plot
from sklearn.metrics import r2_score
import numpy as np
import csv


"""加载数据集
"""
# 加载“流行歌手喜好度”数据集
with open("data/popular_singer_preference.csv", "r", encoding="gbk") as f:
    text = list(csv.reader(f))
    for i in range(len(text))[1:]:
        if text[i][1]=='male':
            text[i][1] = 1
        else:
            text[i][1] = 0
    feature_names = np.array(text[0][:-1])
    y_name = text[0][-1]
    X = np.array([v[:-1] for v in text[1:]]).astype('float')
    y = np.array([v[-1] for v in text[1:]]).astype('float')
    X_train, X_test, y_train, y_test = X, X, y, y

"""创建决策树对象
"""
dt = CartRegressor(use_gpu=False, bit=3, min_samples_split=5)

"""训练
"""
model = dt.train(X_train, y_train, feature_names)
print("model=", model)

"""预测
"""
y_pred = dt.predict(X_test)
print("y_real=", y_test)
print("y_pred=", y_pred)
print("test dataset r2={}".format(r2_score(y_test, y_pred)))

"""绘制
"""
tree_plot(model)

"""结束
"""
print("Finished.")

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

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

相关文章

Flutter高仿微信-第39篇-单聊-删除单条信息

Flutter高仿微信系列共59篇&#xff0c;从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图&#xff1a; 实现代码&#xff1a; //删除对话框 Future<void> _showDeleteDialog(Ch…

要把项目问题管理好,项目经理需要这8个步骤!

项目问题时有发生&#xff0c;想让项目获得成功&#xff0c;项目经理需要有一个计划来快速有效地应对任何出现的问题。这是最佳实践问题管理过程的一部分&#xff0c;更是良好项目管理的核心本质。 项目问题的四种类型 任何事情都可能成为项目过程中影响项目计划的问题。项目…

ZYNQ之FPGA学习----FIFO IP核使用实验

1 FIFO IP核介绍 FIFO 的英文全称是 First In First Out&#xff0c; 即先进先出。与 FPGA 内部的 RAM 和 ROM 的区别是没有外部读写地址线&#xff0c; 采取顺序写入数据&#xff0c; 顺序读出数据的方式&#xff0c;使用起来简单方便&#xff0c;缺点就是不能像 RAM 和 ROM …

共创可持续出行未来 奔驰牵手《阿凡达:水之道》

11月20日&#xff0c;梅赛德斯-奔驰与20世纪影业及其出品电影《阿凡达&#xff1a;水之道》的品牌战略合作迈入崭新篇章&#xff01;电影《阿凡达&#xff1a;水之道》已定档于12月16日在全球多地公映&#xff0c;并于即日起开启主题为——“地球&#xff0c;我们的潘多拉”的联…

医疗设备远程监控 5G千兆工业网关智慧医疗

医疗设备远程监控 5G千兆工业网关智慧医疗 5G千兆工业网关的医疗设备远程监控应用&#xff0c;实现各医疗智能终端连接入网&#xff0c;医疗数据、监控视频、设备状态数据等&#xff0c;实时采集&#xff0c;边缘节点分析处理&#xff0c;低延时高速传输&#xff0c;工作人员远…

外汇天眼:外汇投资入门知识炒汇者的心理误区有哪些?

今天这篇文章我们了解一下关于外汇炒汇者的心理误区有哪些&#xff0c;希望对大家进行外汇投资有所帮助。 盲目跟风--心理误区之一 股市被动受诸多复杂因素的影响&#xff0c;其中股友的跟风心理对股市影响甚大。有这种心理的投资人&#xff0c;看见他人纷纷购进股票时&#…

代码随想录训练营第31天|LeetCode 455.分发饼干、 376. 摆动序列、53. 最大子序和

参考 代码随想录 什么是贪心算法 贪心算法&#xff08;又称贪婪算法&#xff09;是指&#xff0c;在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;算法得到的是在某种意义上的局部最优解 。 贪心算法不…

hive表加载csv格式数据或者json格式数据

先说简单的使用 CREATE TABLE cc_test_serde( id string COMMENT from deserializer, name string COMMENT from deserializer) ROW FORMAT SERDE org.apache.hadoop.hive.serde2.JsonSerDe STORED AS INPUTFORMAT org.apache.hadoop.mapred.TextInputFormat OUTPUTFO…

Qt第二十三章:设置窗口、控件背景颜色

修改样式表&#xff1a;设置后发现影响所有控件内的背景色事件触发样式&#xff1a;鼠标划过触发样式设置背景图背景图打包。 py代码中引用 将resources.qrc文件进行转化成py文件 在我们将xxx.ui文件转换成py文件的时候会自动引用resources.qrc 实际使用中发现&#xff1a;back…

Linux系统认知——常用命令(全)

文章目录一、帮助命令1.man&#xff08;查看帮助手册&#xff09;2.info&#xff08;阅读 info 格式的文档&#xff09;3.whatis&#xff08;查询命令功能&#xff09;二、文件及目录相关命令1.touch&#xff08;创建新的空文件&#xff0c;改变已有文件的时间戳&#xff09;2.…

黑马学员放弃20K月薪投身比亚迪,是去「车间」打螺丝吗?

黑马学员进互联网企业的新闻不稀奇&#xff0c;但黑马学员进“工厂”的新闻&#xff0c;就稀奇了。 黑马学员&#xff0c;互联网人&#xff0c;“工厂”&#xff0c;这几个词放在一起&#xff0c;怎么看怎么不顺眼。甚至有人会觉得魔幻&#xff0c;敲代码的、搞设计的脑力工作…

数据技术前沿趋势、TiDB 产品方向、真实场景 Demo… 丨PingCAP DevCon 2022 产品技术论坛预览

现在报名活动&#xff0c;有机会获得限定好礼哦&#xff01;&#x1f446; 2022 年 5 月&#xff0c;TiDB 进入了 V6 时代。从 TiDB 第一个 Beta 版本开始&#xff0c;OLTP Scale、Real-time HTAP、TiDB Cloud&#xff0c;我们一步步把理念变成现实。 现在&#xff0c;数据库技…

如何保护客户数据并降低合规风险

如何保护客户数据并降低合规风险 保护客户数据和降低合规风险通常是金融行业企业&#xff08;从银行到投资公司&#xff0c;再到小型&#xff0c;中型和大型企业的财务部门&#xff09;最关心的问题。 当财务文件是以纸质形式出现时&#xff0c;这些担忧会成倍增加&#xff…

关于api的响应时间(curl)

最近遇到了需要在服务器上测试第三方api响应时间的需求。那么&#xff0c;怎么测呢&#xff1f; curl安排上。 curl -w "dnslookup: %{time_namelookup} | connect: %{time_connect} | appconnect: %{time_appconnect} | pretransfer: %{time_pretransfer} | starttrans…

3.5 讲一讲关于小红书的搜索引流技巧【玩赚小红书】

“有一大部分女生把小红书当百度使用”&#xff0c;一句话道出了小红书流量的核心。 今天&#xff0c;我更想和大家聊聊如何获取同样巨大的搜索流量&#xff0c;让源源不断的精准客户主动找上门来。可别忽视了这个流量入口&#xff0c;它占据总体流量的 50% 以上。 ​ ​ 布局…

2022卡塔尔世界杯引爆全球,跨境电商如何做好选品和营销?

2022卡塔尔世界杯正如火如荼的举办着&#xff0c;热度席卷全球。足球皇帝Franz Beckenbauer曾说&#xff1a;“在绿茵场上滚动的不是足球&#xff0c;而是黄金。”从商业价值论&#xff0c;世界杯的品牌价值世界第一&#xff0c;是奥运会的8倍。据Nox聚星了解&#xff0c;2022年…

centos7.9安装postgresql12

目录 1.下载安装包 2.安装 首先登陆官方网站下载 PostgreSQL: Downloads 1.下载安装包 按照官方的命令安装&#xff1a; # 下载PGSQL的rpm包 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm #…

基于STM32G431嵌入式学习笔记——六、串口中断实例(基于第12届蓝桥杯串口部分题目)

上一节我们初步了解了中断的配置、串口的调试以及中断处理子程序的定义&#xff0c;接下来我们就来学习一下具体如何去应用串口中断。 一、真题引入 1.功能概述 2.串口功能 二、环境配置 我们依旧以第四节完成的第12届蓝桥杯节选题为初始环境进行配置&#xff0c;复制出…

Linux|centos7 Prometheus的自动服务发现 一(文件发现机制)

前言&#xff1a; Prometheus作为一个监控神器&#xff0c;深受大家的喜爱&#xff0c;那么如何使用它是一个问题&#xff0c;如何用好它又是一个问题了。 本文以centos7操作系统下搭建的Prometheus server为例&#xff0c;讲解基于文件发现新的采集器。 一&#xff0c; Pr…

【FLASH存储器系列十二】Nand Flash芯片使用指导之二

目录 1.1 芯片指令集 1.2 READ PAGE&#xff08;00h–30h&#xff09; 1.3 READ PAGE CACHE SEQUENTIAL (31h) 1.4 READ PAGE CACHE RANDOM (00h-31h) 1.5 PROGRAM PAGE&#xff08;80h-10h&#xff09; 1.6 PROGRAM PAGE CACHE (80h-15h) 1.7 ERASE BLOCK (60h-D0h) 上…