百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

决策树一种像人脑工作的算法

toyiye 2024-06-21 12:24 7 浏览 0 评论

点击上方关注,All in AI中国

作者:Emma Grimaldi

决策树是机器学习中最常用的算法之一,主要用于分类,也用于回归问题。在我们做出决定之前我们都会问自己一些问题,而这时候我们的大脑就会像决策树一样工作。例如:外面是阴天吗?如果是的话,我需要带一把雨伞。

在训练数据集以对变量进行分类时,决策树的思想就是基于特定的特征值将数据拆分为较小的数据集,直到目标变量全部属于一个类别。人脑决定基于经验(即多云的天空)选择"拆分特征",而计算机基于最大信息增益拆分数据集。让我们定义一个简单的问题,并跳转到一些计算中,看看这意味着什么。

猫和狗的数据集

假设我们基于体重和身高想要建立一个决策树来确定宠物是猫还是狗。我们可以根据两个特征之一的某些值来划分这些数据点,例如:对于大于15磅重量的宠物,确信是狗。至少基于这个非常简单的数据集。但是如果重量小于15磅,我的子集将包含两只猫和一只狗,所以我需要再次拆分子集,直到只剩下一个类。换句话说,直到所有的子集都变得纯粹。我实际上为这些数据值绘制了一个决策树,得出以下这张示例图:

决策树示例

每个决策树都以根节点开始,即第一次拆分。在不考虑太多的情况下,我们可以轻松地提出不同类型的根节点,以便在相同数量的步骤中将数据分成一个解决方案。但是计算机如何决定如何定义节点?当然,它会寻找最有效的方式,为了理解这是什么,我们需要引入基尼(Gini)这个系数,这是最常用的不等式度量。该不等式是指节点后的每个子集中的目标类。因此,可以在每次拆分后计算,并且根据节点之后不等式的变化,我们也可以定义"信息增益"。

基尼的定义

为了计算基尼,我们考虑在节点之后找到每个类的概率,我们将这些值的平方求和,然后从1中减去这个数量。因此,当一个子集是纯粹的(即其中只有一个类)时候,基尼系数将为0,因为找到该等级的概率确实是1。在这种情况下,我们说已经达到了一个目标,因为在我们实现目标时不再需要拆分。但是如果我们看一下上面的图片,在False情况下的根节点之后,我们有一个包含3个观察的子集,其中2个是猫,1个是狗。如果我们想要计算该子集的基尼系数,我们得出:

所得出的数据集的基尼系数,重量大于或等于15磅

可用于计算类不等式的另一个度量标准是熵(Entopy),而不是基尼(Gini)。它们具有相同的目的,但熵的变化幅度略有不同;但是,为此我们只会使用基尼(Gini)。

根据我们选择的拆分策略,我们将为每个子集提供不同的基尼(Gini)值,并且根据节点后的Gins值,我们可以定义信息增益:

信息增益的定义

这被定义为父基尼系数与子基尼系数的加权平均数之间的差值。如果我们参考上面的例子,通过简单地应用定义知道初始数据集的基尼系数等于0.48,我们可以计算根节点之后的信息增益(以15磅的重量值拆分):

根节点后的信息增益

然后,决策树将考虑所有可能的拆分,并选择具有最高信息增益的拆分。事实上,我们进行了一些编码,看看Python的决策树是什么!

根节点后的信息增益

通过运行下面的代码,我们从头开始构建数据框,并仅在几行中拟合模型。

注意:在训练模型之前训练/测试拆分是很好的做法,以防止过度拟合,并且还要仔细检查这种模型对看不见的数据的执行情况。在这种情况下,我们跳过了这一步骤,因为数据帧只包含少量观察。

需要指出的是,在实例化DecisionTreeClassifier时,我没有在括号中指定任何参数。在处理非常大的数据集时,为了防止决策树失去控制和过度拟合,查看max_depth以指定决策树的最大划分数量是非常有用的。此外,设置max_features非常有用,max_features是一个限制在搜索最佳拆分时要查看的预测变量数量的参数。此外,如果你希望决策树基于熵而不是基尼(Gini进)行优化,则只需在实例化对象时编写criterion ='entropy'。如果要进一步探索如何调整模型,请参阅决策树文档。(http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html)

太好了,我们建立了我们的模型!但这到底意味着什么呢?决策树的美妙之处在于它易于解释,所以让我们绘制它!为了运行下面的代码片段,你可能需要首先在电脑上运行!pip install pydotplus pydot2

这段代码的输出将是下图。

这很酷,对吗?在上面的"手工制作"决策树中,我选择了15磅的重量作为根节点,算法决定拆分相同的变量,但是值为12。这就创造了一个只有狗的叶节点(体重大于12,事实上,gini = 0))。从根节点之后的True条件生成的子集已经在值8.5上的高度变量上进一步拆分。最后一次拆分生成了两个带有空gini值的纯子集。

那么,为什么我们应该还是不应该使用决策树?以下是其优缺点的简要列表:

(1)优点

  • 其解释清晰,特别是如果我们需要将发现传达给非技术受众
  • 它可以很好地处理嘈杂或不完整的数据
  • 它可用于回归和分类问题

(2)缺点

  • 它可能不稳定,这意味着数据的微小变化可能会导致模型发生重大变化
  • 它倾向于过度拟合,这意味着低偏差但是方差很大:即使训练数据得分很高,也可能对于看不见的数据表现不佳

幸运的是,还有许多技术可以处理过度拟合,这是决策树的主要缺点。通过使用bagging 或??增强方法,我们可以从决策树概念开始,通过使用RandomForestClassifier或AdaBoostClassifier等模型来提出更准确的分析。这些都是集成(ensamble)方法,但随机森林通过boostrapping生成了许多"新数据集"(即用替换品对原始数据帧进行采样);它适用于每个新数据帧的决策树,并通过平均森林中的所有决策树来预测。相反,Ada Boost是一个自适应树,它通过调整不正确的分类实例同时使用相同的数据帧来自我学习。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码