专栏首页机器学习与统计学关于决策树,你一定要知道的知识点!

关于决策树,你一定要知道的知识点!

在现实生活中,我们每天都会面对各种抉择,例如根据商品的特征和价格决定是否购买。

不同于逻辑回归把所有因素加权求和然后通过Sigmoid函数转换成概率进行决策,我们会依次判断各个特征是否满足预设条件,得到最终的决策结果。例如,在购物时,我们会依次判断价格、品牌、口碑等是否满足要求,从而决定是否购买。

决策的流程,如图1所示。

图1

可以看到,决策过程组成了一棵树,这棵树就称为决策树

在决策树中,非叶子节点选择一个特征进行决策,这个特征称为决策点,叶子节点则表示最终的决策结果。

在上例中,我们只是根据经验主观建立了一棵决策树,这棵决策树在数据量和特征维度较小且逻辑简单时是可以使用的。

然而,在数据量和特征维度较大时,仅凭主观观察建立决策树显然是不可行的。在实际应用中,训练集中的样本往往有上万个,样本的特征通常有上百维,该怎么处理呢?

在实际建立决策树的过程中,每次选择特征都有一套科学的方法。下面就详细讲解如何科学地建立决策树。

不难发现,建立决策树的关键在于选取决策点时使用的判断条件是否合理。每个决策点都要有区分类别的能力。例如,在电商场景中,将发货的快递公司作为决策点的选取条件就是一个很差的选择,其原因在于快递公司和购买行为没有必然联系,而将商品价格作为决策点的选取条件就是合理的,毕竟大部分消费者对商品价格比较敏感。

一个好的决策点可以把所有数据(例如商品)分为两部分(左子树和右子树),各部分数据所对应的类别应尽可能相同(例如购买或不购买),即两棵子树中的数据类别应尽可能“纯”(这种决策点有较高的区分度)。

和逻辑回归类似,用已知数据(例如用户的购买记录、商品信息)求解决策树的形状和每个决策点使用的划分条件,就是决策树的训练过程

图2

决策树有一些常用的构建方法,在这里我们详细讲解一下最为流行的CART树

CART树是一棵二叉树,它不仅能完成分类任务,还能完成数值预测类的回归任务。

图3

在第1步中,判断样本数量和基尼系数是为了控制生成的决策树的深度,避免不停地递归。不停地递归会导致划分条件过细,从而造成过拟合。

决策树建立后,每个叶子节点里都有一堆数据。可以将这堆数据的类别比例作为叶子节点的输出。

决策树在复杂度上和其他模型有所不同。例如,在逻辑回归中,当特征维度不变时,模型的复杂度就确定了。但是,在决策树中,模型会根据训练数据不断分裂,决策树越深,模型就越复杂。

可以看出,数据决定了决策树的复杂度,且当数据本身线性不可分时,决策树会非常深,模型会非常复杂。

所以,在决策树中,需要设置终止条件,以防模型被数据带到极端复杂的情况中。在决策树中,终止条件的严格程度相当于逻辑回归中正则项的强度。

训练完成后,我们可以得到一棵决策树,如图4所示。

图4

决策树理解起来比较简单,其本质就是以基尼系数来量化划分条件的分类效果,自动探寻最佳划分条件。

下面我们把决策树和逻辑回归进行对比。为了方便对比,假设决策树的特征为2维且均为连续特征。决策树的分类效果图可以理解为如图5所示的形式。

图5

可见,决策树分类的几何意义和逻辑回归一样,都是在平面上画直线。相比逻辑回归的分类线是一条直线,决策树的分类线是平面上与坐标轴平行的多条直线(一个判断条件对应于一条直线,这些直线共同组成了分类线)。多条直线可以组合成非线性的形式,以处理线性不可分的情况,如图6所示。

图6

虽然决策树在训练时需要遍历所有可能的类别划分方法,速度比较慢,但是在预测阶段,决策树只需进行一些逻辑判断和比较,速度非常快,故适合在对时间要求较高的场景中使用。

决策树不仅可以用在分类中,还可以用在回归中(预测连续的值而非类别概率)。用在分类中的决策树称为分类树,用在回归的中决策树称为回归树。在回归任务中,学习目标不再是分类,而是一个连续值 。此时,基尼系数不再适用于衡量数据的混乱程度,一般使用方差来衡量数据的混乱程度。

本文摘自《速通机器学习》一书!

本文分享自微信公众号 - 机器学习与统计学(tjxj666)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 关于决策树、这些你需要知道

    决策树是十大机器学习算法之一,可用于分类和回归问题。最初的决策树包括ID3和C4.5,后来慢慢发展到随机森林和作为梯度提升算法的基学习器模型,例如GBM算法和X...

    深度学习与Python
  • 关于Powershell 你要知道的知识!

    在最初的时候,Powershell 是设计运行在windows机器上实现系统和应用程序管理自动化的命令行 脚本环境。Windows Powershell V1诞...

    Ms08067安全实验室
  • 你所需要知道的关于AutoML和NAS的知识点

    【GiantPandaCV导读】本文是笔者第一次进行翻译国外博客,第一次尝试,由于水平的限制,可能有的地方翻译表达的不够准确,在翻译过程中尽量还原作者的意思,如...

    BBuf
  • 关于Android的Service知识点,你知道吗?

    在Android中Service是一个在后台执行长时间运行操作,而不需要和用户交互的应用程序组件。主要是用来后台处理网络事务,播放音乐,执行文件操作和conte...

    达达前端
  • 关于 CheckBox 你或许不知道的一些知识点

    重点是 android:button=”@null” 和 android:drawableRight=”?android:attr/listChoiceInd...

    夏洛克的猫
  • 关于 ThreadLocal 你需要知道的几点

    线程中使用ThreadLocal类型变量,在线程声明周期结束前调用ThreadLocal::remove()方法,清除对应本线程的变量内存占用,避免内存泄漏。

    WindWant
  • 关于『捷径』的这两点,90%的人都不知道,但是你一定要知道!!!

    IOS 12.0.1的通道已经关闭,已经升级的小伙伴就别想再降级了,伴随着iOS12比例的不断上升,曾经的workflow现如今的捷径,在手机中也有越来越重要。

    课代表
  • 你一定要知道,关于https的五大误区

    如今,https协议正在被广泛重视和使用。随着今年2月初,谷歌旗下Chrome浏览器宣布将所有http标示为不安全网站,许多网站都争相从http升级到了http...

    好好学java
  • 关于配置,你必须要知道这一点....

    今天这篇文章,给大家分享一下最近看kafka中的动态配置,不需要重启Broker,即时生效的配置 欢迎留言一起探讨!

    石臻臻的杂货铺[同名公众号]
  • 关于css margin,你需要知道的一切

    当我们学习CSS时,我们大多数人学到的第一件事是CSS中盒子的各个部分的细节,这部分通过叫做 CSS盒、模型。“盒模型”中的元素之一是margin,即盒子周围的...

    前端小智@大迁世界
  • [译]关于Node.js streams你需要知道的一切

    Node.js的stream模块是有名的应用困难,更别说理解了。那现在可以告诉你,这些都不是问题了。

    frontoldman
  • 关于 Staking $ILV 你需要知道的一切

    ILV 代币持有者可以质押他们的代币并从网络中获得奖励。入门很容易。只需在您的 Web 3 钱包中放入 ILV 代币,前往我们的质押网站,按照以下步骤操作,您将...

    公众号---人生代码
  • 关于大数据的10个误解,你一定要知道

    也许对大数据更好的一个类比是它就像一匹意气风发的冠军赛马: 通过适当的训练和天赋的骑师,良种赛马可以创造马场记录–但没有训练和骑手,这个强大的动物根本连起跑门都...

    钱塘数据
  • 你应该知道的关于 CPU 的一些基本知识~

    当程序要执行的部分被装载到内存后,CPU要从内存中取出指令,然后指令解码(以便知道类型和操作数,简单的理解为CPU要知道这是什么指令),然后执行该指令。再然后取...

    用户6543014
  • 【原创手写笔记】面试准备,关于决策树算法你需要知道的那些

    决策树(Decision Tree)是一种非常经典的机器学习算法,常见的决策树算法包括ID3、C4.5、CART树等。

    zenRRan
  • 关于大数据你需要知道的一切

    摘要:分析大量的数据只是使大数据与以前的数据分析不同的部分,还需要了解其他三方面是什么。 人类每天都吃、睡、工作、玩,这生产数据并且是大量的数据。根据IBM的数...

    企鹅号小编
  • 关于 v-model 你需要知道的这一切!

    最近开源了一个 Vue 组件,还不够完善,欢迎大家来一起完善它,也希望大家能给个 star 支持一下,谢谢各位了。

    前端小智@大迁世界
  • 关于 ASP.NET 内存缓存你需要知道的 10 点

    缓存机制的主要目的是提高应用程序的性能。作为 ASP.NET 开发人员,你可能会意识到 ASP.NET Web 窗体以及 ASP.NET MVC 可以使用 Ca...

    哲洛不闹
  • [译] 你所需要知道的关于 Node.js Streams 的一切

    https://medium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c914...

    五月君

扫码关注云+社区

领取腾讯云代金券