决策树原理及其应用[通俗易懂]

决策树原理及其应用[通俗易懂]决策树原理及其应用决策树的原理我们先构造一颗简单的决策树来玩一玩。举一个不恰当的例子:小明过年回家,老妈催着他结婚,帮着张罗相亲对象。有三个女孩的资料(简称A、B、C)。关于A:小明问:”身材好吗?”,妈妈说:“好!”,小明说:“见一面”关于B:小明问:”身材好吗?”,妈妈说:“不好!”,小明又问:“漂亮吗?”,妈妈说:“漂亮!”,小明说:“见一面”关于C:

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

决策树原理及其应用

##决策树的原理
我们先构造一颗简单的决策树来玩一玩。举一个不恰当的例子:小明过年回家,老妈催着他结婚,帮着张罗相亲对象。有三个女孩的资料(简称A、B、C)。
关于A:
小明问:“身材好吗?”,妈妈说:“好!”,小明说:“见一面”
关于B:
小明问:“身材好吗?” , 妈妈说:“不好!”,小明又问:“漂亮吗?”,
妈妈说:“漂亮!”,小明说:“见一面”
关于C:
小明问:“身材好吗?” , 妈妈说:“不好!”,小明又问:“漂亮吗?”,妈妈说:“不漂亮”,小明又问:“会写代码吗?”,妈妈说:“会”,小明说:“见一面”。

我们构造出小明相亲的决策树如下:
相亲决策树
在这里 优先级顺序是 身材 > 颜值 > 编程能力。这个时候就会疑惑,这个“优先级”是怎么决定的呢?在决定是否去相亲的因素有很多,工作地点的距离(我编不出来了)etc…,我们是否要每一个因素都去考虑?如果你有这方面的疑惑,恭喜你!如果在1984,提出CART算法的人可能不是Breiman了。这三个问题涉及到决策树中的特征选择,决策树的生成,决策树的修剪,一堆扯淡的引入到此为止。

下面是某相亲网上约会成功的数据:

ID 年龄 工作 有房 颜值 类别
1 青年 一般
2 青年
3 青年
4 青年 一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

以上数据改编自 李航《统计学习方法》

  1. 特征选择
    特征选择是根据所给数据来决定用哪个特征来对数据进行分类,当然是按特征的分类能力强弱来对数据进行分类,下面我们来讲一讲如何评判特征的分类能力。
    先看一看是否有房这一栏和类别的关系,在有房的情况下,类别为是的一共有6组数据;在没有房的情况下,类别为否的一共有6组数据,是否有房和是否约会成功一致的一共有12组数据。再看一看是否有工作和是否约会成功一致的数据,发现一共有11组数据。“12>11”感觉上“是否有房子”比“是否有工作”的分类能力要强一些,到底是不是这样呢?下面我们用精确的数学语言来解释一下。
    我们这里引入三个信息论的概念条件熵信息增益信息增益比
    表示随机变量不确定性的度量。设 X X X是一个取有限个值的随机变量,其分布为: P ( X = x i ) = p i , i = 1 , 2 , . . . , n P(X = x_i) = p_i , i=1,2,…,n P(X=xi)=pi,i=1,2,...,n
    则随机变量 X X X的熵定义为:
    H ( X ) = − ∑ i = 1 n p i l o g p i H(X)=-\sum_{i=1}^{n}p_ilogp_i H(X)=i=1npilogpi

例子: 随机变量是年龄
$P(x_1= 青年) = \frac{5}{15}; P(x_2 = 中年) = \frac{5}{15};P(x_3 = 老年) = \frac{5}{15} $
H ( X ) = − ( 5 15 l o g 5 15 + 5 15 l o g 5 15 + 5 15 l o g 5 15 ) H(X) = -(\frac{5}{15}log\frac{5}{15}+\frac{5}{15}log\frac{5}{15}+\frac{5}{15}log\frac{5}{15}) H(X)=(155log155+155log155+155log155)

**条件熵 ** H ( Y ∣ X ) H(Y|X) H(YX)表示在已知随机变量 X X X的条件下随机变量 Y Y Y的不确定性,定义为:
H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X) = \sum_{i=1}^np_i H(Y|X=x_i) H(YX)=i=1npiH(YX=xi) ,这里$ p_i=P(X = x_i) , i=1,2,…,n$

例子:随机变量 Y Y Y为类别,随机变量 X X X为年龄

H ( Y ∣ X ) = 5 15 H ( Y ∣ x 1 = 青 年 ) + 5 15 H ( Y ∣ x 2 = 中 年 ) + 5 15 H ( Y ∣ x 3 = 老 年 ) H(Y|X)=\frac{5}{15}H(Y|x_1=青年)+\frac{5}{15}H(Y|x_2=中年)+\frac{5}{15}H(Y|x_3=老年) H(YX)=155H(Yx1=)+155H(Yx2=)+155H(Yx3=)

H ( Y ∣ x 1 = 青 年 ) = − ∑ i = 1 n p ( x = 青 年 , y i ) l o g p ( y i ∣ x = 青 年 ) H(Y|x_1=青年) =- \sum _{i=1}^{n}p(x=青年,y_i)logp(y_i|x=青年) H(Yx1=)=i=1np(x=yi)logp(yix=)
H ( Y ∣ x 1 = 中 年 ) = − ∑ i = 1 n p ( x = 中 年 , y i ) l o g p ( y i ∣ x = 中 年 ) H(Y|x_1=中年) =- \sum _{i=1}^{n}p(x=中年,y_i)logp(y_i|x=中年) H(Yx1=)=i=1np(x=yi)logp(yix=)
H ( Y ∣ x 1 = 老 年 ) = − ∑ i = 1 n p ( x = 老 年 , y i ) l o g p ( y i ∣ x = 老 年 ) H(Y|x_1=老年) = -\sum _{i=1}^{n}p(x=老年,y_i)logp(y_i|x=老年) H(Yx1=)=i=1np(x=yi)logp(yix=)

H ( Y ∣ x 1 = 青 年 ) = − 3 5 l o g 3 5 − 2 5 l o g 2 5 H(Y|x_1=青年)=-\frac{3}{5}log\frac{3}{5}-\frac{2}{5}log\frac{2}{5} H(Yx1=)=53log5352log52
H ( Y ∣ x 2 = 中 年 ) = − 2 5 l o g 2 5 − 3 5 l o g 3 5 H(Y|x_2=中年)=-\frac{2}{5}log\frac{2}{5}-\frac{3}{5}log\frac{3}{5} H(Yx2=)=52log5253log53
H ( Y ∣ x 3 = 老 年 ) = − 1 5 l o g 1 5 − 4 5 l o g 4 5 H(Y|x_3=老年)=-\frac{1}{5}log\frac{1}{5}-\frac{4}{5}log\frac{4}{5} H(Yx3=)=51log5154log54

H ( Y ∣ X ) = 5 15 H ( Y ∣ x 1 = 青 年 ) + 5 15 H ( Y ∣ x 2 = 中 年 ) + 5 15 H ( Y ∣ x 3 = 老 年 ) ≈ 0.888 H(Y|X)=\frac{5}{15}H(Y|x_1=青年)+\frac{5}{15}H(Y|x_2=中年)+\frac{5}{15}H(Y|x_3=老年) \approx0.888 H(YX)=155H(Yx1=)+155H(Yx2=)+155H(Yx3=)0.888

信息增益 即 是 g ( Y , X ) = H ( Y ) − H ( Y ∣ X ) , g ( Y , X ) 为 特 征 X 的 信 息 增 益 即是 g(Y,X)=H(Y)-H(Y|X),g(Y,X)为特征X的信息增益 g(Y,X)=H(Y)H(YX),g(Y,X)X
终于讲完了这三个概念,我们一起来算一算 g ( Y , X 1 ) , g ( Y , X 2 ) g(Y,X_1),g(Y,X_2) g(Y,X1),g(Y,X2),其中 X 1 是 特 征 是 否 有 房 子 , X 2 是 特 征 是 否 有 工 作 X_1是特征是否有房子,X_2是特征是否有工作 X1X2
g ( Y , X 1 ) = H ( Y ) − H ( Y ∣ X 1 ) g(Y,X_1)=H(Y)-H(Y|X_1) g(Y,X1)=H(Y)H(YX1)
H ( Y ) = − 9 15 l o g 9 15 − 6 15 l o g 6 15 = 0.971 H(Y)=-\frac{9}{15}log\frac{9}{15}-\frac{6}{15}log\frac{6}{15}=0.971 H(Y)=159log159156log156=0.971
H ( Y ∣ X 1 ) = 10 15 H ( Y ∣ x 1 = 否 ) + 5 15 H ( Y ∣ x 2 = 是 ) H(Y|X_1)=\frac{10}{15}H(Y|x_1=否)+\frac{5}{15}H(Y|x_2=是) H(YX1)=1510H(Yx1=)+155H(Yx2=)
H ( Y ∣ x 1 = 否 ) = − 6 10 l o g 6 10 − 4 10 l o g 4 10 H(Y|x_1=否)=-\frac{6}{10}log\frac{6}{10}-\frac{4}{10}log\frac{4}{10} H(Yx1=)=106log106104log104
H ( Y ∣ x 2 = 是 ) = − 5 5 l o g 5 5 H(Y|x_2=是)=-\frac{5}{5}log\frac{5}{5} H(Yx2=)=55log55
H ( Y ∣ X 1 ) = 10 15 ( − 6 10 l o g 6 10 − 4 10 l o g 4 10 ) + 5 15 × 0 H(Y|X_1)=\frac{10}{15}(-\frac{6}{10}log\frac{6}{10}-\frac{4}{10}log\frac{4}{10})+\frac{5}{15}×0 H(YX1)=1510(106log106104log104)+155×0
g ( Y ∣ X 1 ) = 0.971 − [ 10 15 ( − 6 10 l o g 6 10 − 4 10 l o g 4 10 ) + 5 15 × 0 ] = 0.324 g(Y|X_1)=0.971-[\frac{10}{15}(-\frac{6}{10}log\frac{6}{10}-\frac{4}{10}log\frac{4}{10})+\frac{5}{15}×0]=0.324 g(YX1)=0.971[1510(106log106104log104)+155×0]=0.324

g ( Y , X 2 ) = H ( Y ) − H ( Y ∣ X 2 ) g(Y,X_2)=H(Y)-H(Y|X_2) g(Y,X2)=H(Y)H(YX2)
H ( Y ∣ X 2 ) = 9 15 H ( Y ∣ x 1 = 否 ) + 6 15 H ( Y ∣ x 2 = 是 ) H(Y|X_2)=\frac{9}{15}H(Y|x_1=否)+\frac{6}{15}H(Y|x_2=是) H(YX2)=159H(Yx1=)+156H(Yx2=)
H ( Y ∣ x 1 = 否 ) = − 6 9 l o g 6 9 − 3 9 l o g 3 9 H(Y|x_1=否)=-\frac{6}{9}log\frac{6}{9}-\frac{3}{9}log\frac{3}{9} H(Yx1=)=96log9693log93
H ( Y ∣ x 2 = 是 ) = − 6 6 l o g 6 6 H(Y|x_2=是)=-\frac{6}{6}log\frac{6}{6} H(Yx2=)=66log66
H ( Y ∣ X 2 ) = 9 15 ( − 6 9 l o g 6 9 − 3 9 l o g 3 9 ) + 6 15 ( − 6 6 l o g 6 6 ) H(Y|X_2)=\frac{9}{15}(-\frac{6}{9}log\frac{6}{9}-\frac{3}{9}log\frac{3}{9})+\frac{6}{15}(-\frac{6}{6}log\frac{6}{6}) H(YX2)=159(96log9693log93)+156(66log66)
g ( Y ∣ X 2 ) = 0.971 − [ 9 15 ( − 6 9 l o g 6 9 − 3 9 l o g 3 9 ) + 6 15 ( − 6 6 l o g 6 6 ) ] = 0.420 g(Y|X_2)=0.971-[\frac{9}{15}(-\frac{6}{9}log\frac{6}{9}-\frac{3}{9}log\frac{3}{9})+\frac{6}{15}(-\frac{6}{6}log\frac{6}{6})]=0.420 g(YX2)=0.971[159(96log9693log93)+156(66log66)]=0.420

这里 g ( Y ∣ X 1 ) &lt; g ( Y ∣ X 2 ) g(Y|X_1)&lt;g(Y|X_2) g(YX1)<g(YX2)所以特征“是否有房子”的分类能力强于“是否有工作”,然后按给出的方法计算出每一个特征的增益值,就可以进行下一步啦。
信息增益比
特征 A A A对训练数据集 D D D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集 D D D关于特征 A A A的值的熵 H A ( D ) H_A(D) HA(D)之比,即
g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A)=\frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
其中 H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=-\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi,其中 n 是 特 征 A 取 值 的 个 数 n是特征A取值的个数 nA
2. 决策树生成
sklearn中介绍了三种决策树生成算法ID3、C4.5、C5.0、CART,我们简单介绍一下这几中算法的原理。

输入:训练数据集 D D D,特征集 A A A,阈值 ϵ \epsilon ϵ
输出:决策树T

ID3:
(1)如果数据集中所有实例都属于同一类 C k C_k Ck y i , i = 1 , 2 , . . , n y_i,i=1,2,..,n yi,i=1,2,..,n y i = C k y_i=C_k yi=Ck),则 T T T为单节点树,并将类 C k C_k Ck作为该节点的标记,返回 T T T;
(2)如果 A = ∅ A= \varnothing A=,则 T T T为单节点树,并将 D D D中实例数的最大类 C k C_k Ck作为该节点的标记,返回 T T T;
(3)否则,计算 A A A中各特征对 D D D的信息增益,选择信息增益最大的特征 A g A_g Ag;
(4)如果 A g A_g Ag的信息增益小于阈值 ϵ \epsilon ϵ,则 T T T为单节点树,并将 D D D中实例数的最大类 C k C_k Ck作为该节点的标记,返回 T T T;
(5)否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai D D D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子节点,由节点及其子节点构成树 T T T,返回 T T T.
(6)对第 i i i个子节点,以 D i D_i Di为训练集,以 A − A g A-{A_g} AAg为特征集,递归地调用(1)~(5),得到子树 T i T_i Ti,返回 T i T_i Ti

C4.5
C4.5和ID3类似,只在特征选择上不同,其他都是一样的,ID3用信息增益来选择特征,而C4.5用信息增益比来选择特征。C4.5是ID3的改进,既然是改进,说明信息增益比作为特征选择的比信息增益更合理。大概是因为信息增益趋向于选择取值比较多的特征。具体原因在这里

C5.0
在C4.5的基础上有所改进,它不是开源的。这里说它的运行速度比C4.5更快,所需要的内存比C4.5更小,和C4.5很相似,不过C5.0会建立更多的深度较小的决策树,在同样的数据集下的准确率和C4.5类似,等等。

CART
建议先看完决策树剪枝,在来看CART算法

3.决策树剪枝
不想写了。。。。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/196133.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • pycharm-professional-2021.11.3 激活(注册激活)

    (pycharm-professional-2021.11.3 激活)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • Hibernate Criterion

    Hibernate Criterion

  • 领英群发消息技巧[通俗易懂]

    领英群发消息技巧[通俗易懂]使用Linkedin的人都有群发消息的需求,但Linkedin平台并没有提供群发功能。如果要群发的话,只能把所有好友拉到一个群里再发送。这样,所有的好友都可以在里面聊天,无法做到单独显示的效果。领英精灵注册试用网址:http://linkedinjl.com/r?i=SPSAMR那有没有一种方法,可以实现快速群发并单独显示的效果呢?答案是肯定的,下面就教大家一种方法,实现快速群发消息并单独显示的效果。操作步骤:1.首先需要准备好领英精灵工具,安装后,右侧会有工具操作界面2.再.

  • 端口详解

    端口详解

  • .htaccess文件中RewriteCond详解

    .htaccess文件中RewriteCond详解Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。复制代码代码如下:…

  • 常见外包公司汇总[通俗易懂]

    常见外包公司汇总[通俗易懂]1.博朗软件Bleum(上海)2.中软国际(北京)3.东软集团Neusoft(沈阳)4.博彦科技BeyondSoft(北京)5.中电金信(北京)6.法本信息(深圳)7.浙大网新Insigma(杭州)8.奥博杰天Objectiva(北京)9.浪潮Inspur(济南)10.软通动力iSoftStone(北京)11.福瑞博德Freeborders(深圳)12.信必优Symbio(北京)13.大展科技Achievo(深圳)14.恒生电子hundsun(杭州)15.日电卓越软

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号