【机器学习系列总结】之决策树---更新中

目录

决策树个人小结

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

什么是决策树

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

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

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

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

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

决策树的分类

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

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

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

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

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

ID3

  • 信息熵

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

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

  • 信息增益算法

(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)\)

  • 例题:

  • 小结

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分类树生成算法

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

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

CART回归树

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

算法如下:

决策树的剪枝

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

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

  • 预剪枝

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

  • 后剪枝

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

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

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

例题可参见西瓜书P81-83

  • 后剪枝和预剪枝的比较

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

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

  • CART剪枝

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

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

(1) 剪枝,形成一个子树序列

剪枝过程中,子树损失函数计算公式为:\(C_{\alpha}(T) = C(T) + \alpha|T|\),其中,\(|T|\)为任意子树,\(C(T)\)是对训练数据的预测误差(如基尼指数),\(|T|\)是子树的叶节点个数,\(\alpha \geq 0\)为参数,\(C_\alpha(T)\)是参数为\(\alpha\)时子树\(T\)的整体损失。参数\(\alpha\)衡量了训练数据的拟合程度与模型的复杂程度。

猜你喜欢

转载自www.cnblogs.com/Elaine-DWL/p/9718707.html