决策树(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

相关文章

树(Tree)——《啊哈!算法》

树 什么是树?树是一种特殊的图,不包含回路的连通无向树。 正因为树有着“不包含回路”这个特点,所以树就被赋予了很多特性。 一棵树中的任意两个结点有且仅有唯一的一条路径连通。一棵树如果有n个结点,那么它一定恰好有n-1条边。在一棵树中加一条边将会构成一个回路。 一棵树有且只有一个根结点。 没有父结点的结点称为根结点(祖先)。没有子结点的结点称为叶结点。如果一个结点既不是根结点也不是叶

226 Invert Binary Tree

//226 Invert Binary Tree//算法思路:主要使用递归算法public class Solution {public TreeNode invertTree(TreeNode root) {//1 出口 空节点if (root==null)return null;//2 递归 调用自己TreeNode left = root.left;TreeNode right = ro

决策树的实现原理与matlab代码

很久不写博客了,感觉很长一段时间只是一味的看书,疏不知一味地看书、写代码会导致自己的思考以及总结能力变得衰弱。所以,我决定还是继续写博客。废话不多说了,今天想主要记录数据挖掘中的决策树。希望能够将自己的理解写得通俗易懂。 决策树是一种对实例分类的树形结构,树中包含叶子节点与内部节点。内部节点主要是数据中的某一特性,叶子节点是根据数据分析后的最后结果。 先看一组数据: 这组数据的特性包含

机器学习(西瓜书)第 4 章决策树

4.1 决策树基本流程 决策树模型 基本流程 在第⑵种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别;在第⑶种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别.注意这两种情形的处理实质不同:情形⑵是在利用当前结点的后验分布,而情形⑶则是把父结点的样本分布作为当前结点的先验分布. 基本算法 由算法4 .2可看出,决策树学习

【机器学习-监督学习】决策树

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈Python机器学习 ⌋ ⌋ ⌋ 机器学习是一门人工智能的分支学科,通过算法和模型让计算机从数据中学习,进行模型训练和优化,做出预测、分类和决策支持。Python成为机器学习的首选语言,依赖于强大的开源库如Scikit-learn、TensorFlow和PyTorch。本专栏介绍机器学习的相关算法以及基于Python的算法实现。

Sorry!Hbase的LSM Tree就是可以为所欲为!

我们先抛出一个问题: LSM树是HBase里使用的非常有创意的一种数据结构。在有代表性的关系型数据库如MySQL、SQL Server、Oracle中,数据存储与索引的基本结构就是我们耳熟能详的B树和B+树。而在一些主流的NoSQL数据库如HBase、Cassandra、LevelDB、RocksDB中,则是使用日志结构合并树(Log-structured Merge Tree,LSM Tr

【spring】does not have member field ‘com.sun.tools.javac.tree.JCTree qualid

spring-in-action-6-samples 的JDK版本 最小是11,我使用 了22: jdk21 jdk22 都与lombok 不兼容,必须使用兼容版本, 否则报错: thingsboard 的大神解释了: java: java.lang.NoSuchFieldError: Class com

Spark2.x 入门:决策树分类器

一、方法简介 ​ 决策树(decision tree)是一种基本的分类与回归方法,这里主要介绍用于分类的决策树。决策树模式呈树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶节点代表一种类别。学习时利用训练数据,根据损失函数最小化的原则建立决策树模型;预测时,对新的数据,利用决策树模型进行分类。 决策树学习通常包括3个步骤:特征选择、决策树的生成和决策树的剪枝。

[LeetCode] 863. All Nodes Distance K in Binary Tree

题:https://leetcode.com/problems/all-nodes-distance-k-in-binary-tree/ 题目大意 求给树中,距给定 结点 指定长度的 所有结点的val 思路 tree -> graph 、 bfs 先遍历树,并用map记录每个结点的父结点 ,将树变为图,然后 bfs。 /*** Definition for a binary tree

js实现树级递归,通过js生成tree树形菜单(递归算法)

1、效果图 需求:首先这是一个数据集—js的类型,我们需要把生成一个tree形式的对象 : var data = [{ id: 1, name: "办公管理", pid: 0 },{ id: 2, name: "请假申请", pid: 1 },{ id: 3, name: "出差申请", pid: 1 },{ id: 4, name: "请假记录", pid: 2 },{ id: