前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >决策树告诉你Hello Kitty到底是人是猫

决策树告诉你Hello Kitty到底是人是猫

作者头像
叶锦鲤
发布于 2018-03-15 02:53:19
发布于 2018-03-15 02:53:19
1.2K0
举报
文章被收录于专栏:悦思悦读悦思悦读

Hello Kitty,一只以无嘴造型40年来风靡全球的萌萌猫,在其40岁生日时,居然被其形象拥有者宣称:HelloKitty不是猫!

2014年八月,研究 Hello Kitty 多年的人类学家 Christine R. Yano 在写展品解说时,却被Hello Kitty 持有商三丽鸥纠正:Hello Kitty是一个卡通人物,她是一个小女孩,是一位朋友,但她『绝不』是一只猫。

粉了快半个世纪的世界萌猫,你说是人就是人啦?!就算是形象持有者,也没权利下这个定论啊!

谁有权认定Hello Kitty是人是猫呢?我们把裁决权交给世界上最公正无私的裁判—— 计算机。让机器来决定。

机器如何具备区分一个形象属于哪个物种的知识呢?让它学习呀!机器是可以学习的。我们用计算机编个程序,再输入一堆数据,等着这个程序运行一个算法来处理这些数据。最后,我们需要的结论就显示在屏幕上啦。就是这么简单!

那么来看看我们需要的数据和算法吧。

训练数据

如下图所示,左边一堆是一群小女孩,右边一堆是一群猫。

特征选取

我们提取七个特征,用来判断一个形象,是人是猫。这七个特征包括:有否蝴蝶结;是否穿衣服;是否高过5个苹果;是否有胡子;是否圆脸;是否有猫耳朵;是否两脚走路。

用一个表格来表现这七个特征则如下(第一列为Label,第二至八列为7个特征,每个特征只有两个取值,Yes或者No):

Table-1

算法选取

算法,我们选用决策树。决策树(decision tree)是一个树结构(可以是二叉树或非二叉树),每个非叶节点表示一个特征属性,每个分支代表这个特征属性在某个取值,而每个叶节点存放一个类别。

使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。决策树的决策过程非常直观,容易被人理解。

选定算法后,首先我们要构造决策树。

构造决策树

决策树的构造过程是一个迭代的过程。每次迭代中,采用不同属性作为分裂点,来将元组划分成不同的类别。被用作分裂点的属性叫做分裂属性。

选择分裂属性的目标是让各个分裂子集尽可能地“纯”,即尽量让一个分裂子集中待分类项属于同一类别。

ID3算法

如何使得各个分裂子集“纯”,算法也有多种,此处,我们选择最直接也最简单的ID3算法。该算法的核心是:以信息增益度量属性选择,选择分裂后信息增益最大的属性进行分裂

下面先定义几个要用到的概念:

i) D为用类别对训练元组进行的划分;

ii) D的熵(entropy)表示为:

其中pi表示第i个类别在整个训练元组中出现的概率,可以用属于此类别元素的数量除以训练元组元素总数量作为估计。

熵的实际意义表示是D中元组的类标号所需要的平均信息量。

iii) 对训练元组按属性A进行D划分,则A对D划分的期望信息为:

iv)则按照属性A进行D划分的信息增益为期望信息量与熵(即平均信息量)的差值:

代入数据计算

1)根据上述概念,我们先来计算info(D)。因为总共只有两个类别:人和猫,因此m==2。

Info(D)= -p[Girl] log(p[Girl]) - p[Cat] log(p[Cat])= - 9/17 * log(9/17) - 8/17 * log(8/17)= 0.69

2)然后我们再分别计算各个feature的Info[feature](D)。

因为无论哪个feature,都只有两个属性值:Yes或者No,因此InfoA(D)公式中的v==2。

下面以Info[Has a bow](D)为例来示意其计算过程。

Info[Has a bow](D) = p[Yes] * (-p[Girl|Yes]* log(p[Girl|Yes]) – p[Cat|Yes] * log(p[Cat|Yes))+ p[No] * (-p[Girl|No] * log(p[Girl|No])– p[Cat|No] * log(p[Cat|No]))= 8/17 * (-4/8 * log(4/8) – 4/8 * log(4/8)) + 9/17* (- 5/9 * log(5/9) – 5/9 * log(5/9)) = 0.69

依次计算其他几项,得出如下结果:

Info[Wear Clothes](D) = 0.31

Info[Less than 5 apples tall](D) =0.60

Info[Has whiskers](D) = 0.36

Info[Has round face](D) = 0.61

Info[Has cat ears](D) = 0.18

Info[Walks on 2 feet](D) = 0.36

3)进一步计算,得出Gain(Has cat ears) 最大,因此”Has cat ears”是第一个分裂节点。

而从这一属性对应的类别也可以看出,所有属性值为No的都一定是Girl;属性值为Yes,可能是Girl也可能是Cat,那么第一次分裂,我们得出如下结果:

现在“Has cat ears”已经成为了分裂点,则下一步将其排除,用剩下的6个feature继续分裂成树:

Table-2

Table-2为第二次分裂所使用训练数据,相对于Table-1,“Has cat ears”列,和前7行对应“Has cat ears”为No的数据都已经被移除,剩下部分用于第二次分裂。

如此反复迭代,最后使得7个feature都成为分裂点。

需要注意的是,如果某个属性被选为当前轮的分裂点,但是它在现存数据中只有一个值,另一个值对应的记录为空,则这个时候针对不存在的属性值,将它标记为该属性在所有训练数据中所占比例最大的类型。

对本例而言,当我们将“Wear Clothes”作为分裂点时,会发现该属性只剩下了一个选项——Yes(如下Table-3所示)。此时怎么给“Wear Clothes”为No的分支做标记呢?

Table-3

这时就要看在Table-1中,“Wear Clothes”为No的记录中是Girl多还是Cat多。一目了然,在Table-1中这两种记录数量为0:6,因此“Wear Clothes”为No的分支直接标志成Cat。

根据上述方法,最终我们构建出了如下决策树:

决策树构建算法总结

DecisionTree induceTree(training_set, features) {

If(training_set中所有的输入项都被标记为同一个label){ return 一个标志位该label的叶子节点;

} else if(features为空) {

return 一个标记为默认label的叶子节点; // 默认标记为在所有training_set中所占比例最大的label

} else {

选取一个feature,F;

以F为根节点创建一棵树currentTree;

从Features中删除F;

foreach(value V of F) {

将training_set中feature F的取值为V的元素全部提取出来,组成partition_v;

branch_v= induceTree(partition_V, features);

将branch_v添加为根节点的子树,根节点到branch_v的路径为F的V值;

}

returncurrentTree;

}

}

决策树剪枝

如图中显示,最后两个分裂点“Has round face”和“Has a bow”存在并无意义——想想也是啊,无论人猫,都有可能是圆脸,也都可以戴蝴蝶结啊。所以我们对上面决策树进行剪枝。

剪枝是优化决策树的常用手段。剪枝方法大致可以分为两类:

I. 先剪枝(局部剪枝)——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造。

II. 后剪枝(全局剪枝)——先构造完成完整的决策树,再通过某些条件遍历树进行剪枝。

上面我们的决策树已经构造完成了,此时剪枝头就是后剪枝。修剪完成后,我们的决策树变成了下面这样:

用决策树对Hello Kitty进行分类

我们将Hello Kitty的属性带入Cat-Girl决策树,发现Hello Kitty:Has cat ears: Yes -> Work on 2 feed: Yes -> WearClothes: Yes -> Has whirskers: Yes -> Less than 5 apples: Yes -> Cat

Bingo! Hello Kitty 是只猫!这是我们的ID3决策树告诉我们的!

ID3决策树实现源代码

ID3决策树Java实现代码和本文所使用数据文件位于:https://github.com/juliali/DecisionTreeSamples.git

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-02-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 智汇AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Peter教你谈情说AI | 09决策树(下)—既能回归又能分类的模型
我们提取七个特征,用来判断一个形象,是人是猫。这七个特征包括:有否蝴蝶结;是否穿衣服;是否高过5个苹果;是否有胡子;是否圆脸;是否有猫耳朵;是否两脚走路。
刘盼
2018/12/07
4820
机器学习之决策树(Decision Tree)及其Python代码实现
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_35512245/article/details/54927178
大黄大黄大黄
2018/09/14
2.5K0
机器学习之决策树(Decision Tree)及其Python代码实现
机器学习笔记之决策树分类Decision Tree
决策树(decision tree)是一种依托于策略抉择而建立起来的树。机器学习中,决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。 树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,从根节点到叶节点所经历的路径对应一个判定测试序列。决策树可以是二叉树或非二叉树,也可以把他看作是 if-else 规则的集合,也可以认为是在特征空间上的条件概率分布。决策树在机器学习模型领域的特殊之处,在于其信息表示的清晰度。决策树通过训练获得的 “知识”,直接形成层次结构。这种结构以这样的方式保存和展示知识,即使是非专家也可以很容易地理解。
Jetpropelledsnake21
2021/03/12
4K0
机器学习笔记之决策树分类Decision Tree
决策树(Decision Tree)CART算法
Classification And Regression Tree,即分类回归树算法,简称CART算法,它是决策树的一种实现,通常决策树主要有三种实现,分别是ID3算法,CART算法和C4.5算法。
Ai学习的老章
2019/04/08
3K0
决策树(Decision Tree)CART算法
【白话机器学习】算法理论+实战之决策树
如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的, 常见的机器学习算法:
Datawhale
2020/03/04
7340
【白话机器学习】算法理论+实战之决策树
决策树原理及numpy实现版
(1)若D中所有实例属于同一类 则T为单结点树,并将类 ​作为该结点的类标 记,返回T; (2)若A=Ø,则T为单结点树,并将D中实例数最大的类 作为该结点的类标记, 返回T; (3)否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 Ag ; (4)如果Ag 的信息增益小于阈值ξ ,则置T为单结点树,并将D中实例数最大的类 ​作为该结点的类标记,返回T; (5)否则,对Ag 的每一可能值 ​,依Ag = i​将D分割为若干非空子集 ​,将 中实例 数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T; (6)对第i个子结点,以 ​为训练集,以A-{Ag }为特征集,递归地调用步(1)~步(5),得到子树 返回 。
AI拉呱
2021/12/15
7960
决策树原理及numpy实现版
C4.5决策树及CART决策树
信息增益比本质: 是在信息增益的基础之上乘上一个惩罚参数。特征个数较多时,惩罚参数较小;特征个数较少时,惩罚参数较大。惩罚参数:数据集D以特征A作为随机变量的熵的倒数。
用户10950404
2024/07/30
1540
C4.5决策树及CART决策树
决策树学习笔记(一):特征选择
相信很多朋友已经对决策树很熟悉了,决策树是机器学习中的一种基本的可用于分类与回归的方法,它是一些集成学习如GBDT,XGboost等复杂模型的基础。这些高级模型比如XGboost可以非常好地拟合数据,在数据挖掘比赛以及工业界中都有着非常出色的表现,受到了无数爱好者的追捧。
1480
2019/07/14
1.8K0
决策树(Decision Tree)C4.5算法
C4.5,是机器学习算法中的另一个分类决策树算法,它是决策树(决策树也就是做决策的节点间的组织方式像一棵树,其实是一个倒树)核心算法,也是上节所介绍的ID3的改进算法,所以基本上了解了一半决策树构造方法就能构造它。
Ai学习的老章
2019/04/08
1.7K0
决策树(Decision Tree)C4.5算法
Python+sklearn决策树算法使用入门
简单地说,决策树算法相等于一个多级嵌套的选择结构,通过回答一系列问题来不停地选择树上的路径,最终到达一个表示某个结论或类别的叶子节点,例如有无贷款意向、能够承担的理财风险等级、根据高考时各科成绩填报最合适的学校和专业、一个人的诚信度、商场是否应该引进某种商品、预测明天是晴天还是阴天。
Python小屋屋主
2019/05/29
3.2K0
决策树
故事一则 某母亲为女儿找相亲对象: 女儿:多大年纪了? 母亲:26。 女儿:长的帅不帅? 母亲:挺帅的。 女儿:收入高不? 母亲:不算很高,中等情况。 女儿:是公务员不?
Coder的技术之路
2021/05/14
3590
决策树
MADlib——基于SQL的数据挖掘解决方案(24)——分类之决策树
决策树(Decision Tree)又称为分类树(Classification Tree),是最为广泛的归纳推理算法之一,处理类别型或连续型变量的分类预测问题,可以用图形和if-then的规则表示模型,可读性较高。决策树模型通过不断地划分数据,使因变量的差别最大,最终目的是将数据分类到不同的组织或不同的分枝,在因变量的值上建立最强的归类。
用户1148526
2019/05/25
1.2K0
决策树之ID3、C4.5、C5.0等五大算法及python实现
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/47617801
悟乙己
2019/05/28
2.7K0
详解决策树 C4.5 算法
‍‍‍‍ 转自:Treant http://www.cnblogs.com/en-heng/p/5013995.html 决策树模型与学习 决策树(decision tree)算法基于特征属性进行分类,其主要的优点:模型具有可读性,计算量小,分类速度快。 决策树算法包括了由Quinlan提出的ID3与C4.5,Breiman等提出的CART。其中,C4.5是基于ID3的,对分裂属性的目标函数做出了改进。 决策树模型 决策树是一种通过对特征属性的分类对样本进行分类的树形结构,包括有向边与三类节点: 1、根节点
企鹅号小编
2018/02/07
2.3K0
详解决策树 C4.5 算法
机器学习:对决策树剪枝
昨天推送中介绍了决策树的基本思想,包括从众多特征中找出最佳的分裂点,刚开始大家都是用选择这个特征后带来的信息增益为基本方法,后来发现它存在一个严重的bug,因此提出来了信息增益率(即还要除以分裂出来的那些节点对应的自身熵的和),再后来,又提出来一个与熵概念类似的基尼系数,根据这些理论和训练数据可以构建出一颗大树了。但是这颗大树的泛化能力一般,需要进行剪枝操作才能提升泛化能力,那么常用的剪枝策略都有哪些呢。 01 这真的好吗? 一个在训练数据集上可以取得100%的准确率的分类器,一定很好吗?未必好,因
double
2018/04/02
1.1K0
机器学习:对决策树剪枝
机器学习之决策树(C4.5算法)
我们已有如下所示数据集,特征属性包含天气、温度、湿度、风速,然后根据这些数据去分类或预测能否去打高尔夫球,针对此类问题你会怎么解决呢。
小一
2019/08/14
4.9K1
机器学习之决策树(C4.5算法)
机器学习算法之决策树算法
这里以ID3算法做二分类为例介绍决策树算法的原理。所谓决策树就是由一个个"决策"组成的树。决策树中,结点分为两种,放“决策依据”的是非叶结点,放“决策结果”的是叶结点。那么决策是什么呢?很简单,决策就是对于一个问题有多种答案,我们选择答案的过程就是决策,例如判断一个人的身高是否大于180就是一种决策。
BBuf
2019/12/04
4480
机器学习算法之决策树算法
好记忆的机器学习面试--决策树
其实用一下图片能更好的理解LR模型和决策树模型算法的根本区别,我们可以思考一下一个决策问题:是否去相亲,一个女孩的母亲要给这个女海介绍对象。
mantch
2019/07/30
5070
好记忆的机器学习面试--决策树
AI - 决策树模型
决策树的思想来源可以追溯到古希腊时期,当时的哲学家们就已经开始使用类似于决策树的图形来表示逻辑推理过程。然而,决策树作为一种科学的决策分析工具,其发展主要发生在20世纪。
@小森
2024/03/24
1830
AI - 决策树模型
决策树算法:ID3,C4.5,CART
其实用一下图片能更好的理解LR模型和决策树模型算法的根本区别,我们可以思考一下一个决策问题:是否去相亲,一个女孩的母亲要给这个女海介绍对象。
大数据技术与机器学习
2019/11/20
1.3K0
决策树算法:ID3,C4.5,CART
相关推荐
Peter教你谈情说AI | 09决策树(下)—既能回归又能分类的模型
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档