机器学习-决策树

一、决策树

  • 决策树是一种树形结构,其中每个内部节点表示一个属性上的测试,每个分支代表一个测试输出,每个叶子节点代表一种类别。
  • 从根节点开始一步步走到叶子节点。
  • 所有的数据最终都会落到叶子节点,既可以做分类也可以做回归
    在这里插入图片描述

将一家人看做为是一份数据,输入到决策树中,首先会进行年龄的判断是否大于15岁(人为主观认定的数值),如果大于15,就判断为有较小可能性玩游戏,小于或等于15岁则认为有较大的可能性玩游戏,然后再进行下一步细分,判断性别,如果是男生则认为有较大的可能性玩游戏,如果为女生则为较小的可能性喜欢玩游戏。

这就是一个简单的决策树的过程,有点像最初python学习时的进行if-else成绩好坏等级分类的程序。但是,决策树这里的分类的先后顺序通常是不可以调换的,比如这里为什么要把年龄的判断放在性别判断前边,就是因为希望第一次决策判断就能实现大部分数据的筛选,尽可能的都做对了,然后再进行下一步,进而实现对上一步存在偏差数据的微调,因此根节点的重要性可想而知,其要实现对数据样本大致的判断,筛选出较为精确的数据。可以对比篮球比赛,当然是先上首发阵容,其次在考虑替补,针对于短板的地方进行补充。

那么问题就来了?(根节点如何选择)—— 凭什么先按照年龄进行划分,或者说凭什么认为他们是首发吗?

判断的依据是啥???接下来呢?次根节点又如何进行切分呢???

决策树的训练和测试

  • 训练阶段:从给定的训练集构造出来一棵树(从节点开始选择特征,如何进行特征切分)
  • 测试阶段:根据构造出来的数模型从上到下走一编就行
  • 一旦构造好了决策树,那么分类或者预测任务就很简单了,只需要一遍就可以了,那么难点就在于如何构造出来一棵树?

二、熵的作用

目标:通过一种衡量标准,来计算通过不同特征进行分支选择后的分类情况,找出来最好的那个当成根节点,以此类推。

衡量标准-熵:熵是表示随机变量不确定性的度量(解释:说人话就是物体内部的混乱程度,比如义务杂货市场里面什么都有那肯定混乱呀,专卖店里面只卖一个牌子的那就稳定多啦)

举个例子:如下,A中决策分类完成后一侧是有三个三角二个圆,另一侧是两个三角一个圆,而B中决策分类后是一侧是三角一侧是圆,显然是B方案的决策判断更靠谱一些,用熵进行解释就是熵值越小(混乱程度越低),决策的效果越好
在这里插入图片描述
公式:
在这里插入图片描述
这里以上面的例子进行公式解读,都只单看左侧的分类结果,对于B中的,只有三角,也就是一个分类结果, p i p_i pi
即为取值概率,这里就为100%,再结合一下log函数,其值在[0,1]之间是递增的,那么前面加上一个负号就是递减,因此这个B右侧分类结果带入计算公式值就是0,而0又是这个公式值中的最小值。再看A中左侧的分类结果,由于存在着两种情况,因此公式中就出现了累加,分别计算两种结果的熵值情况,最后汇总,其值必然是大于0的,故A中的类别较多,熵值也就大了不少,B中的类别较为稳定(那么在分类任务重我们希望通过节点分支后数据类别的熵值大还是小呢?)

其实都不是,在分类之前数据有一个熵值,在采用决策树之后也会有熵值, 还拿A举例,最初的状态五个三角三个圆(对应一个熵值1),经过决策之后形成左侧三个三角两个圆(对应熵值2)和右侧的两个三角一个圆(对应熵值3),如果最后的熵值2+熵值3 < 熵值1,那么就可以判定这次分类较好,比原来有进步,也就是通过对比熵值(不确定性)减少的程度判断此次决策判断的好坏,不是只看分类后熵值的大小,而是要看决策前后熵值变化的情况。

三、决策树构造实例

这里使用官网提供的示例数据进行讲解,数据为14天打球的情况(实际的情况);特征为4种环境变化( x i x_i xi );最后的目标是希望构建决策树实现最后是否打球的预测(yes|no),数据如下

x 1 x_1 x1: outlook
x2 : temperature
x3 : humidity
x4: windy

play: yes|no

在这里插入图片描述
由数据可知共有4种特征,因此在进行决策树构建的时候根节点的选择就有4种情况,如下。那么就回到最初的问题上面了,到底哪个作为根节点呢?是否4种划分方式均可以呢?因此 信息增益 就要正式的出场露面了

在这里插入图片描述
由于是要判断决策前后的熵的变化,首先确定一下在历史数据中(14天)有9天打球,5天不打球,所以此时的熵应为(一般log函数的底取2,要求计算的时候统一底数即可):
在这里插入图片描述
先从第一个特征下手,计算决策树分类后的熵值的变化,还是使用公式进行计算
在这里插入图片描述
注意:直接将计算得到的结果和上面计算出初始的结果相比较吗? (当然不是,outlook取到sunny,overcast,rainy是有不同的概率的,因此最后的计算结果要考虑这个情况)

最终的熵值计算就为:14天中5天sunny,4天overcast,5天rainy
在这里插入图片描述
信息增益:系统的熵值就由原始的0.940下降到了0.693,增益为
gain(outlook)=0.247

依次类推,可以分别求出剩下三种特征分类的信息增益如下:
$
gain(temperature)=0.029,gain(humidity)=0.152,gain(windy)=0.048$
最后我们选择最大的那个就可以啦,相当于是遍历了一遍特征,找出来了根节点(老大),然后在其余的中继续通过信息增益找子节点(老二)…,最终整个决策树就构建完成了!

四、信息增益率和gini系数

之前使用信息增益进行判断根节点有没有什么问题,或者是这种方法是不是存在bug,有些问题是解决不了的???答案是当然有的,比如还是使用上面的14个人打球的数据,这里添加一个特征为打球的次数ID,分别为1,2,3,…,12,13,14,那么如果按照此特征进行决策判断,如下
在这里插入图片描述
由此特征进行决策判断后的结果可以发现均为单个的分支,计算熵值的结果也就为0,这样分类的结果信息增益是最大的,说明这个特征是非常有用的,如果还是按照信息增益来进行评判,树模型就势必会按照ID进行根节点的选择,而实际上按照这个方式进行决策判断并不可行,只看每次打球的ID并不能说这一天是不是会打球。

从上面的示例中可以发现信息增益无法解决这种特征分类(类似ID)后结果特别特别多的情况,故就发展了另外的决策树算法叫做 信息增益率 和 gini系数

这里介绍一下构建决策树中使用的算法(至于前面的英文称呼,知道是一种指代关系就可以了,比如说的信息增益也可以使用ID3进行表示):
在这里插入图片描述
gini系数计算公式和熵的衡量标准类似,只是计算方式不相同,这里值越小代表这决策分类的效果越好,比如当p的累计值取1了,那么最后结果就为0,当p取值较小时,经过平方后就更小了,由此计算的结果也就趋近1了

信息增益率 是对根据熵值进行判定方式的改进,而 gini系数 则是另起炉灶,有着自己的计算方式

五、决策树剪枝策略

为什么剪枝:决策树过拟合风险很大,理论上可以完全分得开数据
剪枝策略:预剪枝,后剪枝
预剪枝:边建立决策树边进行剪枝的操作
后剪枝:当建立完决策树后来进行剪枝操作

预剪枝方式:限制深度(比如指定到某一具体数值后不再进行分裂)、叶子节点个数、叶子节点样本数、信息增益量等
后剪枝方式:通过一定的衡量标准, C α ( T ) = C ( T ) + α ∗ ∣ T l e a f ∣ ​ C α ( T ) = C ( T ) + α ∗ ∣ T_{ l e a f} | ​ Cα(T)=C(T)+αTleaf,叶子节点越多,损失越大

后剪枝的工作流程,比如选择如下的节点,进行判断其不分裂行不行? 不分裂的条件就是分裂之后的结果比分裂之前效果还要差劲。

在这里插入图片描述

按照上面的计算公式,分裂之前
C α ( T ) = 0.4444 ∗ 6 + 1 ∗ α C_{\alpha}(T) =0.4444*6 + 1* \alpha Cα(T)=0.44446+1α
分裂之后就是两个叶子节点之和相加
C α ( T ) = 3 ∗ 0 + 1 ∗ α + 0.4444 ∗ 3 + 1 ∗ α = 0.444 ∗ 3 + 2 ∗ α C_{\alpha}(T) =3*0+1* \alpha + 0.4444*3+1* \alpha=0.444*3 + 2* \alpha Cα(T)=30+1α+0.44443+1α=0.4443+2α
最后就变成了比较这两次取得的数值,值越大代表着损失越大,也就越不好,取值的大小是取决于我们给定的α值,α值给出的越大,模型越会控制过拟合,值较小的时候是我们希望模型取得较好的结果,过不过拟合看的不是很重要

六、分类、回归任务

树模型做分类任务,某个叶子节点中的类型是由什么所决定的?还使用最初的图示为例,树模型是属于有监督的算法,数据在输入之前就已经有标签的,比如下面“-”代表不玩游戏。“+”代表玩游戏,那么右侧红框的分类结果中有三个“-”的数据,得到数据的众数都是分类为“-”,所以之后如果有数据再分到此类别中,就都会被标记为“-”,故分类任务是有叶子节点中数据的众数决定的,少数服从多数,加入某叶子节点中有10个“-”,2个“+”,则认定该叶子节点分类为“-”
在这里插入图片描述
回归任务和分类任务的做法几乎是一样的,但是评估的方式是不一样的,回归是采用方差进行衡量的,比如将上面的五个人按照年龄进行判断,是否为老年人,根究A方案,显然其方差要原小于B方案中的方差,也就是人为A方案中划分方式更为合理。那么既然是回归问题也就避免不了数据取值,叶子节点中的数值计算的方式就为各个数据的平均数,那么接下来使用树模型进行预测的时候,如果数据落入该叶子节点中数值即为此前计算的平均值,假如是A方案中的右侧叶子节点,预测的结果数值就为(30+15+12) /3 =19

在这里插入图片描述
参考:https://blog.csdn.net/lys_828/article/details/108669442

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
决策树算法是机器学习中常用的一种算法,它通过构建一棵树形结构来进行分类或回归任务。决策树算法有多种不同的变体,其中包括ID3算法、C4.5算法和基本决策树算法。 ID3算法是最早提出的一种决策树算法,它的核心思想是通过计算信息增益来选择最佳的特征进行节点的划分。具体步骤是:从根节点开始,计算每个特征的信息增益,选择信息增益最大的特征作为当前节点的划分特征,然后根据该特征的不同取值建立子节点,再对子节点递归地应用以上步骤,直到所有的特征信息增益很小或没有特征可选为止。 C4.5算法是对ID3算法的改进,它引入了信息增益率(比)来选择特征,解决了ID3算法对于取值较多的特征有偏好的问题。与ID3算法相似,C4.5算法也使用递归的方式构建决策树,但在选择划分特征时,使用信息增益率作为选择的依据。 基本决策树算法是决策树算法的一种简化版,它没有引入信息增益或信息增益率,而是通过计算基尼指数来选择最佳的划分特征。基尼指数衡量了一个特征的不纯度,选择基尼指数最小的特征进行划分。基本决策树算法相对于ID3算法和C4.5算法更简单直观,但在某些情况下可能会有一定的性能损失。 总的来说,决策树算法通过构建一棵树形结构来进行分类或回归任务,其中ID3算法、C4.5算法和基本决策树算法是其中的三种常见变体。每种算法都有其特点和优缺点,选择适合具体问题的算法可以提高算法的性能和准确性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [机器学习算法(3)之决策树算法](https://blog.csdn.net/qq_20412595/article/details/82048795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tc.小浩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值