【机器学习】之决策树---更新中

决策树个人小结

最近一直在看决策树以及集成学习相关的内容,分开来看的话,很多概念当时看都能理解,但是回顾的时候就很懵逼,还是需要整体来总结一下,做一个知识梳理。

什么是决策树

先忘记随机森林,adaboost,gbdt等内容!!!你的心里只有决策树!!!

现在我们只考虑决策树。决策树就向线性回归、逻辑回归以及SVM等基本的机器学习模型一样,是一种可以用来解决分类或回归问题的机器学习模型。

决策树,顾名思义,是一种树形的结构,通过训练生成决策树,可以用它来完成预测。它的内部节点表示一个特征或者属性,叶节点表示一个类。

决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个好的分类过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。决策树的生成是只考虑局部最优的。

决策树不一定是二叉树,也可能是多叉树。

决策树的分类

  1. 从目的来看,可分为:分类树和回归树

分类树用来进行类别预测;回归树用来进行回归预测

  1. 从特征选择的算法来看:ID3、C4.5、CART

前面说过,在决策树的生成过程中,要进行特征空间的划分,通俗来说,就是每一步根据某个特征进行划分。

Q: 那么在每一步中,以什么样的标准来选择特征进行划分呢???
A: 一般有三种标准(最大信息增益,最大信息增益比,基尼指数)

ID3

  • 信息熵

信息熵用来度量样本集合纯度。信息熵越大,表示纯度越高。

ID3决策树是使用最大信息增益来进行特征划分的。对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。

776760-20180928150617129-1606981812.png

  • 信息增益算法

(1) 计算当前结点数据集D的信息熵\(H(D)\)

\(H(D) = -\sum\limits_{k=1}^K \frac{|C_k|}{|D|} \log_2 \frac{|C_k|}{|D|}\)

(2) 计算经特征\(A\)划分后的信息熵\(H(D|A)\)

\(H(D|A) = \sum\limits_{i=1}^n \frac{|D_1|}{|D|}H(D_i)\)

(3) 计算信息增益

\(g(D, A) = H(D) - H(D|A)\)

  • 例题:

776760-20180928150507539-1675457242.png

776760-20180928150702172-1171608423.png

776760-20180928150716263-1314999685.png

  • 小结

ID3决策树使用最大信息增益进行划分。

一般用于分类。是多叉树。

基于离散属性来进行分类。

C4.5

ID3中使用最大信息增益来进行划分节点的选择,但是这样会偏向于选择取值数较多的属性。所以引入“最大信息增益率”来选择最优化分属性。

最大信息增益率计算公式:

\(Gain\_ratio(D, a) = \frac{Gain(D, A)}{IV(a)}\)

其中 \(IV(a) = -\sum\limits_{v=1}^V\frac{|D^v|}{|D|}\log_2\frac{|D_v|}{|D|}\)称为属性\(a\)的固有值。属性\(a\)的可能取值越多(V越大),\(IV(a)\)的取值通常越大。所以从信息增益率来看,希望\(IV(a)\)越小越好,也就是倾向于选择取值数目较少的属性。ps: 可以认为和"信息增益\(Gain(D, A)\)偏向于选取值数目较多的属性"中和了一下...

  • 小结

C4.5是在ID3的基础(偏向于选择取值数目较多的特征)上进行改进。

C4.5并不是直接选择增益率最大的候选划分属性,而是使用一个启发式算法:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

要注意一下\(IV(a)\)的计算,其中\(D^v\)指的是当前数据集中属性\(a\)取值为第\(v\)种值的样本的数目。不要和前面\(H(D)\)中的\(C_k\)混淆了。

C4.5不仅可以处理离散属性,还可以使用"二分法"对离散属性进行处理。(见西瓜书P83)

C4.5是多叉树。

CART

CART(classification and regression tree),分类和回归树。是一种著名的决策树算法,分类和回归任务都能用。CART决策树是二叉树

CART分类树

  • 用于解决分类问题
  • 使用GINI指数(基尼指数)选择最优特征的最优化分点
  • 每次都是二值划分(生成二叉树)

CART回归树

  • 用于解决回归问题
  • 使用“平方误差最小”来选择最优特征的最优划分点
  • 使用当前节点样本的均值作为该节点的预测值

CART分类树
  • 基尼指数

分类问题中,假设有\(K\)个类,样本点属于第\(k\)类的概率的为\(p_k\),则概率分布的基尼指数定义为:\(Gini(p) = \sum\limits_{k=1}^Kp_k(1-p_k) = 1-\sum\limits_{k=1}^Kp_k^2\)

对于给定的样本集合\(D\),其基尼指数为:
\(Gini(D) = 1-\sum\limits_{k=1}^K(\frac{|C_k|}{|D|})^2​\)
其中,\(C_k\)是D中属于第\(k\)类的样本子集,\(K\)是类的个数。

如果样本集合\(D\)根据特征\(A\)是否取某一可能值\(a\)被分割成\(D_1\)\(D_2\)两个部分,则在特征\(A\)的条件下,集合\(D\)的基尼指数定义为
\(Gini(D, A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2)\)

基尼指数\(Gini(D)\)表示集合\(D\)的不确定性,基尼指数\(Gini(D, A)\)表示经\(A=a\)分割后集合\(D\)的不确定性。

基尼指数值越大,样本集合的不确定性越大,这一点与熵相似。

  • CART分类树生成算法

776760-20180928150901726-556975866.png

776760-20180928150916323-219987096.png

算法停止的条件(3选1):

  1. 节点中的降本个数小于预定阈值;
  2. 样本集的基尼指数小于预定与之;
  3. 没有更多的特征可用于划分。
  • CART分类树例题

776760-20180928151006306-165069521.png

CART回归树

CART回归树,根据平方误差最小的原则,来选择最优特征及其划分点。

算法如下:

776760-20180928151044288-299507675.png

决策树的剪枝

决策树是很容易过拟合的,可以通过剪枝来进行缓解。

剪枝策略有2种:预剪枝后剪枝

  • 预剪枝

在决策树生成过程中,对每个节点在划分前进行评估,若当前节点不能带来决策树泛化性能提升,则停止划分并将当前节点标记为叶节点。

  • 后剪枝

先从训练集生成一棵完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的字树替换为叶节点能够提升决策泛化性能,则将该字树替换为叶节点。

思考:如何判断决策树泛化性能是否提升?

答:可以使用留出法,预留一部分数据用作验证集以进行性能评估。

例题可参见西瓜书P81-83

  • 后剪枝和预剪枝的比较

预剪枝:可能减去了很多分支,最后留下的分支少。耗时短。繁泛化能力较弱。

后剪枝:留下的分支较多。欠拟合风险小。泛化能力强。但耗时长。

  • CART剪枝

蓝皮书上5.5划分出了一个独立的小节来讲解CART决策树,其中还有CART剪枝算法。

算法两步走:(1) 从生成算法产生的决策树\(T_0\)底端开始不断剪枝,直到\(T_0\)的根节点,形成一个子树序列\({T_0, T_1, T_2, ..., T_n}\);(2) 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从种选择最优子树。

776760-20180928154315035-181019340.png

具体见蓝皮书P72

简单来说,这种剪枝算法并没有完全脱离训练集,尝试剪掉每一个节点(每次只减一个),在训练集上对每个节点计算一下指标:

\(\alpha = \frac{C(t) - C(T_t)}{|T_t|-1}\)

取最小的\(\alpha\)对应的节点,剪掉它。这时候生成了第一个子树。
重复以上步骤,直到最后只剩下根节点作为最后一个子树。
最后得到了一系列的子树,然后进行第二步:使用验证集对所有子树走一遍,取误差最小的那棵子树,就是我们最终需要的树。

转载于:https://www.cnblogs.com/Elaine-DWL/p/9718707.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值