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

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

一、总结

一句话总结:

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

 

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,一经查实,立即删除!

相关文章

void start_kernel(void)分析 ! \linux-1.0\init\main.c

//启动系统内核 //asmlinkage 为通过堆栈传递参数,默认为通过寄存器传递参数。 asmlinkage void start_kernel(void) { /** Interrupts are still disabled. Do necessary setups, then* enable them*///设置中断向量表set_call_gate(&default_ldt,lcall7);//设…

ASP.NET MVC3源码下载

这个貌似是微软官方的源代码 我收藏了 有时间在来研究研究 下载地址:http://files.cnblogs.com/happyyouandme/mvc3%E6%A1%86%E6%9E%B6%E6%BA%90%E7%A0%81.zip 转载于:https://www.cnblogs.com/happyyouandme/archive/2011/11/22/2259108.html

H3C交换机配置学习随笔

1、交换机配置VLAN vlan 创建VLAN: <h3c>system-view [h3c]vlan 10 删除ID为10的vlan&#xff1a;undo vlan 10 注&#xff1a;任何型号的交换机&#xff0c;都支持4096个vlan vlan ID 从0--4095 vlan 0是保留vlan vlan 1是默认vlan display vlan查看本机有多少个vlan&am…

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

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

select + 线程池 回应服务器(windows)

//为了支持移植 沿用Ptypes的头文件 #define WIN32 1 #include "ptime.h" #include "pinet.h" #include "ptypes.h" #include "pasync.h"#ifdef WIN32 #pragma comment(lib, "ptypes.lib") #pragma comment(lib, "ws2_…

一个程序员的创业失败教训

原文链接 http://blog.jobbole.com/6752/ 这段经历是悲伤的&#xff0c;也是快乐的&#xff0c;毕竟创业是充满激情的&#xff0c;想着自己以后可以不再给人打工了&#xff0c;可以给自己打工了&#xff0c;一个程序员写了很多年的程序之后&#xff0c;能够有机会给自己写程序&…

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

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

每日英文2013.06.19

1.contact /ˈkɑnˌtkt/ v. 接觸;聯繫 (1) Customers may contact any of our location to inquire about car rentals. a.inquire /ɪnˈkwaɪr/ v. to ask someone for information about something b.rental /ˈrent(ə)l/ n. an amount of money that you pay for rentin…

JavaScript 刷新当前页面

1 history.go(0) 2 location.reload() 3 locationlocation 4 location.assign(location) 5 document.execCommand(Refresh) 6 window.navigate(location) 7 location.replace(location) 8 document.URLlocation.href 转载于:https://www.cnblogs.com/SUPERAI/archive/2011/11/2…

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

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

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

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

file_exists函数总是返回false

今天在一台开发服务器上遇到一个奇怪的问题&#xff0c;通过WEB方式访问PHP程序 file_exists() 总是返回false&#xff0c;试了很多文件和目录都不行。开始以为是 safe mode 的问题&#xff0c;但是 php.ini 中的safe_mode 选项值是 Off。接着又在命令行以 root 账号执行测试程…

简单的web框架(python)

1、web框架介绍 Web框架&#xff08;Web framework&#xff09;是一种开发框架&#xff0c;用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式&#xff0c;也为web行为提供了一套通用的方法。web框架已经实现了很多功能&#xff0…

set_bit() 等位函数分析! \linux-1.0\linux\include\asm\bitops.h

//将addr的第nr(nr为0-31)位置值置为1; //nr大于31时&#xff0c;把高27的值做为当前地址的偏移&#xff0c;低5位的值为要置为1的位数 extern __inline__ int set_bit(int nr,int * addr) { int mask, retval; addr nr >> 5; //nr大于31时&…

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

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

[翻译]DirectX 状态( 转)

[翻译]DirectX 状态状态 Direct3D设备使用状态来配置所有的管道处理。采样器状态通过例如定义纹理寻址方式(texture addressing)和过滤模式控制纹理采样器设置。纹理状态设置用于控制纹理如何被组合以及相互之间如何混合的多重纹理混合器。渲染状态控制大多数管道状态。 状态块…

【转载】浅谈React编程思想

React是Facebook推出的面向视图层开发的一个框架&#xff0c;用于解决大型应用&#xff0c;包括如何很好地管理DOM结构&#xff0c;是构建大型&#xff0c;快速Web app的首选方式。 React使用JavaScript来构建用户界面&#xff0c;因此可以说是一个用来构建用户界面的JavaScrip…

a.out.h 头文件分析 \linux-1.0\linux\include\linux\a.out.h

#ifndef __A_OUT_GNU_H__ #define __A_OUT_GNU_H__#define __GNU_EXEC_MACROS__#ifndef __STRUCT_EXEC_OVERRIDE__//定义执行文件结构 struct exec {unsigned long a_info; /* Use macros N_MAGIC, etc for access */unsigned a_text; /* length of text, in bytes */unsigne…

[TypeScript] vs code TSLint常见错误解决方案

TSLint是一个Typescrip{过滤}t验证工具&#xff0c;用于检测代码。 TSLint: comment must start with a space (comment-format)注释必须从一个空格开始(comment-format)也就是说//之后必须跟随一个空格。“Missing semicolon.” : “缺少分号.”,“Use the function form of \…

ios开发笔记之 线程间通信

performSelectorOnMainThread:selector:waitUntilDone: 用于线程间通信 使两个线程同步或者时异步执行。 block阻塞转载于:https://www.cnblogs.com/vincent-lu/archive/2011/11/29/2267974.html