决策树个人小结
最近一直在看决策树以及集成学习相关的内容,分开来看的话,很多概念当时看都能理解,但是回顾的时候就很懵逼,还是需要整体来总结一下,做一个知识梳理。
什么是决策树
先忘记随机森林,adaboost,gbdt等内容!!!你的心里只有决策树!!!
现在我们只考虑决策树。决策树就向线性回归、逻辑回归以及SVM等基本的机器学习模型一样,是一种可以用来解决分类或回归问题的机器学习模型。
决策树,顾名思义,是一种树形的结构,通过训练生成决策树,可以用它来完成预测。它的内部节点表示一个特征或者属性,叶节点表示一个类。
决策树学习的算法通常是一个递归地选择最优特征,并根据该特征对训练数据进行分割,使得对各个子数据集有一个好的分类过程。这一过程对应着对特征空间的划分,也对应着决策树的构建。决策树的生成是只考虑局部最优的。
决策树不一定是二叉树,也可能是多叉树。
决策树的分类
- 从目的来看,可分为:分类树和回归树
分类树用来进行类别预测;回归树用来进行回归预测
- 从特征选择的算法来看:ID3、C4.5、CART
前面说过,在决策树的生成过程中,要进行特征空间的划分,通俗来说,就是每一步根据某个特征进行划分。
Q: 那么在每一步中,以什么样的标准来选择特征进行划分呢???
A: 一般有三种标准(最大信息增益,最大信息增益比,基尼指数)
ID3
- 信息熵
信息熵用来度量样本集合纯度。信息熵越大,表示纯度越高。
ID3决策树是使用最大信息增益来进行特征划分的。对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
- 信息增益算法:
(1) 计算当前结点数据集D的信息熵(H(D))
(H(D) = -sumlimits_{k=1}^K frac{|C_k|}{|D|} log_2 frac{|C_k|}{|D|})
(2) 计算经特征(A)划分后的信息熵(H(D|A))
(H(D|A) = sumlimits_{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) = -sumlimits_{v=1}^Vfrac{|D^v|}{|D|}log_2frac{|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) = sumlimits_{k=1}^Kp_k(1-p_k) = 1-sumlimits_{k=1}^Kp_k^2)
对于给定的样本集合(D),其基尼指数为:
(Gini(D) = 1-sumlimits_{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):
- 节点中的降本个数小于预定阈值;
- 样本集的基尼指数小于预定与之;
- 没有更多的特征可用于划分。
- 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) 通过交叉验证法在独立的验证数据集上对子树序列进行测试,从种选择最优子树。
具体见蓝皮书P72
简单来说,这种剪枝算法并没有完全脱离训练集,尝试剪掉每一个节点(每次只减一个),在训练集上对每个节点计算一下指标:
(alpha = frac{C(t) - C(T_t)}{|T_t|-1})
取最小的(alpha)对应的节点,剪掉它。这时候生成了第一个子树。
重复以上步骤,直到最后只剩下根节点作为最后一个子树。
最后得到了一系列的子树,然后进行第二步:使用验证集对所有子树走一遍,取误差最小的那棵子树,就是我们最终需要的树。