从前

从前,小夕种了一棵树,种在了小夕的小屋后面~

为什么要种这棵树呢?因为呀,它可以帮小夕总结历史经验,然后帮小夕对当前的局势做出决策~这样小夕就可以安心给大家写文章啦~

这棵树是这样的。

一开始,小夕买了一颗小树苗,把它栽到地上。

然后呢,小夕不给它浇水,也不给他浇肥料,而是让他吃历史经验。比如呢,今天,小夕让它帮小夕识别出图片中的生物是喵还是驴。所以呢,这里的历史经验就是一大堆喵和驴的图片,并且小夕给它标注好了每张图片是喵还是驴。

可是由于树没有眼睛呀,不能直接观察图片。所以呢,小夕帮它把图片转化成了特征,也就是用几个特征来描述每张图片。

小夕选了如下几个特征来描述每张图片:

1、头是否是长条形
2、身上有没有毛
3、有没有发现胡须
4、丑不丑
5、萌不萌

所以,比如小夕就会对下面这张图片:

转化为[False True False False True]特征向量(即,不是长条头、有毛、没发现胡须、不丑、萌)

然后小夕一口气给上千张图片提取完了特征,当然,这些图片都是标注好类别的。

小夕就把它们丢给小夕心爱的小树苗啦~

快快长大

诶?那小树苗要怎么生长呢?

小夕问小树苗:“小树小树,你接下来要怎么长呢?”

小树苗喝了口水,说:“我每一步的生长都是非常慎重的,我从不会多长个枝丫或者少长个枝丫。每个样本这不是有五个特征嘛,我呢,就会从中挑选出最有价值的一个特征,来作为我第一次生长的分支。”

小夕接着问:“那你要怎么挑选特征呢?”

小树苗说:“你看啊,比如你挑出来的第二个特征,“身上有没有毛”,这就是很糟糕的特征。为什么呢?我们就来看“有没有毛”这个特征。我数了一下,在所有有毛的动物中,50%的动物是喵,50%的动物是驴。而在所有没有毛的动物中,也是50%的动物是喵,50%的动物是驴。所以“有没有毛”这个特征的任何一个取值下,所有类别的样本数一样,是完全等概率的,这样的特征完全无法用来做分类啊。因为不管这个特征的值是什么,它所映射的各个类别都是等概率的。所以这个类别是最糟糕的。”

小树苗喝了口水,接着说:“但是你用的第三个特征,“有没有胡须”,就非常棒。我统计了一下,有胡须的动物中,喵占了92%,驴占了8%。而没有胡须的动物中,喵占了20%,驴占了80%。这样,如果给我一张未知类别的样本,只需要看“有没有胡须”这个特征的话,基本就可以判断出这个样本的类别是什么了!比如说这个样本的这个特征的值恰好是“没有胡须”,那么我就有80%的把握说这是一头驴!当然,如果恰好这个样本的特征的值是“有胡须”,我就有92%的把握说这个样本时一只喵!这么棒的特征,当然是首选的啦!所以,我下面要长的枝丫就是叫做“有没有胡须枝丫”!”

小夕:

“我可能买了一棵假树。

我。。。懂你的意思了。你说的选择最优特征的方法实际就是计算条件熵的过程。对于你说的“有没有毛”这个很糟糕的特征,由于这个特征的每个取值下,各个类别都是完全等概率分布的,所以是最无序的,最随机的特征,我们称为“条件熵最大的特征”。熵最大就是1,所以计算出的“有没有毛”这个特征的条件熵肯定是1。

而你说的“有没有胡须”这个特征,它的每个取值下,类别分布很随机,也就是说很有序(想象一下,最有序的状态就是每个取值下,所有样本都是同一个类别,多么有序啊。而类别等概率分布的时候,就是每个特征下鱼龙混杂的时候,啥类别都有,乱糟糟的),这种很有序的特征,计算出的条件熵肯定很小。最有序的情况下,条件熵就是0啦。”

小树:“好了。但是,我的分类目标是达到100%的准确率。所以,我要进一步挑选特征了!

基于有胡须的那个分支,我会将这个分支里的样本重新计算各个特征的条件熵(当然胡须这个特征除外),像之前一样选择条件熵最大的特征作为下一个枝丫!

一直重复这个过程,直到哪一个枝丫下的全部样本都是同一个类别了,这个枝丫就不再继续分裂了。”

最终,小树长成了大树。

这时,小夕忙着给大家写文章呢,但是小夕的一个好闺蜜小娅拿着一张图片过来了,她想让小夕帮她看看这是驴还是喵。

但是小夕很忙呀,没空理她,就让她拿着图片问后院的决策树啦~

然后小娅去问决策树这是啥,决策树说:“它有胡须吗?”

小娅说:“有!”

树:“它萌吗?”

小娅:“一点也不萌!”

树:“它是长脸吗?”

小娅:“是长脸!”

树:“那这就是只驴!”

留下一脸懵逼的小娅在树下凌乱( ̄∇ ̄)

这棵神奇的树叫什么呢?

这棵树的专业说法叫“ID3决策树”,为什么是ID3呢?因为它是通过计算条件熵来选择最优特征的。其他经典决策树如C4.5决策树、CART决策树等与ID3的区别仅在于最优特征选择的算法。

总结

然后对本文总结一下,本文经过了如下步骤,这也是一个简单的机器学习/数据挖掘任务的经典流程。

1、对已标注类别的数据集进行数据预处理与特征提取
2、训练决策树(分类器/机器学习模型)
3、对未知类别的数据集进行数据预处理与特征提取
4、利用决策树对未知类别样本的类别做出决策

想要详细了解ID3决策树选择最优特征的过程(即计算条件熵)的同学,可以Google或者百度一下“条件熵”或者查阅《数据挖掘导论》等机器学习相关的书籍;想要详细了解如何代码实现ID3决策树的同学,可以搜索各种CSDN博客或者查阅《机器学习实战》等侧重代码实现的书籍。对于如何提高决策树的泛化能力(防止过拟合)等优化技巧,或者其他类型的决策树,可以看《数据挖掘导论》等经典书籍~

史上最简单的决策树模型讲解相关推荐

  1. 史上最简单的玻尔兹曼机模型讲解

    在上一篇文章中,小夕讲述了逻辑回归为了抗衡贝叶斯网,也开始了自己的进化.然而令我们没有想到的是,逻辑回归最终竟然进化成了一个生成式模型--受限玻尔兹曼机(RBM),也就是变成了敌方(生成式模型)的武器 ...

  2. 查找(一)史上最简单清晰的红黑树讲解 http://blog.csdn.net/yang_yulei/article/details/26066409

    查找(一)史上最简单清晰的红黑树讲解 2014-05-18 00:05 4037人阅读 评论(6) 收藏 举报 分类: 数据结构(7) 算法(4) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...

  3. Uber发布史上最简单的深度学习框架Ludwig!

    昨日,Uber官网重磅宣布新开源深度学习框架Ludwig,不需要懂编程知识,让专家能用的更顺手,让非专业人士也可以玩转人工智能,堪称史上最简单的深度学习框架! Ludwig是一个建立在TensorFl ...

  4. 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)

    转:https://blog.csdn.net/forezp/article/details/69934399 最新版本: 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix) ...

  5. 史上最简单MySQL教程详解(进阶篇)之存储引擎介绍及默认引擎设置

    什么是存储引擎? MySQL存储引擎种类 MyISAM 引擎 InnoDB引擎 存储引擎操作 查看存储引擎 存储引擎的变更 修改默认引擎 什么是存储引擎? 与其他数据库例如Oracle 和SQL Se ...

  6. 重磅!Uber发布史上最简单的深度学习框架Ludwig!不懂编程也能玩转人工智能

    点击我爱计算机视觉标星,更快获取CVML新技术 昨日,Uber官网重磅宣布新开源深度学习框架Ludwig,不需要懂编程知识,让专家能用的更顺手,让非专业人士也可以玩转人工智能,堪称史上最简单的深度学习 ...

  7. 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)--有BUG,注意看我的备注

    转载请标明出处:  http://blog.csdn.net/forezp/article/details/69934399  本文出自方志朋的博客 在微服务架构中,根据业务来拆分成一个个的服务,服务 ...

  8. 史上最简单的SpringCloud教程 | 第四篇:断路器(Hystrix)--里面有BUG,所以我转载改一下

    017年04月09日 21:14:05 阅读数:271535 转载请标明出处:  http://blog.csdn.net/forezp/article/details/69934399  本文出自方 ...

  9. 史上最简单MySQL教程详解(进阶篇)之索引及失效场合总结

    史上最简单MySQL教程详解(进阶篇)之索引及其失效场合总结 什么是索引及其作用 索引的种类 各存储引擎对于索引的支持 简单介绍索引的实现 索引的设置与分析 普通索引 唯一索引(Unique Inde ...

最新文章

  1. HTML的标签描述22
  2. python如何跨模块调用变量_Python跨模块用户定义的全局变量:在其他模块运行时调用它们的问题...
  3. java web 集成dom4j_[JavaWeb基础] 031.dom4j写入xml的方法
  4. dva源码解析(一)
  5. 80端口被占用时的终极解决方法
  6. 德裔美国Delphi程序员霍尔格-弗里克博士访谈
  7. 北航操作系统课程-20200409课堂小测-进程同步
  8. 谷歌地球 Google Earth v7.3.2.5495 专业版
  9. CH343串口驱动(包含各系统平台)
  10. 第十届国家级大学生创新训练项目——3D打印技术在建筑构部件生产中的应用
  11. 资阳停车场系统推荐_专业停车场系统维护业务广泛
  12. 职称计算机考试常用的命令,Visual FoxPro常用命令分类表
  13. 7.基本数据类型详细讲解-int/bool/str
  14. 浩辰3D软件新手攻略:数据管理功能详解
  15. 微信中的表情符号代码对照表
  16. linux命令删除raid,甲秀之音-Linux环境下删除硬盘中残留的raid信息
  17. git学习笔记(全,附命令大全)
  18. 大写锁定怎么解除(笔记本大写锁定怎么解除)
  19. MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引
  20. SpeechSynthesisUtterance实现语音播报

热门文章

  1. C++ _countf
  2. 和吴昊一起玩推理 Round 2 —— 蚂蚁爬杆问题
  3. Struts2初始化过程代码分析
  4. Linux NAT设定
  5. __attribute__((always_inline))
  6. C语言中字符型和字符串型的对比
  7. 上世纪八九十年代的收录放音机拆解
  8. pythontuple([1、2、3)_Python 语句\nprint(tuple([1,2,3]))\n的运行结果是
  9. fedora linux命令,Fedora Linux的一些常用设置和常用命令
  10. 机器学习数据包之numpy