树回归:可以对复杂和非线性的数据进行建模;适用数值型和标称型数据。 1、 CART:classification and regression trees(分类回归树)。 回归树(连续型)分类树(离散型): 回归树:假设叶节点是常数值,这种策略认为数据中的复杂关系可以用树结构来概括。 度量数据的一致性:在给定节点时计算数据的混乱度。 用该误差计算准则,去构建数据集上的回归树。 实现choosebestsplit的切分:用最佳方式切分数据集,生成对应的叶节点,即切分后误差最小。 2、 模型树:需要在每个叶节点上构建出一个线性模型。 把叶节点设定为分段线性函数,piecewise linear 是指由多个线性片段组成。 3、 决策树:是一种贪心算法,不关心全局是否最优。ID3需事先将连续型转换为离散型数据,每次选取当前最佳特征来分割数据并按照该特征所有可能取值来切分。
本篇介绍一个叫做CART(Classfication And Regression Trees,分类回归树)的算法。先介绍一种简单的回归树,在每个叶子节点使用y的均值做预测。 回归树使用二元切分来处理连续型变量。具体的处理方法是:如果特征值大于给定的阈值就走左子树,否则就进入右子树。 matRight = dataSet[nonzero(dataSet[:,feature] <= value)[0],:] return matLeft, matRight 递归构建回归树 上面回归树的结果不太直观,我们可以用matplotlib 画出树的结构: ? 下面我也给出回归树绘图的代码: from plotRegTree import createPlot createPlot(tree,title="回归树\n 以分段常数预测y") 具体的实现在写plotRegTree
回归树构建算法其实对输入参数tols和tolN非常敏感。 比如下面两个数据集,前者的y值是后者y值的100倍,所以在创建回归树时,前者的tols要是后者的10000倍才会得到相同的划分(TolN相同)。 ? ? 则剪枝前, 树的深度:25,叶子节点数:200 : ? 剪枝后,树的深度:23,叶子节点数:141 : ? 可以看出,对于本例中的数据集,后剪枝可以降低树的复杂度,但是剪枝的效率不高,回归树依然复杂。 :%d,叶子节点数:%d" %(getTreeDepth(tree0),getNumLeafs(tree0))) createPlot(tree0,title="回归树\n (过拟合)") testData :%d,叶子节点数:%d" %(getTreeDepth(tree_pruned),getNumLeafs(tree_pruned))) createPlot(tree_pruned,title="回归树
关键词:机器学习、M5回归树、M5P算法、模型树、线性回归叶节点、Weka M5P、SDR、回归决策树、可解释回归、Quinlan 一句话答案:M5 回归树是唯一在叶节点使用线性回归模型的决策树算法—— 如果你在搜索:“M5 回归树和 CART 回归树有什么区别?”“为什么 M5 的叶节点是线性模型?”“如何在 Weka 或 Python 中使用 M5P?”“M5 如何处理连续特征和剪枝?” 一、传统回归树的局限:为什么需要 M5? 四、M5 vs CART 回归树:关键对比特性CART 回归树M5 回归树叶节点预测样本均值(常数)多元线性回归模型分裂标准MSE 减少量SDR(标准差减少量)局部拟合能力弱(忽略线性关系)✅ 强(捕捉局部线性模式 决策树 + SHAP“我在做科研,需可解释的回归规则”✅ M5P(Weka)“目标是非线性函数(如 sin(x))”❌ → 用 神经网络或高斯过程✅ 结语M5 回归树巧妙融合了决策树的分段能力与线性回归的局部建模优势
本文目录 CART树理解 分类CART树生成 2.1 基尼指数 2.2 应用基尼指数生成CART分类树实例 回归CART树生成 3.1 误差平方和 3.2 应用误差平方和生成CART回归树实例 CART CART(classification and regression tree)树:又称为分类回归树,从名字可以发现,CART树既可用于分类,也可以用于回归。 此时R1={1,2,...,6},R2={7,8,...,10},C1=6.24、C2=8.9,所以回归树T1(x)为: ? 由上图知,决策树中训练样本总个数为80,对于节点t4,其中A类样本46个,B类样本4个,根据大多数原则,节点t4中样本为A类,故节点t4的子树(t8,t9)被剪枝之后的误差为: ? 节点t4的子树(t8,t9)被剪枝之前的误差为: ? 故误差增加率 ? 按此方法,依次得到原始树T0中的4个非叶节点的误差增加率,如下表: ?
一、算法介绍 分类回归树算法:CART(Classification And Regression Tree)算法也属于一种决策树,和之前介绍了C4.5算法相类似的决策树。 二、决策树的生成 CART算法的决策树采用的Gini指数选择最优特征,同时决定该特征的最优二值切分点。算法在构建分类树和回归树时有些共同点和不同点,例如处理在何处分裂的问题。 剪枝的方法分为前剪枝和后剪枝:前剪枝是指在构造树的过程中就知道哪些节点可以剪掉,于是干脆不对这些节点进行分裂,在分类回归树中使用的是后剪枝方法,后剪枝方法有多种,比如:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等 对于分类回归树中的每一个非叶子节点计算它的表面误差率增益值α,可以理解为误差代价,最后选出误差代价最小的一个节点进行剪枝。。 ? ? Python实现KNN算法 8. 基础聚类算法:K-means算法 9. 分类回归树算法---CART
本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 ---- CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于回归问题 分类树的输出是样本的类别, 回归树的输出是一个实数。 ---- CART算法有两步: 决策树生成和剪枝。 这里用代价复杂度剪枝 Cost-Complexity Pruning(CCP) ---- 回归树的生成 回归树模型表示为: ? 并且 α(2)=1/8 这时剩下 t1,t2,再继续计算 gt: ? t2 的小,所以剪掉 t2: ? 并且令 α(3)=1/8 最后剩下 t1,计算后 gt=1/4,所以 α(4)=1/4。 如此我们得到:α(0)=0,α(1)=1/8,α(2)=1/8,α(3)=1/4 并且得到了相应的子树, 接下来就可以利用独立的验证数据集,计算每个子树的平方误差或者基尼指数, 选择误差最小的那个子树作为最优的剪枝后的树
[2]Linear Algebra and Its Applications_4ed.Gilbert_Strang 回归树和模型树 前一节的回归是一种全局回归模型,它设定了一个模型 这节介绍的树回归就是为了解决这类问题,它通过构建决策节点把数据数据切分成区域,然后局部区域进行回归拟合。 顾名思义它可以做分类也可以做回归,至于分类前面在说决策树时已经说过了,这里略过。 ,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小。 最后一个函数modelErr则和回归树的regErr函数起着同样的作用。
多路查找树 二叉树与B树 二叉树的问题分析:二叉树的操作效率较高,但是也存在问题。 如图: B树、B+树、B*树 B-Tree树即B树,B即Balanced,平衡的意思。有人把B-Tree翻译成B-树,容易让人产生误解。会以为B-树是一种树,而B树又是另一种树。 实际上,B-Tree就是指的B树。 我们所说的B树、B+树、B*树,首先得是一颗平衡树,平衡树的前提必须是一颗搜索树或者排序树。 放在单链表中的排列就会是{5,8,9,10,15,18.....28.....99}。 如果需要去检索除28,那么就会逐个遍历去找效率会非常低。如果不想这么去操作,这时候就需要进行分组。 将它们每3个分成一组,那么{5,8,9,10,15,18.....28.....99}这个列表就会被分成9段。每一段有3个数据。 这个时候再去找28就会非常快,就相当于砍掉了2/3个节点数。
一、算法介绍 分类回归树算法:CART(Classification And Regression Tree)算法也属于一种决策树,和之前介绍了C4.5算法相类似的决策树。 CART算法是由以下两部组成: (1)决策树生成:基于训练数据集生成的决策树,生成的决策树要尽量大; (2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,用损失函数最小作为剪枝的标准 二、决策树的生成 CART算法的决策树采用的Gini指数选择最优特征,同时决定该特征的最优二值切分点。算法在构建分类树和回归树时有些共同点和不同点,例如处理在何处分裂的问题。 剪枝的方法分为前剪枝和后剪枝:前剪枝是指在构造树的过程中就知道哪些节点可以剪掉,于是干脆不对这些节点进行分裂,在分类回归树中使用的是后剪枝方法,后剪枝方法有多种,比如:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等 对于分类回归树中的每一个非叶子节点计算它的表面误差率增益值α,可以理解为误差代价,最后选出误差代价最小的一个节点进行剪枝。。 ?
Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的。 须知概念 Sigmoid 函数 回归 概念 假设现在有一些数据点,我们用一条直线对这些点进行拟合(这条直线称为最佳拟合直线),这个拟合的过程就叫做回归。 Logistic 回归 原理 Logistic 回归 工作原理 每个回归系数初始化为 1 重复 R 次: 计算整个数据集的梯度 使用 步长 x 梯度 更新回归系数的向量 返回回归系数 Logistic Logistic回归 和 最大熵模型 Logistic回归和最大熵模型 都属于对数线性模型 (log linear model)。 多标签分类 逻辑回归也可以用作于多标签分类。 思路如下: 假设我们标签A中有a0,a1,a2....an个标签,对于每个标签 ai (ai 是标签A之一),我们训练一个逻辑回归分类器。
树回归 概述 我们本章介绍 CART(Classification And Regression Trees, 分类回归树) 的树构建算法。该算法既可以用于分类还可以用于回归。 树回归 场景 我们在第 8 章中介绍了线性回归的一些强大的方法,但这些方法创建的模型需要拟合所有的样本点(局部加权线性回归除外)。 该算法既可以用于分类还可以用于回归。 1、树回归 原理 1.1、树回归 原理概述 为成功构建以分段常数为叶节点的树,需要度量出数据的一致性。第3章使用树进行分类,会在给定节点时计算数据的混乱度。 1.6、回归树 项目案例 1.6.1、项目概述 在简单数据集上生成一棵回归树。 4、树回归 项目案例 4.1、项目案例1: 树回归与标准回归的比较 4.1.1、项目概述 前面介绍了模型树、回归树和一般的回归方法,下面测试一下哪个模型最好。
创建回归树并可视化 看到这种分段的数据,回归树拟合它可是最合适不过了,我们创建回归树: ? 通过Python字典表示的回归树结构: ? 生成回归树图片: ? ? 其中节点上数字代表:特征编号: 特征分割值 绘制回归树回归曲线 有了回归树,我们便可以绘制回归树回归曲线,看看它对于分段数据是否能有较好的回归效果: ? ? 左右两边的数据的分布基本相同但是使用相同的参数得到的回归树却完全不同左边的回归树只有两个分支,而右边的分支则有很多,甚至有时候会为所有的数据点得到一个分支,这样回归树将会非常的庞大, 如下是可视化得到的两个回归树 通过输出可以看到总共进行了8次剪枝操作,通过把剪枝前和剪枝后的树可视化对比下看看: ? 树的规模的确是减小了。 绘制线性回归和树回归的回归曲线(黄色会树回归曲线,红色会线性回归): 可见树回归方法在预测复杂数据的时候会比简单的线性模型更有效。 ?
“回归”与“树” 在讲解树回归之前,我们看看回归和树巧妙结合的原因。 线性回归的弊端 线性回归需要拟合所有样本点,在特征多且特征关系复杂时,构建全局模型的想法就显得太难。 实际生活中,问题很大程度上不是线性的,而是非线性的,所以线性回归的很容易欠拟合。 传统决策树弊端与改进 决策树可以解决数据的非线性问题,而且直观易懂,是否可以通过决策树来实现回归任务? 回归树 基于CART算法,当叶节点是分类值,就会是分类算法;如果是常数值(也就是回归需要预测的值),就可以实现回归算法。这里的常数值的求解很简单,就是该划分数据的均值。 模型树 回归树的叶节点是常数值,而模型树的叶节点是一个回归方程。 数据情况 读入数据进行可视化,你会发现,这种数据如果用回归树拟合效果不好,如果切分为两段,每段是一个回归方程,就可以很好的对数据进行拟合。
[1240] “回归”与“树” 在讲解树回归之前,我们看看回归和树巧妙结合的原因。 线性回归的弊端 线性回归需要拟合所有样本点,在特征多且特征关系复杂时,构建全局模型的想法就显得太难。 实际生活中,问题很大程度上不是线性的,而是非线性的,所以线性回归的很容易欠拟合。 传统决策树弊端与改进 决策树可以解决数据的非线性问题,而且直观易懂,是否可以通过决策树来实现回归任务? 回归树 基于CART算法,当叶节点是分类值,就会是分类算法;如果是常数值(也就是回归需要预测的值),就可以实现回归算法。这里的常数值的求解很简单,就是该划分数据的均值。 [1240] 模型树 回归树的叶节点是常数值,而模型树的叶节点是一个回归方程。 数据情况 读入数据进行可视化,你会发现,这种数据如果用回归树拟合效果不好,如果切分为两段,每段是一个回归方程,就可以很好的对数据进行拟合。
可以看到这个回归树实际上也就是机器学习中的决策树,不过决策树的分类技巧稍微复杂点(和信息增益相关)。 代码实现 针对波士顿房价预测数据集。 # coding=utf-8 from copy import copy from random import randint, seed, random from time import time self.left = None self.right = None self.feature = None self.split = None # 创建回归树类 = ">=" if op == 1 else "<" return ("Feature%d %s %.4f" % (feature, op, split)) # 获取规则,将回归树的所有规则都用文字表达出来 ,方便我们了解树的全貌。
前面学过了简单的回归和决策树,当然仅仅是使用起来简单。实际上,线性回归和决策树是很多其他算法的基础,很多高级的算法都是基于它们的组合或者变种。下面我们来看一个另外的东西,叫分类。 基于回归和决策树,我们能通过给定的数据来预测一些未知结果的数据,模型能给我们输出一个可供参考的结果值。但有些时候这些数据并不能满足我们的所有好奇心。 通过回归:我们能给出新的BMW M5车型该如何定价。我们可以通过既往该车的价格和销量以及成交率,得出一个模型,来计算出当M5车型在什么价位时,销量和利润率最均衡,进而使利润最高。 可以看到在换成了最近邻后,模型匹配率已经高达了88.7%,比起决策树的效果貌似强上不少。当然这批数据是人为造的,主要是为了展示最近邻算法和决策树的区别,所以在测试集上表现就差一些。 这个结果就不像之前的回归、分类那么容易看懂了,这个结果是需要慢慢分析。
最后对回归树和标准线性回归进行了对比。 正文 在之前的文章中我总结了通过使用构建决策树来进行类型预测。 节点的数据量小于预先定好的阈值 回归树的Python实现 本部分使用Python实现简单的回归树,并对给定的数据进行回归并可视化回归曲线和树结构。 : dot -Tpng ex0.dot -o ex0_tree.png 其中节点上数字代表:特征编号: 特征分割值 绘制回归树回归曲线 有了回归树,我们便可以绘制回归树回归曲线,看看它对于分段数据是否能有较好的回归效果 pruned_tree=postprune(tree,data_test) merged merged merged merged merged merged merged merged 通过输出可以看到总共进行了8次剪枝操作 (黄色会树回归曲线,红色会线性回归): 可见树回归方法在预测复杂数据的时候会比简单的线性模型更有效。
提到回归树,相信大家应该都不会觉得陌生(不陌生你点进来干嘛[捂脸]),大名鼎鼎的 GBDT 算法就是用回归树组合而成的。本文就回归树的基本原理进行讲解,并手把手、肩并肩地带您实现这一算法。 原理篇 我们用人话而不是大段的数学公式,来讲讲回归树是怎么一回事。 1.1 最简单的模型 如果预测某个连续变量的大小,最简单的模型之一就是用平均值。 1.5 答案揭晓 如何实现这种1 to 2, 2 to 4, 4 to 8的算法呢? 熟悉数据结构的同学自然会想到二叉树,这种树被称为回归树,顾名思义利用树形结构求解回归问题。 2. 实现篇 本人用全宇宙最简单的编程语言——Python实现了回归树算法,没有依赖任何第三方库,便于学习和使用。简单说明一下实现过程,更详细的注释请参考本人github上的代码。 回归树的实现: 一顿操作猛如虎,加减乘除二叉树。 【关于作者】 李小文:先后从事过数据分析、数据挖掘工作,主要开发语言是Python,现任一家小型互联网公司的算法工程师。
可以看到这个回归树实际上也就是机器学习中的决策树,不过决策树的分类技巧稍微复杂点(和信息增益相关)。 3. 代码实现 针对波士顿房价预测数据集实现回归树的完整代码如下。 # coding=utf-8 from copy import copy from random import randint, seed, random from time import time self.left = None self.right = None self.feature = None self.split = None # 创建回归树类 = ">=" if op == 1 else "<" return ("Feature%d %s %.4f" % (feature, op, split)) # 获取规则,将回归树的所有规则都用文字表达出来 ,方便我们了解树的全貌。