机器学习:决策树

决策树是一种层次分支结果,学习策略是分而治之。

树模型

在这里插入图片描述
树模型是有监督学习类算法中应用广泛的分类模型,同时可应分于分类问题和回归分类问题的树模型常被称为分类树,用于解决回归类问题的树模型被称作回归树,模型本身课解释性非常强。
分类决策树模型表示一种基于特征对实例进行分类的树形结构(包括二叉树和多叉树)。
决策树由结点(node)和有向边(directed edge)组成,树中包含三种结点:

  • 根结点(root node):包含样本全集。没有入边,但有零条或多条出边;
  • 内部结点(internal node):对应于属性测试条件,恰有一条入边,和两条或多条出边;
  • 叶结点(leaf node)或终结点(terminalnode):对应于决策结果,恰有一条入边,但没有出边。
  • 在这里插入图片描述

学习算法

决策树的学习算法是贪心算法,决策树的模型本身结构,根节点出发,对特征进行学习,最后叶节点只包含一个分类,不允许叶节点出现其他多个分类。

决策树学习算法包含特征选择、决策树的生成与决策树的剪枝。

特征选择:

决策树学习的关键在如何选择最优划分属性。一般而言,随着划分过程不断进行,我们希望决策树的分类结点所包含的样本尽可能属于同一类别, 即结点的 "纯度"(purity)越来越高。在分类树中,划分的优劣用不纯度度量(impurity-measure)定量分析。

1.熵
在这里插入图片描述
2.基尼
在这里插入图片描述
3误分类误差
在这里插入图片描述
这些都可以推K>2到 类,并且给定损失函数,误分类误差可以推广到最小风险。
下图显示了二元分类问题不纯性度量值得比较, p表示属于其中1个类的记录所占的⽐例。从图中可以看出,三种方法都在类分布均衡时(即当 p=0.5时)达到最大值,当所有记录都属于同一个类时(p等于1或0)达到最小值。
在这里插入图片描述
以熵为例,python代码如下:
在这里插入图片描述
熵用来计算当前数据集的不纯度,熵越高,信息的不纯度就越高,则混合的数据就越多。
信息增益(用于计算叶节点的选取)
我们可以知道决策树最终的优化目标使得叶结点的总不纯度最低,即对应衡量不纯度的指标最低。换而言之,就是要求父节点信息熵和子节点总信息熵之差要最大。
公式为:
在这里插入图片描述
父节点和子节点的不纯度下降数可由下述公式进行计算:
在这里插入图片描述
划分数据集:
划分数据集的最佳准则是选择最大信息增益,也就是信息下降最快的方向。
python代码实现如下:
在这里插入图片描述
根据列切分数据集
通过最佳切分函数返回最佳切分列的索引,我们就可以根据这个索引,构建一个按照给定列切分数据集的函数。python代码如下:
在这里插入图片描述

决策树的生成:

目前我们已经学习了从数据集构造决策树算法所需要的功能模块,其工作原理如下:得到原始数据集,然后基于最好的属性值划分数据集,由于特征值可能多余两个,因此可能存在大于两个分类的数据集划分。第一次划分之后,数据集被向下传递到树的分支的下一个结点。在这个结点上,我们可以再次划分数据,因此我们可以采用递归的原则处理数据集。
递归结束的条件是:

  • 程序遍历完所有划分数据集的属性
  • 每个分支下的所有实例都具有相同的分类
  • 当前结点包含的样本集合为空,不能划分
    在第2种情形下,我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别,任何到达叶结点的数据必然属于叶结点的分类;在第3种情形下,同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别。
    ID3算法建立决策树
    核心是以信息增益准则作为特征选择,递归的构建决策树,具体方法是:
  • 从根结点开始,对结点计算所有可能的特征的信息增益
  • 选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点
  • 再对⼦结点调子以上方法,构建决策树
  • 直到所有特征的信息增益均很小或没有特征可以选择为止,最后得到一个决策树
    python代码如下:在这里插入图片描述

决策树的剪枝
所谓剪枝是指在决策树中去除部分叶结点,决策树是天生过拟合的算法模型,剪枝是为了防止过拟合。
常见的剪枝策略有 ”预剪枝“(Pre-Pruning)和 ”后见枝“(PostPruning)

  • 预剪枝:在决策树生成的过程中,对每个结点在划分前先进⾏估计,如果当前的结点划分不能带来决策树泛化性能(预测性能)的提升,则停止划分并且将当前结点标记为叶结点。
  • 后剪枝:先训练生成一颗完整的树,自底向上对非叶结点进行考察,如果将该结点对应的子树替换 为叶结点能带来决策树泛化能力的提升,则将该子树替换为叶结点。
  • 在这里插入图片描述
    决策树在sklearn中的实现:https://nbviewer.jupyter.org/github/xiaotaiyang08/123/blob/master/决策树在SKlearn中的实现.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值