回归决策树的构建

embedded/2024/12/22 15:06:16/

回归决策树是一种决策树模型,顾名思义,它用于解决回归问题,即预测连续数值型的输出变量。它基于树状结构,通过一系列内部节点、分支和叶节点来建立数据特征与输出值之间的非线性关系。在构建回归决策树的过程中,数据集被递归地分割,每个节点根据一个或多个特征的值做出判断,将数据集划分为子集,直到达到叶节点。叶节点存储一个特定的预测值,代表在经过该节点路径的所有特征测试后,输入数据所对应的输出变量的预期值。

构建

数据预处理

数据清洗:去除无效、缺失或异常的数据,对缺失值进行适当填充(如使用平均值、中位数等)或删除包含缺失值的样本。

特征编码:如果数据集中存在非数值型特征(如类别特征、文本特征等),可能需要进行编码转换,如独热编码、标签编码等,将其转化为数值形式以便模型处理。

数据标准化或归一化:尽管回归决策树对数据的尺度相对不敏感,但在某些情况下,对特征进行标准化(减均值除以标准差)或归一化(缩放到[0, 1]区间)可以提升模型训练的稳定性。

树的生成

初始化:创建一个根节点,其包含整个训练数据集。

递归划分:从根节点开始,对于每个内部节点(非叶节点)执行以下操作:

  • 选择最优特征与分割点:计算所有候选特征及其可能分割点对应的指标(如最小平方误差、均方根误差等),选择使指标最优的特征及其分割点。
  • 数据分割:按照选定特征与分割点将当前节点的数据集划分为两个子集,一个大于分割点,一个小于等于(分割点也许是中位数,也许是平均数,也许直接遍历每一个可能的分割点)将当前节点的数据集划分为两个或多个子集,分别对应新的子节点。
    因此,在分割数据时需要排序数据,以便选择最优的分割点。
  • 递归:对每个子节点重复以上过程,直到达到预定义的停止条件。
    常见的停止条件包括:

节点包含的样本数:当节点内样本数量小于设定阈值时停止继续划分。
节点内方差:当节点内数据的方差低于某个阈值,表明数据已经足够纯,无需再划分。
树的最大深度:设定树的最大深度限制,防止过拟合。
其他复杂度指标:如限制叶子节点数量、最小节点大小等。

叶节点值确定

对于每个叶节点,计算其包含的所有训练样本的响应变量(连续数值)的平均值(或其他统计量,如中位数等),作为该叶节点的预测值。未来新样本到达该叶节点时,就以这个预测值作为其输出预测。

(可选)剪枝优化

为了防止过拟合,可以对生成的完整决策树进行剪枝操作,简化模型并提高泛化能力。常用的剪枝方法包括:

预剪枝:在树生长过程中提前终止,例如设置更严格的停止条件,限制树的深度或节点数。
后剪枝:先生成完整的决策树,然后自底向上评估每个非叶节点,若将其替换为叶节点(即剪掉其子树)能带来整体性能(如验证集上的MSE)的改善,则进行剪枝。此过程反复进行,直到没有节点的剪枝能带来性能提升为止。

模型评估与选择

使用独立的验证集或交叉验证评估构建好的回归决策树的预测性能,根据评估结果可能需要调整模型参数(如最大深度、最小样本数等)或剪枝强度,选择最优模型。

综上所述,构建回归决策树的过程涉及数据预处理、树的递归生成、叶节点值确定以及可能的剪枝优化。通过这些步骤,模型得以从训练数据中学习到特征与连续响应变量之间的非线性关系,用于对未来数据进行预测


http://www.ppmy.cn/embedded/10869.html

相关文章

python-Django实现前端登陆界面-包含登陆账号和密码

要在Django框架中创建一个前端登录页面,我们需要分别创建视图、模板和URL路由。以下是一个简化的Django登录页面实现示例: python manage.py startapp accounts from django.contrib.auth import authenticate, login, logout from django.http import HttpResponseForbidde…

JAVA----DES方式加密

DES方式加密 工具方法 DESUtils public class DESUtils {private final static String ALGORITHM "DES";private final static String charsetName "UTF-8";public final static String decrypt(String data, String key) throws Exception {return ne…

Elasticsearch 索引文档的过程

协调节点默认使用文档 ID 参与计算( 也支持通过 routing) , 以便为路由提供合适的分片。 1 shard hash(document_id) % (num_of_primary_shards)1、 当分片所在的节点接收到来自协调节点的请求后 ,会将请求写入到Memory Buffer …

14 Php学习:表单

表单 PHP 表单是用于收集用户输入的工具,通常用于网站开发。PHP 可以与 HTML 表单一起使用,用于处理用户提交的数据。通过 PHP 表单,您可以创建各种类型的表单,包括文本输入框、复选框、下拉菜单等,以便用户可以填写和…

数据结构和算法:贪心

贪心算法 贪心算法是一种常见的解决优化问题的算法,其基本思想是在问题的每个决策阶段,都选择当前看起来最优的选择,即贪心地做出局部最优的决策,以期获得全局最优解。 贪心算法和动态规划都常用于解决优化问题。它们之间存在一…

【leetcode面试经典150题】66. 分隔链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

[Windows] Bypass分流抢票 v1.16.25 五一黄金周自动抢票软件(2024.02.08更新)

五一黄金周要来了,火车票难买到,即便官网候选订票也要看运气,推荐使用这个靠谱的自动抢票软件, 该工具是目前市面上最好用口碑最好的电脑抢票软件,从13年到现在,作者依旧在更新,可以自动识别123…

04-15 周一 GitHub仓库CI服务器actions-runner和workflow yaml配置文档解析

04-15 周一 GitHub仓库CI服务器配置过程文档 时间版本修改人描述2024年4月15日10:35:52V0.1宋全恒新建文档2024年4月17日10:33:20v1.0宋全恒完成github actions CI的配置和工作流配置文件解读文档的撰写 简介 一些基础概念 前提知识 仓库介绍 地址镜像介绍https://github.…