决策树(decision tree)吧啦吧啦

2024-02-16 23:10
文章标签 决策树 tree decision

本文主要是介绍决策树(decision tree)吧啦吧啦,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#小魔仙

​#参考:美Brett Lantz的《机器学习与R语言》,周志华老师的《机器学习》

#仅供个人学习用

#比较长和啰嗦,提醒自己:最好使用电脑看,手机看长篇大论总是不太合适

​ 

这两天学R与机器学习,真心赶脚R太简单化了,转到吴恩达老师的课时,又觉得脑子转不过来,基础没打好。关于决策树,首先是

决策树理论和流程:

决策树是一个树形结构的模型,使用地规划分的探索法,因为它利用特征的值将数据分解成具有相似类的较小的子集,因此通常被称为分而治之。

决策树就是对样本的特征进行一个一个的问题提问,通俗的联想理解,类似编程里的判断语句,如果怎样,就怎样,否则怎样,还有多层嵌套条件,比如Excel中,判断一个数的所在区间:IF(x<10,”[1,10]”,ELSEIF(x<50,”[11,50]”,”[5,100]”)),大概这样,想银行算利率时用的思路。比如这个好瓜判断树:

图源周的《机器学习》p73

决策树的结点:

一个根结点:包含了样本全集,就是一个步,所有的待分类数据;

若干个决策结点:是带有根据某一属性作出决定的部分,就是根结点到某一叶结点中间的分类条件;决策结点后面可能是叶结点也可能决策结点。

若干个叶结点:就是分类结果,树的每一个决策结点都最后会落到叶结点上,代表树的结束。

选择?

我们已经知道,决策树总是需要从某一个决策结点开始,再进行第一次决策后再考虑第二次,这样递进,因此如何选择首发决策特征就很重要了。

这里首先引出了一个概念:。熵是用来表示样本纯度的,取值范围0到1。其中0表示样本完全同质,就是所有案例都属于同一类,没有分类的价值。1是样本凌乱的最大数量,一般只有无线趋近于1而不会等于1,等于1大概就是每个样本都是一个单独的类,这样就是明显的过拟合问题。

熵的计算公式:

其中,对于给定样本集D,|y|表示类的水平数/长度(类似向量的模),就是类的个数,pk表示­­­D中第k类样本所占的比例。比如对于二分类的信息熵,设概率为x与(1-x),如图:

可以看出,当x=0.5时,一个五五分的样本集的信息熵最大,即这样的样本集最凌乱。如果不好理解这个“凌乱”,结合想下0.8:比0.2的情况,0.8已经将包含了绝大部分样本,因此趋于相同,表示不凌乱。

然而对于样本集的描述仍然不能直接用于决定特征选择,因为信息熵表现的是初始样本集的情况,告诉我们这个样本是否值得用于分类,我们还需要知道的是,在进行一个决策判定后,分类的结果能否提供最大的信息熵,即分类的结果是否值得下一次判定分类,因此引出

信息增益:即由每一个可能特征的分割所引起的同质性(均匀性)变化。通纯度/信息熵情况。对于某一特征a,信息增益的计算方法是分割前的数据分区D的熵减去分割后产生的数据分区S的熵。

Gain(D,a)=Ent(D)-Ent(S)

对于分割后产生的分区的熵计算,设特征F有V个取值,Dv表示D落在特征v里面的样本,计算每个Dv熵,然后对每个熵赋权重在相加。这个权重一般用|Dv|/|D|代替,即样本数量越多的分支结点影响越大。

一般而言,信息增益越高,根据某一特征分割后创建的分组就越均衡,如果信息增益为0,表示分割后的熵和原本数据的熵相等,即根据该特征进行分割后的熵值不会减少,也就是说明没有分割的意义。而最大信息增益表明,分割后的数据分区熵值足够小,,表明都是属于同一类的,即是最好的分类结果。因为我们是希望分割后的数据是合理的分类结果,所以希望分割后的信息熵足够小,即信息增益足够大。

信息增益的改进:增益率:

从上面其实可以看出,信息增益准则对可取值数目较多的属性有偏好,但这偏好有时会有不利影响,为了降低不利影响,提出了增益率(gain ratio):

看了应该就能明白这是在干啥,信息增益是依据数量进行赋予权重,然后增益率也是依据数量赋予权重,不过一个是凸显重要类别,一个是降低类别重要性。

解释下,首先得知道对数函数的曲线图,单调增函数,加上负号后变成单调减函数,因此对于更大的|Dv|/|D|,log2(|Dv|/|D|)也会更小。所以平衡了之前的信息增益带来的偏好。

另外除了信息增益标准,还有使用基尼指数来选择的,给出公式,不多说,自行查阅。

图源周《机器学习》

选择情况大致这样了,废了我好多脑细胞。

 

选择说完了,接下来是剪枝:

剪枝处理是为了应对决策树过拟合的情况,过拟合指的是决策树在通过无限次(说明需要,实际情况肯定是有限的)增长和分割后,结果过于具体,一直分割到算法中再也没有可用于分割的特征为止。就是训练样本学得“太好了”,导致分类太具体。

这样说,决策树在训练样本时表现出了很好的结果分类,但在除开样本外的数据集,如测试集,他的表现比较差。说明当前的决策树过于“茂盛”,只适合用于当前的训练数据集。或者说该决策树把训练数据集的数据的一些独有的特征用到了算法之中。应该能理解了。

这时候再来看过拟合的定义:给定一个假设H,如果在假设空间上存在另一个假设H',使得在训练集上H的错误率差比H'小,而在测试集上H的错误率却比H'要大,那么称假设H过度拟合训练数据。

剪枝分为预剪枝后剪枝就不详细说明了,要写吐了,也怕看的人要吐了。

预剪枝就是一旦决策树达到一定数量的决策,或者决策结点仅含少量的案例,就停止树的生长,又叫提前停止法。

后剪枝是让训练集生成一棵完整的树,然后根据结点的错误率修剪决策树。

概览到这里结束,接下来是R语言的实现(写累到了)。。。

心好累,主要是暂时还没能把这些知识用简单有趣的方式表现出来,不过我觉得这样对于学习才是更好的,阅读不要只是碎片化时间与碎片化学习,总得有精钻深的东西。

转载于:https://www.cnblogs.com/rhongp/p/6383813.html

这篇关于决策树(decision tree)吧啦吧啦的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/715968

相关文章

玩转Web之easyui(二)-----easy ui 异步加载生成树节点(Tree),点击树生成tab(选项卡)

关于easy ui 异步加载生成树及点击树生成选项卡,这里直接给出代码,重点部分代码中均有注释 前台: $('#tree').tree({ url: '../servlet/School_Tree?id=-1', //向后台传送id,获取根节点lines:true,onBeforeExpand:function(node,param){ $('#tree').tree('options'

【C++PCL】点云处理Kd-tree原理

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 重点:每个模块都有参数如何调试的讲解,即调试某个参数对结果的影响是什么,大家有问题可以评论哈,如果文章有错误的地方,欢迎来指出错误的地方。 目录         1.原理介绍 1.原理介绍         kd-tree是散乱点云的一种储存结构,它是一种

Udacity机器学习入门笔记——决策树

监督学习算法第三种——决策树decision trees     决策树可以通过核技巧把简单的线性决策面转换为非线性决策面     百度百科:决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值     通过坐标数据进行多次分割,找出分界线,绘制决

[leetcode] 107. Binary Tree Level Order Traversal II

Binary Tree Level Order Traversal II 描述 Given a binary tree, return the bottom-up level order traversal of its nodes’ values. (ie, from left to right, level by level from leaf to root). For example

[leetcode] 102. Binary Tree Level Order Traversal

Binary Tree Level Order Traversal 描述 Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level). For example: Given binary tree [3,9,20

[leetcode] 515. Find Largest Value in Each Tree Row

Find Largest Value in Each Tree Row 描述 You need to find the largest value in each row of a binary tree. Example: Input: 1/ \3 2/ \ \ 5 3 9 Output: [1, 3, 9] 我的代码 简单的dfs。 要使

[leetcode] 257. Binary Tree Paths

* Binary Tree Paths* 描述 Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 / \ 2 3 \ 5 All root-to-leaf paths are: [“1->2->5”, “1->3”] 我的代码

论文《Tree Decomposed Graph Neural Network》笔记

【TDGNN】本文提出了一种树分解方法来解决不同层邻域之间的特征平滑问题,增加了网络层配置的灵活性。通过图扩散过程表征了多跳依赖性(multi-hop dependency),构建了TDGNN模型,该模型可以灵活地结合大感受场的信息,并利用多跳依赖性进行信息聚合。 本文发表在2021年CIKM会议上,作者学校:Vanderbilt University,引用量:59。 CIKM会议简介:全称C

对红酒数据集,分别采用决策树算法和随机森林算法进行分类。

1.导入所需要的包 from sklearn.tree import DecisionTreeClassifierfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.datasets import load_winefrom sklearn.model_selection import train_test_spl

515. Find Largest Value in Each Tree Row 在每个树行中找最大值

https://leetcode-cn.com/problems/find-largest-value-in-each-tree-row/description/ 思路: 和637. Average of Levels in Binary Tree(https://www.jianshu.com/p/814d871c5f6d)的思路基本相同.即层遍历二叉树,然后在每层中分别找最大的. vec