秒懂机器学习---当机器学习遇上决策树....

秒懂机器学习---当机器学习遇上决策树....

一、总结

一句话总结:

多多看图,图的直观效果很好,很多时候文字实在表达不清

 

1、决策树(Decision Tree)中的各个节点表示什么意思?

每一个树节点表示一个属性上的测试
每一个分支代表一个属性的输出
每一个树叶节点代 表一个类或者类的分布


决策树是一个类似于流程图的树结构,其中每一个树节点表示一个属性上的测试,每一个分支代表一个属性的输出,每一个树叶节点代 表一个类或者类的分布,树的最顶层是树的根节点。

 

2、决策树怎么决定是否扩展分支?

看叶子粒度是否达到要求:比如正例或者反例都不为0时,那么就要根据属性继续往下扩展树。

 

3、信息熵如何计算(比如16只NBA球队谁夺冠,先假设每个球队的夺冠几率一样)?

二分法猜:log16=4;
P1*logP1+P2*logP2+...P16*logP16:夺冠概率不一样的情况



举个例子,NBA总决赛的夺冠球队,假设你对NBA球队一无所知,你需要猜多少次?(假设每个球队的夺冠几率都是一样的)这里我们可以给进入季后赛的NBA球队进行编号(NBA季后赛会选出16支球队),然后使用二分法进行猜测(猜测冠军队伍在1-8号球队之间,是的话,在进行二分;不是的话就在9-16号球队之间),这样我们要猜测的次数最多是4次(2^4=16嘛)。
信息熵使用比特(bit)来衡量信息的多少,计算公式如下:
-(P1*log2 P1+P2*log2 P2+...P16*log2 P16)---->计算NBA季后赛总冠军的夺冠球队的信息熵值,含义是每一个球队的夺冠概率乘以,以2为底这个队夺冠的对数。P1、P2...PN表示哪一支球队的夺冠概率,假设每一个球队夺冠的概率都相等的话,那么这里算出的信息熵值就是4,当然这种情况是不太可能存在的,因为每一个球队的实力不一样嘛。

 

4、信息熵的值和不确定性的关系?

变量的不确定越大,熵的值也就越大

 

5、信息获取量是什么?

Gain(A)=Info(D)-Info_A(D) ---->A属性的信息获取量的值就等于,【不按任何属性进行分类的时候的信息量】加上【有按A这个属性进行分类的时候的信息量】(注意这里信息量的符号是负号,所以说“加上”)。


在决策树算法中,我们如何确定哪个属性应该先选择出来,哪个属性应该后选择出来当做树的节点
信息获取量大的优先选:比较大小,年龄的信息获取量是最大的,所以选择年龄作为第一个根节点。

 

6、决策树算法为什么需要剪枝?

训练集上表现好,测试集上表现差(过度拟合):当树的深度太大时,设计的算法在训练集上的表现会比较好,但是在测试集上的表现却会很一般,这时我们就要对树进行一定的裁剪

 

7、决策树的优缺点是什么?

直观,便于理解,小规模数据集有效 :决策树的优点
处理连续变量不好;类别较多时,错误增加的比较快;可规模性一般:决策树的缺点

 

 

 

二、机器学习入门之决策树算法

参考:机器学习入门之决策树算法
https://www.cnblogs.com/getMyCodes/p/7259422.html

1、什么是决策树(Decision Tree)    
决策树是一个类似于流程图的树结构,其中每一个树节点表示一个属性上的测试,每一个分支代表一个属性的输出,每一个树叶节点代 表一个类或者类的分布,树的最顶层是树的根节点。
举一个例子。小明同学想根据天气情况是否享受游泳运动:
这里包含了6个属性,一条样例即为一个实例,待学习的概念为“是否享受运动”,学习目标函数:f:X->Y。
根据上面的表中实例,我们可以试着用一个树结构的流程图来表示小明根据那6个属性决定是否享受运动:
从上面这个树状图中,我们可以看到,总共的实例有14个(出去运动的实例有9个,不运动的实例有5个),从树顶往下看,首先看到菱形的选项,意思是天气如何?然后分出了三个分支——晴天,阴天,雨天。实例中是天气属性为晴天,并决定要去运动的有2个,不去运动的有3个;天气属性为阴天,并决定去运动的有4个,不运动的有0个;天气属性为雨天,并决定去运动的有3个,不运动的有2个。从图中我们可以看到,当标记中的正例或者反例为0个时,树就不继续往下扩展了(比如天气属性为阴天的时候,不去运动的实例为0个)。假如正例或者反例都不为0时,那么就要根据属性继续往下扩展树。
决策树是机器学习中分类方法中的一个重要算法。
2、如何构造一个决策树算法
(1)信息熵
信息是一种抽象的概念,那么如何对信息进行一个量化的操作呢?1948年,香农提出了“信息熵”的概念。一条信息的信息量大小和它的不确定性有直接的关系,要搞清楚一件非常不确定的事情,或者说我们对一件事情一无所知,就需要了解大量的信息,信息量的度量就等于不确定性的多少。
举个例子,NBA总决赛的夺冠球队,假设你对NBA球队一无所知,你需要猜多少次?(假设每个球队的夺冠几率都是一样的)这里我们可以给进入季后赛的NBA球队进行编号(NBA季后赛会选出16支球队),然后使用二分法进行猜测(猜测冠军队伍在1-8号球队之间,是的话,在进行二分;不是的话就在9-16号球队之间),这样我们要猜测的次数最多是4次(2^4=16嘛)。
信息熵使用比特(bit)来衡量信息的多少,计算公式如下:
-(P1*log2 P1+P2*log2 P2+...P16*log2 P16)---->计算NBA季后赛总冠军的夺冠球队的信息熵值,含义是每一个球队的夺冠概率乘以,以2为底这个队夺冠的对数。P1、P2...PN表示哪一支球队的夺冠概率,假设每一个球队夺冠的概率都相等的话,那么这里算出的信息熵值就是4,当然这种情况是不太可能存在的,因为每一个球队的实力不一样嘛。
变量的不确定越大,熵的值也就越大。
(2)决策树归纳算法(ID3)
这个算法是1970-1980年,由J.Ross.Quinlan发明的。
在决策树算法中,比较重要的一点是我们如何确定哪个属性应该先选择出来,哪个属性应该后选择出来当做树的节点。这里就涉及到了一个新的概念,叫做信息获取量,公式如下:
Gain(A)=Info(D)-Info_A(D) ---->A属性的信息获取量的值就等于,不按任何属性进行分类的时候的信息量加上有按A这个属性进行分类的时候的信息量(注意这里信息量的符号是负号,所以说“加上”)。
以是否购买电脑的案例为例子,给出了14个实例,如下图所示:

 

不按任何属性进行分类的情况下,计算信息获取量Info(D):
以年龄属性进行分类的情况下,计算信息获取量:
所以,Gain(age)=0.940-0.694=0.246 bits
同理,我们可以算出Gain(income) = 0.029, Gain(student) = 0.151, Gain(credit_rating)=0.048。比较大小,年龄的信息获取量是最大的,所以选择年龄作为第一个根节点。再次同理,后面的节点选择也是按照这样的计算方法来决定以哪个属性作为节点。
(3)结束条件
当我们使用递归的方法来创建决策树时,什么时候停止节点的创建很关键。综上,停止节点创建的条件有以下几点:
a、给定节点的所有样本属性都属于同一种标记的时候,比如(2)中的例子,以年龄为属性创建的节点下,有三个分支:                            senior,youth、middle_age。其中middle_age的所有实例的标记都是yes,也就是说中年人都会买电脑,这种情况下,这个节点就可以设置成树叶节点了。
b、当没有剩余属性用来进一步划分样本时,就停止节点的创建,采用多数表决。
c、分枝
3、其它算法
C4.5、CART算法。这几个算法都是贪心算法,自上而下,只是选择属性的度量方法不同。
4、树剪枝叶 (避免overfitting)
当树的深度太大时,设计的算法在训练集上的表现会比较好,但是在测试集上的表现却会很一般,这时我们就要对树进行一定的裁剪:
(1)先剪枝
当分到一定程度,就不向下增长树了。
(2)后剪枝
把树完全建好后,根据类的纯度来进行树的裁剪。
5. 决策树的优点:
直观,便于理解,小规模数据集有效     
6. 决策树的缺点:
处理连续变量不好;类别较多时,错误增加的比较快;可规模性一般。

转载于:https://www.cnblogs.com/Renyi-Fan/p/10977436.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统目录结构及主要内容

为什么80%的码农都做不了架构师?>>> 文件结构 : /:根目录,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。 /bin: bin 就是二进制(b…

学习《深度学习入门:基于Python的理论与实现》高清中文版PDF+源代码

入门神经网络深度学习,推荐学习《深度学习入门:基于Python的理论与实现》,这本书不来虚的,一上来就是手把手教你一步步搭建出一个神经网络,还能把每一步的出处讲明白。理解神经网络,很容易就能入门。 深度学…

学习《PythonWeb开发实战(董伟明)》中文PDF+源代码

python可以用了进行数据分析,也可以进行Web开发,一般会使用django或者flask等进行开发。 国内介绍python web的书有写的不错的,推荐看看《PythonWeb开发实战》 他的定位是进阶读者,介绍了Python web的生态,有些包介绍得…

周鸿祎:在360新员工入职培训上的讲话

这个是周鸿祎给入司360新员工的一段话,不但适合360,也适合所有的公司员工。特此分享。我想给新入职的同事讲一讲我的期望,再提几个建议。我这个人喜欢说真话,不喜欢说漂亮话,因为漂亮话没用。但说真话,大家…

使用面向对象技术创建高级 Web 应用程序

作者: 出处: 使用面向对象技术创建高级 Web 应用程序 来源:开源中国社区 作者:oschina最近,我面试了一位具有5年Web应用开发经验的软件开发人员。她有4年半的JavaScript编程经验,自认为自己具有非常优秀的JavaScript技能&#xff…

DevExpress控件使用经验总结

DevExpress控件使用经验总结 DevExpress是一个比较有名的界面控件套件,提供了一系列的界面控件套件的DotNet界面控件。本文主要介绍我在使用DevExpress控件过程中,遇到或者发现的一些问题解决方案,或者也可以所示一些小的经验总结。总体来讲&…

第二阶段团队绩效评分

第二阶段评分结果: 转载于:https://www.cnblogs.com/xczd/p/11068692.html

随堂小测冲刺.第19天

我们小组的logo出来的,太酷了,不符合我的审美,本人表示无法接受。。。 还要谢谢李泽宇的女盆友,O(∩_∩)O哈哈~ 转载于:https://www.cnblogs.com/daisy99lijing/p/11024465.html

MSBuild编译扩展

新增一个C#工程&#xff0c;用记事本打开工程文件&#xff08;.csproj结尾&#xff09;&#xff0c;滚动条拉到最后&#xff0c;大家可以看到一段如下的代码&#xff0c;其中<Target Name"BeforeBuild">和<Target Name"AfterBuild">大家根据名…

修改2440里面的FriendlyARM

修改2440里面的FriendlyARM 在/etc/init.d文件夹里面有一个rcS文件&#xff0c;修改/bin/hostname FriendlyARM中的FriendlyARM即可 比如修改为/bin/hostname Solar posted on 2011-12-07 17:22 Neddy11 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/Neddy…

vs2008 下编译jrtplib-3.9.0成功

网址:http://blog.csdn.net/jid_223/article/details/6858663 jrtplib-3.9.0的编译&#xff0c;终于搞通了。网上搜集了很多资料&#xff0c;自己也调试了很久。 首先&#xff0c;jrtplib-3.9.0是什么不用多说吧&#xff0c;它是一个很牛的老外用C写的一个开源的RTP协议库&…

Eclipse安装VJET报错解决办法

2019独角兽企业重金招聘Python工程师标准>>> Eclipse在安装JS编辑器插件VJET时可能会出现以下错误 Cannot complete the install because one or more required items could not be found. Software being installed: VJET Java Based Dom Kit (Incubation) 0.10.0…

罐头瓶里面的电能表

生活中我们经常见到数字电能表&#xff0c;只不过下面这个是装在罐头里面的电能表&#xff0c; 此想法来自EnterJar&#xff0c;&#xff0c; 怎么样&#xff1f;直接把用电器接上就可以测出电子产品的电能状况&#xff0c;很方便把&#xff01; &#xff0c;原理很简单&#x…

面向对象编程从骨子里就有问题——看看名人大家是如何吐槽面向对象的

2019独角兽企业重金招聘Python工程师标准>>> 本文由“外刊IT评论”网(www.aqee.net)荣誉出品 “面向对象编程是一个极其糟糕的主意&#xff0c;只有硅谷里的人能干出这种事情。” — Edsger Dijkstra(图灵奖获得者) “面向对象设计是用罗马数字做计算。” — Ro…

花了两个星期,我终于把 WSGI 整明白了

在 三百六十行&#xff0c;行行转 IT 的现状下&#xff0c;很多来自各行各业的同学&#xff0c;都选择 Python 这门胶水语言做为踏入互联网大门的第一块敲门砖&#xff0c;在这些人里&#xff0c;又有相当大比例的同学选择了 Web 开发这个方向&#xff08;包括我&#xff09;。…

如何:通过现有代码创建 C++ 项目

http://msdn.microsoft.com/zh-cn/library/b9cy3d6x(vvs.90).aspx 如何&#xff1a;通过现有代码创建 C 项目 Visual Studio 2008其他版本2&#xff08;共 2&#xff09;对本文的评价是有帮助 - 评价此主题更新&#xff1a;2007 年 11 月 可以使用 “从现有代码文件创建新项目”…

ActiveReports 报表应用教程 (8)---交互式报表之动态过滤

用户可以使用葡萄城ActiveReports报表参数 (Parameters)集合把数据提供给报表中的文本框或图表&#xff0c;也可以选择数据的一个子集显示到报表的特定区域&#xff0c;或者是把数据从主报表象子报表传递。用户可以通过三种方式获取数据的值&#xff1a;提示用户输入&#xff1…

Scala实践6

1 if表达式 Scala中if...else..表达式是有返回值的&#xff0c;如果if和else返回值类型不一样&#xff0c;则返回Any类型。scala> val a310 a3: Int 10scala> val a4 | if(a3>20){ | "a3大于a4" | }else{ | "a4大于a3" | } a4: String a4大于a…

项目测试~

这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2 这个作业要求在哪里 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3340 团队名称 求莫名堂 作业的目标 学会进行项目的测试&#xff0c;并通过测试发…

D3D9 effect (hlsl)(转)

转:http://blog.csdn.net/leonwei/article/details/8212800 effect其实整合了shader和render state的控制两大部分内容 9.1 effect文件基本框架 part1 &#xff1a;shader state包括全局变量 shader数据结构定义&#xff0c;shader的实现 part2 &#xff1a;texture and sample…