Regression Tree 回归树

本文介绍了回归树(Regression Tree),作为机器学习中的一种算法,它不同于分类决策树,适用于处理连续型数据。文章详细讲解了CART算法,包括如何选择划分点和决定叶节点的输出值,并通过一个实例展示了回归树的构建过程。最后,对比了回归树与线性回归的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 引言

AI时代,机器学习算法成为了研究、应用的热点。当前,最火的两类算法莫过于神经网络算法(CNN、RNN、LSTM等)与树形算法(随机森林、GBDT、XGBoost等),树形算法的基础就是决策树。决策树因其易理解、易构建、速度快的特性,被广泛应用于统计学、数据挖掘、机器学习领域。因此,对决策树的学习,是机器学习之路必不可少的一步。

根据处理数据类型的不同,决策树又分为两类:分类决策树回归决策树,前者可用于处理离散型数据,后者可用于处理连续型数据,下面的英文引用自维基百科

Classification tree analysis is when the predicted outcome is the class to which the data belongs.

Regression tree analysis is when the predicted outcome can be considered a real number (e.g. the price of a house, or a patient’s length of stay in a hospital).

网络上有关于分类决策树的介绍可谓数不胜数,但是对回归决策树(回归树)的介绍却少之又少。李航教授的统计学习方法 对回归树有一个简单介绍,可惜篇幅较短,没有给出一个具体实例;Google搜索回归树,有一篇介绍回归树的博客(点击),该博客所举的实例有误,其过程事实上是基于残差的GBDT

基于以上原因,本文简单介绍了回归树(Regression Tree),简单描述了CART算法,给出了回归树的算法描述,辅以简单实例以加深理解,最后是总结部分。

2. 回归树

决策树实际上是将空间用超平面进行划分的一种方法,每次分割的时候,都将当前的空间一分为二, 这样使得每一个叶子节点都是在空间中的一个不相交的区域,在进行决策的时候,会根据输入样本每一维feature的值,一步一步往下,最后使得样本落入N个区域中的一个(假设有N个叶子节点),如下图所示。

决策树

三种比较常见的分类决策树分支划分方式包括:ID3, C4.5, CART。

分类决策树

分类与回归树(classificationandregressiontree, CART)模型由Breiman等人在1984年提出,是应用广泛的决策树学习方法。CART同样由特征选择、树的生成及剪枝组成,既可以用于分类也可以用于回归。下面的英文引用自维基百科

The term Classification And Regression Tree (CART) analysis is an umbrella term used to refer to both of the above procedures, first introduced by Breiman et al. Trees used for regression and trees used for classification have some similarities - but also some differences, such as the procedure used to determine where to split.

下面介绍回归树。

2.1 原理概述

既然是决策树,那么必然会存在以下两个核心问题:如何选择划分点?如何决定叶节点的输出值?

一个回归树对应着输入空间(即特征空间)的一个划分以及在划分单元上的输出值。分类树中,我们采用信息论中的方法,通过计算选择最佳划分点。而在回归树中,采用的是启发式的方法。假如我们有n个特征,每个特征有 s i ( i ∈ ( 1 , n ) ) s_i(i \in (1,n)) si(i(1,n))个取值,那我们遍历所有特征,尝试该特征所有取值,对空间进行划分,直到取到特征j的取值s,使得损失函数最小,这样就得到了一个划分点。描述该过程的公式如下:(如果看不到图请点击永久地址

损失

假设将输入空间划分为M个单元: R 1 , R 2 , . . . , R m R_1,R_2,...,R_m R1,R2,...,Rm 那么每个区域的输出值就是: c m = a v e ( y i ∣ x i ∈ R m ) c_m=ave(y_i|x_i \in R_m) cm=ave(yixiRm)也就是该区域内所有点y值的平均数。

举个例子。如下图所示,假如我们想要对楼内居民的年龄进行回归,将楼划分为3个区域 R 1 , R 2 , R 3 R_1, R_2, R_3 R1

### 华为OD机试中的Java考察内容与题目解析 #### 一、最长合法表达式的实现 在华为OD机试中,有一类常见的问题是关于字符串处理的合法性验证。例如,“最长合法表达式”的问题通常涉及括号匹配或其他字符序列的有效性判断。这类问题可以通过栈结构来解决。 以下是基于Java的一个解决方案: ```java import java.util.Stack; public class LongestValidExpression { public static int longestValidParentheses(String s) { Stack<Integer> stack = new Stack<>(); stack.push(-1); int maxLen = 0; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(') { stack.push(i); // 记录左括号的位置 } else { // 当前字符为 ')' stack.pop(); if (stack.isEmpty()) { stack.push(i); // 更新最近未被匹配的右括号位置 } else { maxLen = Math.max(maxLen, i - stack.peek()); } } } return maxLen; } public static void main(String[] args) { String testStr = "(()))())()"; System.out.println(longestValidParentheses(testStr)); // 输出最大长度 } } ``` 上述代码实现了寻找给定字符串中最长有效括号子串的功能[^1]。 --- #### 二、TLV编码的解析及其实现 另一个重要的考点是TLV(Type-Length-Value)编码的解析和应用。该问题主要考查候选人对数据结构的理解以及如何高效地操作字节流。 下面是一个简单的TLV解码器实现(Java版本): ```java import java.nio.ByteBuffer; public class TLVDecoder { private static final int TYPE_LENGTH = 2; // 类型字段固定占用两个字节 private static final int LENGTH_FIELD_SIZE = 2; // 长度字段固定占用两个字节 public static void decode(byte[] data) { ByteBuffer buffer = ByteBuffer.wrap(data); while (buffer.remaining() >= TYPE_LENGTH + LENGTH_FIELD_SIZE) { short type = buffer.getShort(); // 获取类型部分 short length = buffer.getShort(); // 获取长度部分 if (length > buffer.remaining()) { throw new IllegalArgumentException("Invalid TLV format"); } byte[] valueBytes = new byte[length]; buffer.get(valueBytes); // 提取值部分 System.out.printf("Type: %d, Length: %d, Value: %s%n", Short.toUnsignedInt(type), length, new String(valueBytes)); } } public static void main(String[] args) { byte[] tlvData = {(byte) 0x01, (byte) 0x00, (byte) 0x05, (byte) 0x00, 'H', 'e', 'l', 'l', 'o'}; decode(tlvData); // 解析并打印结果 } } ``` 此程序展示了如何读取和解释TLV格式的数据流[^2]。 --- #### 三、注意事项 除了技术层面的知识外,在参加华为OD机试时还需要特别关注以下几点: - **时间管理**:合理分配每道题的时间,确保能在规定时间内完成尽可能多的任务。 - **代码质量**:即使是在限时考试环境下也应保持良好的编程习惯,比如清晰命名变量、适当注释等。 - **查重规避**:由于企业可能会使用工具检测提交代码与其他公开资源之间的相似程度,因此建议尽量用自己的方式重新编写逻辑而不是直接复制粘贴已有的解答方案。 ---
评论 89
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值