速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

AI 从业者必须了解的决策树指南

  • 2019-01-15
  • 本文字数:3462 字

    阅读完需:约 11 分钟

AI从业者必须了解的决策树指南

决策树是一种功能非常强大的机器学习模型,能够在许多任务中实现高精度,同时具有高可解释性。决策树在机器学习模型领域的特殊之处,在于其信息表示的清晰度。决策树通过训练获得的 “知识”,直接形成层次结构。这种结构以这样的方式保存和展示知识,即使是非专家也可以很容易地理解。

现实生活中的决策树

你很可能在自己的生活中,使用过决策树来做出决定。比如说,你决定这个周末应该做什么活动。这可能取决于你是想和朋友一起出去玩儿还是独自过周末;在这两种情况下,你的决定还取决于天气。如果天气晴朗,并且朋友也有空,你可能想踢足球。如果最后下雨的话,你就去看电影。如果你朋友根本不来,那么,无论天气如何,你都会喜欢去打电竞游戏。



这就是一则真实的决策树的例子。我们构建了一棵树来模拟一组顺序的、层次化的决策,这些决策最终会导致一些最终结果。请注意,为了保持树的较小规模,我们还选择了相当 “高级” 的决策。例如,如果我们为天气设置了许多可能的选项,如:25 度的晴天、25 度的雨天、26 度的晴天、26 度的雨天、27 度的晴天…… 等等,这样我们的树很快就会变得很大!确切的温度真的不太重要,我们只是想知道是否可以外出。


在机器学习中,决策树的概念也是一样的。我们想要构建一棵树,这棵树有一组层次化的决策,这些决策最终会给我们一个最终的结果,即分类或回归预测。在选择决策时,尽可能让树的规模较小,同时以实现高分类 / 回归准确性为目标。

机器学习中的决策树

决策树模型的创建,使用了两个步骤:归纳和修剪。归纳是我们实际构建树的方法,即根据我们的数据设置所有的层次决策边界。由于训练决策树的性质,它们很容易出现严重的过拟合。而修剪是从决策树中删除不必要的结构的过程,有效地降低了克服过拟合的复杂性,并使其更容易解释。

感应

从更高的层次来看,决策树归纳需要经过 4 个主要步骤来构建树:


  1. 从训练数据集开始,它应该具有一些特征变量和分类或回归输出。

  2. 确定数据集中的 “最佳特征”,以便对数据进行分割;稍后我们将详细介绍如何定义 “最佳特征”。

  3. 将数据拆分包含此最佳特征的可能值的子集。这种拆分基本上定义了树上的节点,即每个节点都是基于我们数据中某个特征的拆分点。

  4. 通过使用从步骤 3 创建的数据子集递归地生成新的树节点。我们不断地拆分,直到我们在某种程度上,优化了最大的准确率,同时最小化拆分 / 节点的数量。


步骤 1 很简单,只需获取你自己的数据集即可!


对于步骤 2,通常使用贪心法(greedy algorithm)来选择要使用的特征和具体的拆分,以便对成本函数进行最小化。如果我们仔细想一想,在构建决策树时执行拆分相当于划分特征空间。我们将反复尝试不同的拆分点,然后在最后选择成本最低的拆分点。当然,我们可以采取一些聪明的做法,比如,只在数据集的值范围内进行拆分。这样我们就可以避免将算力浪费在测试那些很槽糕的拆分点上。


对于回归树,我们可以用一个简单的平方误差作为成本函数:



其中,Y 是真相,Y-hat 是预测值;我们对数据集中的所有样本求和来获得总误差。对于分类,我们使用基尼指数函数:



其中,pk 是特定决策节点中 k 类训练实例的比例。理想情况下,节点的错误值应为零,这意味着,每次拆分都会 100% 输出一个类。这正是我们想要的,因为这样我们就可以知道,一旦我们到达那个特定的决策节点,我们的输出到底是什么,而无论我们在决策边界的哪一边。


在我们的数据集中,每次拆分一个类的概念成为信息增益。看看下面的例子。



如果我们要选择一个拆分,其中每个输出都有一个依赖于数据的类组合,那么,我们实际上根本没有获得任何信息;我们不知道是否存在这样的一个特定节点(即特征),对我们的数据分类有任何影响!另一方面,如果我们的拆分对于每个输出的每个类都有很高的百分比,那么我们就会得到这样的信息,即在特定的特征变量上以特定的方式对信息进行拆分,会得到一个特定的输出!


现在,我们当然可以继续拆分、拆分、拆分…… 直到我们的树有了成千上万的分支,但这并不是一个好主意。我们的决策树将会变得巨大,缓慢,并对我们的训练数据集过拟合。因此,我们将设置一些预定义的停止标准来停止树的构造。


最常见的停止方法是对分配给每个叶节点的训练样本的数量进行最小计数。如果计数小于某个最小值,则不接受拆分,并将该节点视为最终叶节点。如果所有的叶节点都成为最终叶节点,训练就会停止。最小计数越小,拆分效果就越好,潜在的信息也越多,但是也更容易对训练数据出现过拟合。如果最小值太大,你可能会过早停止。因此,最小值通常是基于数据集设置的,这取决于每个类中预期有多少个样本。

修剪

由于训练决策树的性质,它们很容易出现过拟合。为每个节点的最小实例数设置正确的值可能很困难。大多数时候,我们可能会选择一个安全的方法,把最小值设置得非常小,这样就会产生很多拆分,最终生成一个非常庞大且复杂的树。关键是,这些拆分中有许多最终会变得多余,没有必要提高模型的准确性。


树修剪是一种利用这种拆分冗余来移除的技术,即修剪树中不必要的拆分。从高层次来讲,修剪会将树的一部分从严格的、僵化的决策边界压缩成更平滑、更通用的树,从而有效地降低树的复杂性。决策树的复杂性被定义为树中的拆分次数。


一种简单而高效的修剪方法是遍历树中的每个节点,评估删除节点对成本函数的影响。如果变化不大,那就修剪掉!

Scikit Learn 中的一个例子

分类和回归的决策树在 Scikit Learn 中使用内置类非常容易使用!我们将首先加载数据集并初始化决策树以进行分类。运行训练就是一段简单的几行代码!



Scikit Learnin 还允许我们使用 graphviz 库对我们的树进行可视化。它提供了一些选项,这些选项有助于将决策节点进行可视化,并将模型学到的决策节点拆分开来,这对于理解决策节点的工作方式非常有用!下面我们将根据特征名称对节点进行着色,并显示每个节点的类和特征信息。



你还可以在 Scikit Learn 中为决策树模型设置几个参数。这里有一些有趣的方法可以尝试,以得到更好的结果:


  • max_depth: 我们将停止拆分节点的树的最大深度。这类似于控制深度神经网络中的最大层数。降低层数会使模型更快,但不那么准确;调高层数可以得到较高的准确性,但存在过拟合的风险,而且还可能会变得缓慢。

  • min_samples_split:拆分节点所需的最小样本数量。我们讨论了上述决策树的这个方面,以及如何将其设置为更高的值来帮助缓解过拟合。

  • max_features:寻找最佳拆分时要考虑的特征数量。更高的水平意味着可能会有更好的结果,但同时也意味着需要付出更长的训练时间。

  • min_impurity_split:树生长中的早期停止的阈值。如果节点的杂质高于阈值,节点就会拆分。这可以用来权衡过拟合(高值、小树)和高准确度(低值、大树)。

  • presort:是否对数据进行预排序,以加快你何种最佳拆分的发现。如果我们事先对每个特征的数据进行排序,我们的训练算法将更容易找到合适的值进行拆分。

实际应用决策树的技巧

下面是一些决策树的优点和缺点,可以帮助你确定你的问题是否适合应用决策树,以及有关如何有效应用它们的一些提示:

优点

  • 易于理解和解释。在每个节点上,我们能够确切地看到模型正在做什么决策。在实践中,我们将能够完全理解准确度和误差来自何处,模型可以很好地处理哪种类型的数据,以及输出如何受到特征值的影响。Scikit Learn 的可视化工具是可视化和理解决策树的最佳选择。

  • 只需很少的数据准备。许多机器学习模型可能需要大量的数据预处理,例如归一化,并且可能需要复杂的正则化方案。另一方面,在调整一些参数后,决策树在开箱即用时可以工作得非常好。

  • 使用树进行推理的成本是用于训练树的数据点数量的对数。这是一个巨大的优势,因为它意味着拥有更多的数据,不一定会对我们的推理速度产生巨大影响。

缺点


原文链接:


https://www.kdnuggets.com/2018/12/guide-decision-trees-machine-learning-data-science.html


2019-01-15 07:557137
用户头像

发布了 375 篇内容, 共 188.8 次阅读, 收获喜欢 945 次。

关注

评论

发布
暂无评论
发现更多内容

蓝易云 - Ubuntu开启生成Core Dump的方法

百度搜索:蓝易云

云计算 Linux ubuntu 运维 香港服务器

人工智能与语音识别:技术进步与应用前景

天津汇柏科技有限公司

语音识别 人工智能’

火山引擎ByteHouse发布高性能全文检索引擎

字节跳动数据平台

数据库 大数据 云原生 Clickhouse 数仓

公开课 | 软件测试简历书写、职业规划及面试的必备技能

测试人

软件测试

小智常见报表示例--层次坐标--逐层累计报表

小智数据

小智报表 开源报表 类excel报表 自定义打印控件 逐层累计复杂报表

电商新时代,商家还能怎样赚钱?

自象限

蓝易云 - docker安装elasticsearch、kibana

百度搜索:蓝易云

Docker elasticsearch Linux 运维 Kibana

蓝易云 - 电商建站需选云服务器的三个理由

百度搜索:蓝易云

建站 跨境电商 独立站 电商服务器 建站服务器

创新·链接·共赢|端点科技出席第五届国有企业数智化采购与智慧供应链论坛

科技热闻

天池AI大模型技术提升营火热上线,四重好礼等你来拿!

阿里云天池

AI

Easysearch 新特性:写入限流功能介绍

极限实验室

征文活动 easysearch 极限科技 写入限流

蓝易云 - dockerfile命令详解

百度搜索:蓝易云

Docker Linux 运维 Dockerfile 云服务器

蓝易云 - 云服务器利用Docker搭建sqli-labs靶场环境

百度搜索:蓝易云

Docker 云计算 云服务器 服务器租用 高防服务器

蓝易云 - 企业如何选择云服务器

百度搜索:蓝易云

云计算 服务器租用 高防服务器 企业云服务器 免备案服务器

小智常见报表示例--层次坐标--环比报表

小智数据

小智报表 环比报表 常见报表示例 自定义报表打印控件

终端设备识别准确率高达99.999%

芯盾时代

终端安全 移动应用安全 风控 反欺诈

开山网商品详情数据接口(K3.item_get)丨开山网API接口

tbapi

开山网 开山网商品详情接口 开山网 API接口

蓝易云 - ubuntu22安装和部署Kettle8.2

百度搜索:蓝易云

云计算 ubuntu 运维 kettle 香港服务器

蓝易云 - 小白网站搭建教程,安排!成都云服务器

百度搜索:蓝易云

云计算 云服务器 服务器租用 香港服务器 高防服务器

微软研究人员推出SpreadsheetLLM!旨在理解和处理电子表格;“神农大模型 2.0”正式发布!|AI日报

可信AI进展

人工智能

借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡

NGINX开源社区

nginx 开源 Kubernetes NGINX Ingress Controller nginx 开源版

优秀Java 开发者都在参与的项目

XIAOJUSURVEY

maven 服务端 springboot Java 8

蓝易云 - 内存函数,memcpy,memmove,memcmp,memset

百度搜索:蓝易云

Linux 运维 C语言 内存 函数

小智常见报表示例--层次坐标--比较报表

小智数据

小智报表 开源报表 类excel报表 自定义报表控件 报表批量打印

微软最新WiFi远程代码执行漏洞(CVE-2024-30078)探究

阿里技术

微软 漏洞 WiFi远程代码 更新中 30078

蓝易云 - openGauss学习笔记-60 openGauss数据库管理-逻辑存储结构

百度搜索:蓝易云

数据库 系统 opengauss 云服务器 高防服务器

socks5全局代理客户端:Proxifier for Mac 注册版

你的猪会飞吗

Mac软件 mac下载

阿里云 MaxCompute MaxFrame 开启免费公测,统一 Python 开发生态

阿里云大数据AI技术

数据挖掘 大数据 阿里云 分布式计算 MaxCompute

VMware ESXi 8.0U3 macOS Unlocker & OEM BIOS xFusion (超聚变) 定制版

sysin

esxi OEM BIOS unlocker

AI从业者必须了解的决策树指南_AI&大模型_George Seif_InfoQ精选文章