用树来对数据建模,除了把叶节点简单地设为常数值外,还可以把叶节点设为分段线性函数。后者就可以称之为模型树。如下图中的数据集,如用回归树拟合,势必使树的结构非常复杂。如若用模型树拟合,则两个分支足矣。 模型树的大部分代码都和回归树相同,仅仅将叶节点从常数标量改为权重系数行向量。所以相应的多了 用最小二乘法求回归系数的过程,以及其它的一些必要修改。 matRight = dataSet[nonzero(dataSet[:,feature] >= value)[0],:] return matLeft, matRight 求回归系数和误差: #模型树 errType, ops) retTree['right'] = createTree(rSet, leafType, errType, ops) return retTree 求解出了模型树 下面利用训练好的模型树进行预测: def modelTreeEval(model, inDat): n = shape(inDat)[1] X = mat(ones((1,n+1)))
二叉树-删除指定节点 以上一篇为基础来看看树中的删除。 问题 (1)如果删除的节点是叶子节点,则删除该节点。 (2)如果删除的节点是非叶子节点,则删除该子树。 (3)测试,删除5号叶子节点和3号子树。 分析 首先先处理,如果树是空树,如果只有一个节点,则等价于将二叉树置空。 1.因为我们的二叉树是单向的,所以我们是判断当前节点的子节点是否需要删除节点,而不能去判断当前这个结点是不是需要删除节点。 = null; 并且就返回(结束递归删除) 4.如果第2步和第3步都没有删除掉节点,那么就需要向左子树递归删除。 = node3; node3.Left = node5; node3.Right = node4; tree.SetRoot(root
3大树模型实战乳腺癌分类预测 本文从特征的探索分析出发,经过特征工程和样本均衡性处理,使用决策树、随机森林、梯度提升树对一份女性乳腺癌的数据集进行分析和预测建模。 dtype: int64 In [34]: groupby_df = df.groupby('Class').count() # 输出原始数据集样本分类分布 groupby_df # 建立SMOTE模型对象 test_size=0.20, random_state=123) 决策树 plt.axis('tight') plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.show() 梯度提升树 plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.show() 总结 从数据预处理和特征工程出发,建立不同的树模型表现来看
模型具有可读性 分类速度快 决策树的思想主要来源于Quinlan在1986年提出的ID3和1993提出的C4.5算法,以及由Breiman等人1984年提出的CART算法。 模型 决策树学习本质上是从训练数据集中归纳出一组分类规则或者条件概率模型(在节点处取条件概率最大的进行分类)。决策树问题一般可以分成特征选择、决策树生成、剪枝三部分。 ID3和C4.5 特征选择 信息熵 图片 信息增益 图片 使用属性Ai对样本S进行划分后,与划分前相比,样本变得有序了,即信息熵下降了。与划分前相比,信息熵下降的数量称为信息增益。 一种比较简单的决策树学习损失函数定义方法是: 这种情况下的损失函数极小化等价于正则化的极大似然估计,所以也相当于利用正则化的极大似然估计进行模型选择。 特征选择 回归树 图片 切分变量splitting variable(特征值)的选择 切分点splitting point(阈值)的选取 每一个划分单元输出值(cmc_mcm)的确定 分类树 与ID3
选自towardsdatascience 作者:Andre Ye 机器之心编译 编辑:陈萍 树模型和神经网络,像一枚硬币的两面。在某些情况下,树模型的性能甚至优于神经网络。 ? 包含太多组件的模型(对于树模型而言是节点,对于神经网络则是神经元)会过拟合,而组件太少的模型根本无法给出有意义的预测。(二者最开始都是记忆数据点,而不是学习泛化。) 信息在两个模型中的流动相似,只是在树模型中的流动方式更简单。 树模型的 1 和 0 选择 VS 神经网络的概率选择 当然,这是一个抽象的结论,甚至可能是有争议的。诚然,建立这种联系有许多障碍。 神经网络并非显式地对 x>3 这样的条件给出真 / 假的预测,而是将输入放大到一个很高的值,从而得到 sigmoid 值 1 或生成连续表达式。 使用确定性模型可以更好地对结构化(表格)数据进行建模。 不要低估树方法的威力。
learning in action.Peter Harrington [2]Linear Algebra and Its Applications_4ed.Gilbert_Strang 回归树和模型树 前一节的回归是一种全局回归模型,它设定了一个模型,不管是线性还是非线性的模型,然后拟合数据得到参数,现实中会有些数据很复杂,肉眼几乎看不出符合那种模型,因此构建全局的模型就有点不合适。 先来看看分类回归树吧(CART:Classification And Regression Trees),这个模型优点就是上面所说,可以对复杂和非线性的数据进行建模,缺点是得到的结果不容易理解。 ,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小。 如果把叶子节点换成分段线性函数,那么就变成了模型树,如(图六)所示: ? (图六) (图六)中明显是两个直线组成,以X坐标(0.0-0.3)和(0.3-1.0)分成的两个线段。
概念 定义在特征空间与类空间上的条件概率分布,即给定特征条件下类的条件概率分布;也可以认为是if-then规则的集合 优点 模型具有可读性,分类速度快。 模型 首先,介绍一下决策树模型: 由结点和有向边组成,结点又可分为内部结点和叶结点。内部结点表示一个特征或属性,叶结点表示一个类。 决策树本质 从训练数据集中归纳出一组分类规则。 步骤 决策树的学习常包含三个步骤: 特征选择 决策树的生成 决策树的剪枝 特征选择 是决定用哪个特征来划分特征空间。 几种选择标准的不同(ID3, C4.5, CART)可参考:决策树 决策树的剪枝 通过极小化决策树整体的损失函数或代价函数来实现。 两者的不同: 决策树的生成只考虑了通过提高信息增益或信息增益比对数据进行更好的拟合,而剪枝通过优化损失函数还减小了模型的复杂度。 决策树生成学习局部的模型,而决策树剪枝学习整体的模型。
assert(false); } break; } else//其他情况就是之前就出问题了,出现了3或者是 -3 { assert(false);//通过 assert(false) 强制中断,可以避免程序运行出错结果。 } } private:Node* _root = nullptr;};void test(){ AVLTree<int, int>t; //int a[] = { 16, 3, 7, 11, 9, 26, 18, 14, 15 }; int a[] = { 4,2,6,1,3,5,15,7,16,14 }; for (auto e : a) { 这里a/b/c是高度为h的子树,是一种概括抽象表示,他代表了所有右单旋的场景,实际右单旋形态有很多种,具体图2/图3/图4/图5进行了详细描述。
第一次接触红黑树是在关于hashMap,上来就扔五个特性,说满足这五个特点的二分搜索树就是红黑树。 (1)每个节点或者是黑色,或者是红色。 (2)根节点是黑色。 (3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] (4)如果一个节点是红色的,则它的子节点必须是黑色的。 瞬时懵逼……我扔十个特性,是不是能定义一个红绿灯树呢。所以一直不明白红黑树为什么要这么定义。 直到今天了解了2-3树,才豁然开朗。2-3树是一种神奇的树,它能够保证该树是一个完美树。 2-3树可以演化成红黑树,这便是保证红黑树效率的根本。 先说奇葩的2-3树,首先2-3树满足二分搜索树,但每个节点可能存在1或2个数据,对应的该节点就可能存在2或3个子节点 2-3树 ? 2-3树引入.png 2-3树插入操作: ? 2-3树.png 2-3树演化为红黑树 将三节点拆为两个节点,并将左数据节点设为红色来实现2-3树同等功能 ? 红黑树.png
决策树模型概述 ---- 1.1 决策树模型 决策树模型 是一个模拟人类决策过程思想的模型,以找对象为例,一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话: 女儿:多大年纪了? (即内部节点所对应的属性) 预测过程:将测试示例从根节点开始,沿着划分属性所构成的判定测试序列下行,直到叶结点 1.2 决策树简史 第一个决策树算法:CLS(Concept Learning System ) 使决策树受到关注了,成为机器学习主流技术的算法:ID3 最常用的决策树算法:C4.5 ? L.Breiman 要点总结 决策树模型 基于树的结构进行决策 属性,测试预测结果 训练过程 分析训练样本,确定划分属性 预测过程 沿着树结构根据属性进行下行判断 决策树简史 CLS J.R.Quinlan 1979 ID3 J.R.Quinlan 1993 C4.5 L.Breiman 1984 CART L.Breiman 2001 RandomForest
: 特征选择:选取有较强分类能力的特征 决策树生成 决策树剪枝 ID3 决策树 ID3 树是基于信息增益构建的决策树,算法的核心在于使用信息增益作为属性选择的标准,即在每个节点选择尚未被用来划分的 C4.5 决策树 C4.5决策树算法是ID3算法的改进版本,它使用信息增益率来选择划分特征。 对于连续型属性,算法会进行离散化处理,将其转换为可以用于决策树的离散值。 剪枝操作:在构造决策树之后,C4.5算法会进行剪枝操作,以减少模型的过拟合风险,提高模型的泛化能力。 它与之前的ID3和C4.5算法不同,CART能够处理连续型数据的分类以及回归任务。CART生成的是二叉树,这意味着在每个非叶节点上只会有两个分支。这样的结构有助于简化模型,提高解释性。 训练方法:使用fit方法来训练决策树模型,传入训练数据和对应的标签。
y3], ... ] that uniquely defines a skyline. 5 should be merged into one in the final output as such: [...[2 3], [4 5], [12 7], ...] image.png 上述粉色矩形框内的,该矩形由左上角 (row1, col1) = (2, 1) 和右下角 (row2, col2) = (4, 3) 确定。 示例: 给定 matrix = [ [3, 0, 1, 4, 2], [5, 6, 3, 2, 1], [1, 2, 0, 1, 5], [4, 1, 0, 1, 7], [1, 0 , 3, 0, 5] ] sumRegion(2, 1, 4, 3) -> 8 update(3, 2, 2) sumRegion(2, 1, 4, 3) -> 10 注意: 矩阵 matrix 的值只能通过
无外乎就是面对那些七大姑、八大姨的催结婚、催生子、催相亲、催买房……说起这些亲戚们是如何判断催什么,不得不让我们想起经典的决策树模型。决策树是一个用于分类和回归的机器学习模型。 通过对输入对象数据特征进行一系列条件划分构建一个树状结构的决策模型。每个内部节点表示一个特征或属性,每个分支代表该特征的一个可能取值,而每个叶节点代表一个类别标签或数值输出。 为了减少过拟合,可以采用剪枝操作,即通过降低模型复杂度来提高泛化能力。常见的剪枝方法有预剪枝和后剪枝。 预剪枝在构建过程中进行模型评估,若划分不再有效则停止划分;后剪枝则先构建完整的决策树,然后通过剪去子树并比较泛化能力来判断是否进行剪枝操作。 决策树模型经典的算法一般认为包含:ID3算法、C4.5算法、CART算法。ID3算法:核心是在决策树各个节点上应用信息增益准则选择特征,递归地构建决策树。
树模型与集成学习 树模型是非常好的基学习器(弱学习器)。 如何结合多颗树完成模型构建呢? 在竞赛的过程中,我们一般情况下是不会去使用随机森林,我们现在会直接使用比较高阶的一些树模型,比如 XGBoost,LightGBM 或 CatBoost。 在使用树模型的时候,我们的类别特征需不需要做 onehot 呢? 我们在进行节点分裂的过程中,会设置树模型的最大深度,这是我们在一些机器学习模型里面需要设置的超参数。 LightGBM 在分裂的过程中,不是逐层进行具体的划分的,它是在进行节点分裂的过程中,选择分裂增益最大的叶子节点,然后再进行分裂,而且它限制了具体的树模型的深度,这样能够避免模型的过拟合。
---- 2-3-4树 定义 2-3-4树是四阶的 B树(Balance Tree),它的结构有以下限制: 所有叶子节点都拥有相同的深度。 节点只能是 2-节点、3-节点、4-节点之一。 对应红黑树 至于为什么说红黑树是 2-3-4树的一种等同呢,这是因为 2-3-4树的每一个结点都对应红黑树的一种结构,所以每一棵 2-3-4树也都对应一棵红黑树,下图是 2-3-4树不同结点与红黑树子树的对应 而上文中的 2-3-4树也可以转换成一棵红黑树: ? 由红黑树的性质5,和 2-3-4树的性质1,为了便于理解红黑树和 2-3-4树的对应关系,我们可以把红黑树从根结点到叶子结点的黑色结点个数定义为高度。 下面来对照着 2-3-4树说一下红黑树结点的添加和删除: ---- 结点插入 2-3-4树中结点添加需要遵守以下规则: 插入都是向最下面一层插入; 升元:将插入结点由 2-结点升级成 3-结点,或由 3
DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <title>圣诞树</title> <meta name="viewport </div> <div class="leaves-middle ts-3d">
在解决分类问题的决策树中,叶子节点就表示所有的分类,比如这里的分类就有3种:无聊时阅读的邮件、需及时处理的邮件、无需阅读的邮件。 换句话说就是,我们如何知道这颗决策树的各个节点选取什么特征来划分数据才最合适呢?ok,你可能听过一些算法的名字,比如ID3、C4.5、CART等,它们其实就是用来解决这个问题的。 ID3决策树使用信息熵度量数据子集的纯度,信息熵越大,数据越混乱,纯度越低。 然而,ID3还是有缺陷的,比如会偏向选择特征值比较多的特征来划分数据子集,然而如果训练数据中符合这个特征值的数据只出现过很少,甚至是一次,那么将导致构建出的决策树对这个特征的偏见。 另外,ID3无法处理含有连续型数值的特征以及处理回归问题,这类场景下,决策树需要另一种算法——CART,下一篇文章会具体介绍。 ok,本篇就这么多内容啦~,感谢阅读O(∩_∩)O。
前言 前面的文章我们已经学习了二叉搜索树和平衡二叉搜索树AVL树,今天我们再来了解一种新的平衡树2–3树,2–3树由约翰·霍普克洛夫特于1970年发明,在计算机科学中,2–3树是一种树型数据结构,内部节点 前面的文章提到过的二叉树,每个节点的孩子个数最多的是2个,并且每个节点只有一个值,而2-3树的节点的孩子个数只能是2个或者3个,这是一种多路树的结构,类似的结构还有2-3-4树,B+树等,多路树的存在除了支持树的平衡外 2-3树 VS 二叉搜索树 同样的一组数据,在2-3树和二叉搜索树里面的对比如下: ? 关于2-3-4树 2-3-4树与2-3树类似,只不过当父节点的值是3的时候,节点的孩子个数可以有4个,如下: ? 总结 本篇文章,主要介绍了2-3树相关的知识,2-3树,2-3-4树以及B树都不是二叉树,但与二叉树的大致特点是类似的,它们是一种平衡的多路查找树,节点的孩子个数可以允许多于2个,虽然高度降低了,但编码相对复杂
学习过2-3树之后就知道应怎样去理解红黑树了,如果直接看「算法导论」里的红黑树的性质,是看不出所以然。 此时我们借着2-3树去理解基本的红黑树,当然我会在后几篇文章介绍2-3-4树以及基于2-3-4树的红黑树。 抛开上面二分搜索树满足红黑的性质,我们知道2-3树不是二叉树,我们把它转换成一颗二叉树,2-节点很好转,3-节点转二叉却有两种,如下图: ? 红黑是指被指向节点的链接颜色,对于一颗2-3树,因为3-节点的存在有很多不同的二叉树的表示,所以我们只考虑左倾的情况。 因为2-3树不存在永久的4-节点,4-节点终归要分解的(在2-3-4树中,为了更好地插入和删除,4-节点可存在于叶子节点和非叶子节点)2-3树一样不行,所以在2-3树中没有任何一个节点能同时和两条红链接相连
决策树模型 II . 决策树模型 示例 III . 决策树算法列举 IV . 决策树算法 示例 V . 决策树算法性能要求 VI . 决策树模型创建 ( 递归创建决策树 ) VII . 决策树模型过程 : ① 训练过程 : 使用训练集数据确定决策时使用的属性 , 确定根节点 , 内部节点 , 叶子节点 的属性划分 , 训练决策树模型 ; ② 预测过程 : 从根节点特征开始 , 根据决策树中的判定序列依次从根节点向下判定 决策树模型 示例 ---- 1 . 决策树模型创建 ( 递归创建决策树 ) ---- 1 . 决策树创建算法 ( 递归 ) : 使用递归算法 , 递归算法分为递归操作 和 递归停止条件 ; 3 .