datawhale西瓜书打卡——第四章“决策树”(自我理解)

提示:所有图片都截自周志华《机器学习》

转眼又是打卡的截点,只好金戈铁甲,重新上阵。

首先,无论是前面的线性模型还是这一章的决策树,都是希望从给定数据集中学得一个模型可以用来对新样本做出预测,也就是说,都是一种机器学习方法。

那决策树是什么?有什么特点呢?怎么工作的呢?这种方法会遇到什么问题呢?

回想一下前面的线性模型有什么特点?
嗯,线性模型的特点在于通过它本质上是一种线性变换的函数(广义的线性模型也是在这个线性变换wx+b的基础上进行一层非线性的)

ok,什么是决策树?一种机器学习方法,一种对已有数据集建立决策模型的算法,一种结构为树形的算法。

then,如何决策?决策的关键点在于什么?

首先搞清楚三个关键的数据:数据集中样本数D,数据的数据集中的属性类别,属性值(连续or离散)。
以及决策的目标(无论做什么算法,都是奔着某种目的功能去的):决策树的分支结点所包含的样本尽可能属于同一类别。也即结点的纯度越来越高。
那如何定量地衡量纯度这一概念呢?ok,信息熵来了。
在这里插入图片描述
Pk指类别k的样本占总样本的比例。Pk越大,Ent(D)的值越小,D的纯度越高。(看公式左边的变量,D,可以知道信息熵的主语是D,也就是一群样本才有信息熵!)
那划分的时候应该选择哪个属性作为划分依据呢?
ok,对于某个属性a,它应该有很多不同的可能的取值,把可能的取值(a1,a2…aV)个数记为V。
那如果用这个属性来对数据集D进行划分,就会产生V个分支结点,其中属性值为av的样本为Dv。无论是D还是Dv(都是一群样本),都可以计算它们的信息熵。
你看,当我们利用这个属性a来划分之后,会得到V个分支结点,每个节点有一小群样本Dv,Dv有它的信息熵,自然而然地,我们会想到用∑Ent(Dv)来代表这个属性划分的好坏,因为所有结点的信息熵之和最小不就最好吗?
确实是这样,但还要考虑一下不同结点它样本大小不一样,在最后的信息熵总和中占的权重也应该有所不同,按照这种朴素的想法,就可以得到一个新的名词——信息增益:
在这里插入图片描述
同样地,注意看等式左边括号里的变量,就可以知道信息增益的主人是谁了,没错,样本集D用属性a进行划分的信息增益。
显然,等式右边减号后面的式子的值越小,就代表属性a的划分结果越好,也就是说G越大,属性a的划分越如意。

ok,讲了这么多,只解决了一件事。
可以通过定量求解每个属性a的信息增益来决定选取哪一个属性进行划分。
但这个思路可是一劳永逸哦。你想想,决策树,它不就是一直分叉吗,选哪个属性来开叉已经胸有成竹了,不就可以完成这颗决策树的构造吗。

下面考虑更细致的一些算法准则:
比如说,信息增益准则对于可取值较多的属性有天然的侧重,也就是说有点不公平,为了更加公平,C4.5决策树算法使用“增益率”来进行属性选取。
在这里插入图片描述
其中IV是属性a的固有值,可以抵消一点因为某种属性取值较多而造成的影响。

基尼指数:
在这里插入图片描述
按照前面的优化思路,不断选取信息增益最大的属性作为分支结点,那很可能最后会过拟合,训练集的一些自身特点会被当做所有数据都具有的一般性质,因此可以主动剪掉一些分支来降低过拟合的风险。
也就是说,剪枝处理是为了得到泛化能力更好的“树模型”。
ok,现在目标明确了,那具体怎么剪枝呢?有哪些剪枝方法呢?
剪枝的大方法就两种,一种是在树还没定型之前,先衡量一下某种分支值不值得长出来(也就是预剪枝),怎么衡量值不值得?就是计算一下加这个分支和不加这个分支的模型对验证集的精度,如果增加分支,验证集精度提高,ok,保留,如果没有提高,那么就不要了。
但这样做还是有点图简单,本质上是贪心的,有欠拟合的风险。因为你怎么能因为这个分支暂时降低了精度就抛弃它呢?你怎么知道它会不会带来后续的性能提高呢?就像买基金一样,一开始就亏的基金就一定不能带来正的收益吗?说白了,要目光长远,不能仅仅考虑增加分支前后的正负效果。
因此有了后剪枝,先基于训练集把所有树长好了,再修修改改。
这个修改也是讲究策略的,最后生成的结点最先考虑要不要剪掉。要不要剪掉的判断依据和前面预剪枝一样,都是看操作前后有没有带来验证集精度的提升。

所有图片都截自周志华《机器学习》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值