关键词:机器学习、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 回归树巧妙融合了决策树的分段能力与线性回归的局部建模优势
树回归:可以对复杂和非线性的数据进行建模;适用数值型和标称型数据。 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的Mac,M5是某中心第五代芯片家族的首款芯片,也是该系列中(几乎?)所有其他Mac即将到来的预览。 这款笔记本还包括三个Thunderbolt 3端口(比MacBook Air多一个),以及重新回归的MagSafe充电端口。 测试Apple的M5我们也在M5 iPad Pro评测中运行了一些M5基准测试,但在其上运行macOS而非iPadOS确实给了我们更多的测试灵活性——更多的基准测试和少数几款高端游戏可以运行,以及访问命令行以查看功耗和效率 M5通常比M1快一倍多一点,并且接近过去几代某些Pro和Max处理器的性能水平。M5 MacBook Pro的性能不及M4 Pro,并且无论何时M5 Pro到来,差距会更大。 M5 MacBook Pro延续了这一复杂的传统,即使有了M5,仍然有很多人对他们来说,其中一款M4 MacBook Air将更合适。
本文目录 CART树理解 分类CART树生成 2.1 基尼指数 2.2 应用基尼指数生成CART分类树实例 回归CART树生成 3.1 误差平方和 3.2 应用误差平方和生成CART回归树实例 CART CART(classification and regression tree)树:又称为分类回归树,从名字可以发现,CART树既可用于分类,也可以用于回归。 首先求特征A1的基尼指数,A1中有三个类别:青年、中年、老年,样本数量都是5,根据公式 ? 假设要求Gini(D,A1=青年)的值,其中|D|表示整个数据集中样本个数,从编号知值为15,|D1|表示年龄是青年的样本个数,值为5,|D2|表示年龄不是青年的样本个数,值为10。 2 应用误差平方和生成CART回归树实例 为了大家更清晰地理解公式,接下来阐述应用误差平方和挑选特征建立CART回归树的具体实例。 ?
一、算法介绍 分类回归树算法:CART(Classification And Regression Tree)算法也属于一种决策树,和之前介绍了C4.5算法相类似的决策树。 二、决策树的生成 CART算法的决策树采用的Gini指数选择最优特征,同时决定该特征的最优二值切分点。算法在构建分类树和回归树时有些共同点和不同点,例如处理在何处分裂的问题。 对于分类回归树中的每一个非叶子节点计算它的表面误差率增益值α,可以理解为误差代价,最后选出误差代价最小的一个节点进行剪枝。。 ? ? 决策树算法之一C4.5 2. 数据挖掘之Apriori算法 3. 网页排序算法之PageRank 4. 分类算法之朴素贝叶斯分类 5. 遗传算法如何模拟大自然的进化? 6. 分类回归树算法---CART
本文结构: CART算法有两步 回归树的生成 分类树的生成 剪枝 ---- CART - Classification and Regression Trees 分类与回归树,是二叉树,可以用于分类,也可以用于回归问题 分类树的输出是样本的类别, 回归树的输出是一个实数。 ---- CART算法有两步: 决策树生成和剪枝。 这里用代价复杂度剪枝 Cost-Complexity Pruning(CCP) ---- 回归树的生成 回归树模型表示为: ? 例如,按照“体温为恒温和非恒温”进行划分,计算如下: 恒温时包含哺乳类5个、鸟类2个 ? 非恒温时包含爬行类3个、鱼类3个、两栖类2个 ? 得到特征‘体温’下数据集的GINI指数: ? mlwiki.org/index.php/Cost-Complexity_Pruning ---- 推荐阅读 历史技术博文链接汇总 http://www.jianshu.com/p/28f02bb59fe5
[2]Linear Algebra and Its Applications_4ed.Gilbert_Strang 回归树和模型树 前一节的回归是一种全局回归模型,它设定了一个模型 这节介绍的树回归就是为了解决这类问题,它通过构建决策节点把数据数据切分成区域,然后局部区域进行回归拟合。 顾名思义它可以做分类也可以做回归,至于分类前面在说决策树时已经说过了,这里略过。 ,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小。 最后一个函数modelErr则和回归树的regErr函数起着同样的作用。
一、算法介绍 分类回归树算法:CART(Classification And Regression Tree)算法也属于一种决策树,和之前介绍了C4.5算法相类似的决策树。 二、决策树的生成 CART算法的决策树采用的Gini指数选择最优特征,同时决定该特征的最优二值切分点。算法在构建分类树和回归树时有些共同点和不同点,例如处理在何处分裂的问题。 GINI指数考虑每个属性的二元划分,如果类别中有v个可能的值,则存在2^v个可能的子集,例如,表面覆盖有5个可能的值,主要的{毛发,非毛发},{鳞片,非鳞片},我们需要选择最小基尼指数作为划分。 剪枝的方法分为前剪枝和后剪枝:前剪枝是指在构造树的过程中就知道哪些节点可以剪掉,于是干脆不对这些节点进行分裂,在分类回归树中使用的是后剪枝方法,后剪枝方法有多种,比如:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等 对于分类回归树中的每一个非叶子节点计算它的表面误差率增益值α,可以理解为误差代价,最后选出误差代价最小的一个节点进行剪枝。。 ?
苹果此前的M5处理器的游戏性能表现已经给人留下了深刻的印象,其在《赛博朋克2077》中,启用光线追踪后,帧率比M4高出了190%,因此外界也非常期待更为强大的M5 Max的游戏性能表现。 不过,该Reddit用户表示,这些数据来自Notebookcheck,M5 Max的预估性能可能是根据苹果以往Mac处理器发布情况和每一代产品的性能提升情况进行估算的。 与英伟达面向笔记本电脑RTX 5070 Ti 显卡相比,M5 Max略快;在《赛博朋克2077》中,M5 Max仅比英伟达RTX 4070显卡慢了一点点。 至于《刺客信条:暗影》,英伟达RTX 5070 Ti相较于M5 Max则略有优势。 另外,关于M5 Max的硬件参数,目前也并不清楚。
Logistic 回归 概述 Logistic 回归 或者叫逻辑回归 虽然名字有回归,但是它是用来做分类的。 Logistic 回归 原理 Logistic 回归 工作原理 每个回归系数初始化为 1 重复 R 次: 计算整个数据集的梯度 使用 步长 x 梯度 更新回归系数的向量 返回回归系数 Logistic master/src/py2.x/ml/5.Logistic/logistic.py 项目概述 在一个简单的数据集上,采用梯度上升法找到 Logistic 回归分类器在此数据集上的最佳回归系数 开发流程 项目案例2: 从疝气病症预测病马的死亡率 完整代码地址: https://github.com/apachecn/AiLearning/blob/master/src/py2.x/ml/5.Logistic https://github.com/apachecn/AiLearning/blob/dev/blog/ml/5.Logistic%E5%9B%9E%E5%BD%92.md ----
前面学过了简单的回归和决策树,当然仅仅是使用起来简单。实际上,线性回归和决策树是很多其他算法的基础,很多高级的算法都是基于它们的组合或者变种。下面我们来看一个另外的东西,叫分类。 基于回归和决策树,我们能通过给定的数据来预测一些未知结果的数据,模型能给我们输出一个可供参考的结果值。但有些时候这些数据并不能满足我们的所有好奇心。 通过回归:我们能给出新的BMW M5车型该如何定价。我们可以通过既往该车的价格和销量以及成交率,得出一个模型,来计算出当M5车型在什么价位时,销量和利润率最均衡,进而使利润最高。 通过决策:我们可以通过决策来判断出一个新客户、或者老客户购买M5的可能性。通过已有数据的年龄、收入、家庭情况、房产状况等属性,来预测出一个潜在的客户购买M5的可能性有多大。 群集 1— 我们将这一组称为是 “M5 Lovers”,因为他们常常会径直走到 M5 车型区,对 3-系列的车型和 Z4 均视而不见。不过,他们也没有多高的购买率 — 只有 52 %。
树回归 概述 我们本章介绍 CART(Classification And Regression Trees, 分类回归树) 的树构建算法。该算法既可以用于分类还可以用于回归。 (3) 分析数据:绘出数据的二维可视化显示结果,以字典方式生成树。 (4) 训练算法:大部分时间都花费在叶节点树模型的构建上。 (5) 测试算法:使用测试数据上的R^2值来分析模型的效果。 4、树回归 项目案例 4.1、项目案例1: 树回归与标准回归的比较 4.1.1、项目概述 前面介绍了模型树、回归树和一般的回归方法,下面测试一下哪个模型最好。 使用算法:使用训练出的树做预测,预测结果还可以用来做很多事情 5、附加 Python 中 GUI 的使用 5.1、使用 Python 的 Tkinter 库创建 GUI 如果能让用户不需要任何指令就可以按照他们自己的方式来分析数据 %E6%A0%91%E5%9B%9E%E5%BD%92.md ----
本文使用的数据集来自 kaggle:M5 Forecasting — Accuracy。该数据集包含有 California、Texas、Wisconsin 三个州的产品类别、部门、仓储信息等。 (data['date'] > '2016-03-27') & (data['date'] <= '2016-04-24')] fig, ax = plt.subplots(figsize=(25,5) 这里使用的简单ARIMA模型不考虑季节性,是一个(5,1,3)模型。这意味着它使用5个滞后来预测当前值。移动窗口的大小等于 1,即滞后预测误差的数量等于1。使时间序列平稳所需的差分次数为 3。 在 SARIMAX 中引入外生回归因子(eXogenous regressors),可以实现对时间序列数据以外的数据的分析。 本例中,我们引入 sell_price 数据以辅助更好地预测。 特征数据3:月销售均值 特征数据4:每月销售最大值 特征数据5:每月销售最小值 特征数据6:每月销售最大值与最小值的差值 特征数据7:每周销售均值 特征数据8:每周销售最大值 特征数据9:每周销售中值
4、节点的数据量小于预先定好的阈值 回归树的Python实现 本部分使用Python实现简单的回归树,并对给定的数据进行回归并可视化回归曲线和树结构。 创建回归树并可视化 看到这种分段的数据,回归树拟合它可是最合适不过了,我们创建回归树: ? 通过Python字典表示的回归树结构: ? 生成回归树图片: ? ? 其中节点上数字代表:特征编号: 特征分割值 绘制回归树回归曲线 有了回归树,我们便可以绘制回归树回归曲线,看看它对于分段数据是否能有较好的回归效果: ? ? 左右两边的数据的分布基本相同但是使用相同的参数得到的回归树却完全不同左边的回归树只有两个分支,而右边的分支则有很多,甚至有时候会为所有的数据点得到一个分支,这样回归树将会非常的庞大, 如下是可视化得到的两个回归树 绘制线性回归和树回归的回归曲线(黄色会树回归曲线,红色会线性回归): 可见树回归方法在预测复杂数据的时候会比简单的线性模型更有效。 ?
线索化二叉树 先看一个问题,将数列{1,3,6,8,10,14}构成一颗二叉树。看到下图这个颗树能知道它是一颗完全二叉树。其中存在一个问题,它的一些指针是没有充分的利用。 解决方案是线索二叉树。 线索化二叉树概念 N个节点的二叉链表中含有N+1公式2n-(n-1)=n+1个空指针域。 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。 案例 将下面的二叉树,进行中序线索二叉树。 对前面的中序线索化的二叉树,进行遍历。
“回归”与“树” 在讲解树回归之前,我们看看回归和树巧妙结合的原因。 线性回归的弊端 线性回归需要拟合所有样本点,在特征多且特征关系复杂时,构建全局模型的想法就显得太难。 实际生活中,问题很大程度上不是线性的,而是非线性的,所以线性回归的很容易欠拟合。 传统决策树弊端与改进 决策树可以解决数据的非线性问题,而且直观易懂,是否可以通过决策树来实现回归任务? 回归树 基于CART算法,当叶节点是分类值,就会是分类算法;如果是常数值(也就是回归需要预测的值),就可以实现回归算法。这里的常数值的求解很简单,就是该划分数据的均值。 模型树 回归树的叶节点是常数值,而模型树的叶节点是一个回归方程。 数据情况 读入数据进行可视化,你会发现,这种数据如果用回归树拟合效果不好,如果切分为两段,每段是一个回归方程,就可以很好的对数据进行拟合。
[1240] “回归”与“树” 在讲解树回归之前,我们看看回归和树巧妙结合的原因。 线性回归的弊端 线性回归需要拟合所有样本点,在特征多且特征关系复杂时,构建全局模型的想法就显得太难。 实际生活中,问题很大程度上不是线性的,而是非线性的,所以线性回归的很容易欠拟合。 传统决策树弊端与改进 决策树可以解决数据的非线性问题,而且直观易懂,是否可以通过决策树来实现回归任务? 回归树 基于CART算法,当叶节点是分类值,就会是分类算法;如果是常数值(也就是回归需要预测的值),就可以实现回归算法。这里的常数值的求解很简单,就是该划分数据的均值。 [1240] 模型树 回归树的叶节点是常数值,而模型树的叶节点是一个回归方程。 数据情况 读入数据进行可视化,你会发现,这种数据如果用回归树拟合效果不好,如果切分为两段,每段是一个回归方程,就可以很好的对数据进行拟合。
可以看到这个回归树实际上也就是机器学习中的决策树,不过决策树的分类技巧稍微复杂点(和信息增益相关)。 代码实现 针对波士顿房价预测数据集。 self.left = None self.right = None self.feature = None self.split = None # 创建回归树类 = ">=" if op == 1 else "<" return ("Feature%d %s %.4f" % (feature, op, split)) # 获取规则,将回归树的所有规则都用文字表达出来 ,方便我们了解树的全貌。 控制分裂时最少的样本量min_samples_split # 3.叶子节点至少有两个不重复的y值 # 4.至少有一个特征是没有重复值的 def fit(self, X, y, max_depth=5,