05决策树与随机森林(学习笔记)

参考:

  1. 袁春老师《大数据机器学习公开课》:https://www.xuetangx.com/course/THU08091001026/10333105
  2. 李航老师《统计学习方法》:https://book.douban.com/subject/33437381/
  3. ppt下载自pythonic生物人,链接: https://pan.baidu.com/s/1H0vHLyqQXNxRFxNVQzpllQ 密码: im0u

文章目录

      • 1. 决策树模型与学习基本概念
      • 2. 信息量和熵
      • 3. 决策树的生成
        • 3.1 决策树ID3算法
      • 4. 决策树的剪枝
        • 4.1 决策树算法的问题
        • 4.2 决策树的剪枝【P65】
        • 4.3 树的剪枝算法
      • 5. CART算法
        • 5.1 CART树的生成
          • 5.1.1 回归树的生成【P71】
          • 5.1.2 分类树的生成
          • 5.1.3 CART分类树的生成算法
        • 5.2 CART的剪枝
          • 5.2.1 剪枝,形成一个子树序列
          • 5.2.2 选取最优子树 T α T_{\alpha} Tα
      • 6. 随机森林
        • 6.1 随机森林简介
        • 6.2 Bootstrapping和Baging采样方法
          • 6.2.1 bootstrap aggregation(自助聚合)
        • 6.3 随机森林

1. 决策树模型与学习基本概念

与决策树相关的重要算法包括:CLS, ID3, C4.5, CART

  • CLS(Concept Learning System) 算法: 没有明确测试属性的先后顺序选择。
  • ID3算法主要针对属性选择问题,是决策树学习算法中最具影响和最为经典的算法。该算法使用信息增益作为选择测试属性。

2. 信息量和熵

shannon 1948年提出的信息论的理论:

  • 熵(entropy):信息量大小的度量,即表示随机变量不确定性的度量。

  • 信息量:事件 a i a_i ai 的信息量 I ( a i ) I(a_i) I(ai)可如下度量
    I ( a i ) = p ( a i ) l o g 2 1 p ( a i ) 其 中 p ( a i ) 表 示 事 件 a i 发 生 的 概 率 。 I(a_i) = p(a_i)log_2 \frac{1}{p(a_i)} \\其中p(a_i)表示事件a_i发生的概率。 I(ai)=p(ai)log2p(ai)1p(ai)ai

  • 假设有n个不相容的事件$ a_1, a_2, a_3, …, a_n $, 他们中有且仅有一个发生,则其平均的信息量(熵)可如下度量:
    I ( a 1 , a 2 , . . . , a n ) = ∑ i = 1 n I ( a i ) = ∑ i = 1 n p ( a i ) l o g 2 1 p ( a i ) I(a_1, a_2, ..., a_n) = \sum_{i=1}^n I(a_i) =\sum_{i=1}^n p(a_i)log_2 \frac{1}{p(a_i)} I(a1,a2,...,an)=i=1nI(ai)=i=1np(ai)log2p(ai)1

  • 熵的理论解释

    设X是一个取有限个值的离散随机变量,其概率分布为:
    P ( X = x i ) = p i , i = 1 , 2 , 3 , . . . , n P(X=x_i) = p_i, \quad i=1,2,3,...,n P(X=xi)=pi,i=1,2,3,...,n
    则随机变量 X X X的熵定义为:$H(X)= - \sum_{i=1}^n p_i\ log\ p_i $.

    对数以2为底或者以e为底(自然对数),这时熵的单位分别称作比特(bit)或纳特(nat)。熵只依赖于X的分布,与X的取值无关。
    H ( p ) = − ∑ i = 1 n p i log ⁡   p i H(p) = - \sum_{i=1}^n p_i \log\ p_i H(p)=i=1npilog pi
    熵越大,随机变量的不确定性越大: 0 ≤ H ( p ) ≤ l o g   n 0 \leq H(p) \leq log \ n 0H(p)log n.

    X X X为0,1分布时, P ( X = 1 ) = p , P ( X = 0 ) = 1 − p , 0 ≤ p ≤ 1 P(X=1)=p, P(X=0)=1-p, \quad 0 \leq p \leq 1 P(X=1)=p,P(X=0)=1p,0p1

    熵为:
    H ( p )   =   − p l o g 2 p − ( 1 − p ) l o g 2 ( 1 − p ) H(p)\ = \ -plog_2p- (1-p)log_2(1-p) H(p) = plog2p(1p)log2(1p)
    熵的图像如下所示,当 p = 0.5 p=0.5 p=0.5时,随机性最大,熵最大。

    05决策树与随机森林(学习笔记)_第1张图片

  • 条件熵的定义

    设有随机变量 ( X , Y ) (X,Y) (X,Y), 其联合概率分布为:
    P ( X = x i , Y = y j )   =   p i j , i = 1 , 2 , 3 , . . . , n ; j = 1 , 2 , 3 , . . . , m P(X=x_i, Y=y_j)\ = \ p_{ij}, \quad i=1,2,3,...,n;j=1,2,3,...,m P(X=xi,Y=yj) = pij,i=1,2,3,...,n;j=1,2,3,...,m
    条件熵H(Y|X): 表示在已知随机变量X的条件下,随机变量Y的不确定性,定义为X给定条件下Y的条件概率分布的熵对X的数学期望:
    H ( Y ∣ X ) = ∑ i = 1 n p i H ( Y ∣ X = x i ) H(Y|X)= \sum_{i=1}^{n}p_iH(Y|X=x_i) H(YX)=i=1npiH(YX=xi)
    当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所相应的熵与条件熵分别称为经验熵(empirical entropy)和经验条件熵(empirical conditional entropy)。

  • 信息增益的定义

    定义5.2 (信息增益): 特征A对训练数据集D的信息增益, g ( D , A ) g(D,A) g(D,A), 定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
    g ( D ∣ A ) = H ( D ) − H ( D ∣ A ) g(D|A) = H(D) - H(D|A) g(DA)=H(D)H(DA)
    (information gain) 表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。

    一般地,熵 H ( Y ) H(Y) H(Y)与条件熵 H ( Y ∣ X ) H(Y|X) H(YX)之差称之为互信息(mutual information)。

    决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

  • 信息增益的计算方法

    05决策树与随机森林(学习笔记)_第2张图片

  • 测试题

    • 通常特征选择的准则是__________________________。【信息增益】

3. 决策树的生成

3.1 决策树ID3算法

  • 在决策树分类中,假设S是训练样本集合,|S|是训练样本数,样本划分为n个不同的类 C 1 , C 2 , . . . , C n C_1, C_2,...,C_n C1,C2,...,Cn,则这些类的大小分别标记为 ∣ C 1 ∣ , ∣ C 2 ∣ , . . . , ∣ C n ∣ |C_1|, |C_2|, ..., |C_n| C1,C2,...,Cn。则任意样本S属于类 C i C_i Ci的概率为:
    p ( S i ) = C i S p(S_i)=\frac{C_i}{S} p(Si)=SCi
    熵为:
    E n t r o p y ( S ∣ A ) = ∑ ∣ S v ∣ ∣ S ∣ ∗ E n t r o p y ( S v ) Entropy(S|A) = \sum \frac{|S_v|}{|S|} * Entropy(S_v) Entropy(SA)=SSvEntropy(Sv)

    • ∑ \sum 是属性 A A A的所有可能值v, S v S_v Sv是属性A有v值的S子集。
    • ∣ S v ∣ |S_v| Sv S v S_v Sv中元素的个数; ∣ S ∣ |S| S是S中元素的个数。
  • 案例:是否购买计算机?【参考课件第40至55页】

  • ID3算法的基本思想:以信息熵为度量,用于决策树节点的属性选择,每次优先选取信息量最多的属性,亦即能使熵值变为最小的属性,以构造一棵熵值下降最快的决策树,到叶子节点处的熵值为0。此时,每个叶子节点对应的实例集中的实例属于同一类。

  • ID3算法的不足(信息增益问题):划分训练数据集的特征时,存在偏向于选取取值较多的特征或属性的问题。使用信息增益比(information gain ratio)可以对这一问题进行矫正。

  • 信息增益比(information gain ratio)的定义

    特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即
    g R ( D , A ) = g ( D , A ) H A ( D ) g_R(D,A) = \frac{g(D,A)}{H_A(D)} gR(D,A)=HA(D)g(D,A)
    其中:n是特征A取值的个数; H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 D i D H_A(D)=- \sum_{i=1}^n \frac{|D_i|}{|D|} log_2\frac{D_i}{D} HA(D)=i=1nDDilog2DDi

  • 理想的决策树有三种

    • 叶子节点数最少;
    • 叶子节点深度最小;
    • 叶子节点数最少且叶子节点深度最小。

    然而,洪家荣等人已经证明要找到这种最优的决策树是NP难题。因此,决策树优化的目的就是找到尽可能趋向于最优的决策树。

4. 决策树的剪枝

4.1 决策树算法的问题

决策树的递归过程中,直到不能继续下去,复杂树;

训练数据分类准确,但测试数据却没那么准确——过拟合

4.2 决策树的剪枝【P65】

剪枝(pruning): 从已生成的树上裁掉一些子节点或叶子结点,并将其根结点或父节点作为新的叶节点,从而简化分类树模型。

  • 可以看做决策树生成的逆向过程:通过极小化决策树整体的损失函数或代价函数来实现

  • 设树T的叶结点个数为|T|, t是树T的叶结点,该叶结点有 N t N_t Nt个样本点,其中k类的样本点有 N t k N_{tk} Ntk个, k = 1 , 2 , . . . , k k=1,2,...,k k=1,2,...,k

  • H t ( T ) H_t(T) Ht(T)为叶结点上的经验熵, α ≥ 0 \alpha \geq 0 α0为参数,损失函数为:
    C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ C_{\alpha}(T) = \sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T| Cα(T)=t=1TNtHt(T)+αT

  • 经验熵为:
    H t ( T ) = − ∑ k N t k N t l o g N t k N t H_t(T) = -\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} Ht(T)=kNtNtklogNtNtk

  • 原式第一项记作:
    C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k N t k N t l o g N t k N t C(T) = \sum_{t=1}{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_k\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t} C(T)=t=1TNtHt(T)=t=1TkNtNtklogNtNtk

  • 则:
    C α ( T ) = C ( T ) + α ∣ T ∣ C_{\alpha}(T) = C(T) + \alpha|T| Cα(T)=C(T)+αT

4.3 树的剪枝算法

05决策树与随机森林(学习笔记)_第3张图片

上述我们介绍的树都是解决分类问题的,有没有一种树既可以解决分类问题,也可以解决回归问题呢?——分类回归树(classification and regression tree, CART).

5. CART算法

分类回归树(classification and regression tree, CART)模型由Breiman等人在1984年提出,是应用最广泛的决策树学习方法。

05决策树与随机森林(学习笔记)_第4张图片

CART算法ID3算法的不同:

  • 二元划分:二叉树不易产生数据碎片,精确度往往也会高于多叉树。
  • CART可以选择多种变量的不纯性度量:
    • 分类目标:Gini指标、Towing、order Towing
    • 连续目标:最小平方残差、最小绝对残差
  • 在剪枝方面:CART用预剪枝或后剪枝对训练集生长的树进行剪枝。
  • 在树的生成上:
    • 如果目标变量是标称的,且具有两个以上的类别,则CART可能考虑将目标分类合并成两个超类别(双化)
    • 如果目标变量是连续的,则CART算法找出一组基于树的回归方程来预测目标变量。

简而言之,CART算法由决策树生成决策树减枝两部分组成。回归树使用平方误差最小化准则,分类树使用Gini index最小化准则。

5.1 CART树的生成

5.1.1 回归树的生成【P71】

05决策树与随机森林(学习笔记)_第5张图片

注意:当输入空间的划分确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i \in R_m}(y_i - f(x_i))^2 xiRm(yif(xi))2来表示回归树对于训练数据的预测误差,用平均误差最小的准则来求解每个单元上的最优输出值。

05决策树与随机森林(学习笔记)_第6张图片

  • 上式中有三个最小值符号,先看后面两个最小值符号,是指在划分的两个区域中,分别去找 C 1 C_1 C1 C 2 C_2 C2这两个值,使得两个区域得到的 y i y_i yi和输出 C 1 C_1 C1 C 2 C_2 C2的差值累计最小。
  • 前面的最小是指固定输入变量J, 去找最有划分的S, 这样我们对固定输入变量J, 就可以找到最优的切分点S。
  • 遍历所有输入变量,找到最优的切分变量 j j j, 构成一对 ( j , s ) (j,s) (j,s)。依此将输入空间划分为两个区域。接着,对每个区域重复上述划分过程,直到满足停止条件为止。这样就生成了一颗回归树。这样的回归树通常称为最小二乘回归树(least squares regression tree)
5.1.2 分类树的生成

05决策树与随机森林(学习笔记)_第7张图片

05决策树与随机森林(学习笔记)_第8张图片

基尼指数Gini(D)表示集合D的不确定性,基尼指数 G i n i ( D , A ) Gini(D,A) Gini(D,A)表示经过 A = a A=a A=a分割后集合 D D D的不确定性。基尼指数值越大,样本集合的不确定性也越大,这一点与熵类似。

##尝试分别计算p=0.2时,基尼指数Gini(p)和熵(单位比特)之半H(p)/2和分类误差率的关系。
import math
2*0.2*0.8 ##Out[5]: 0.32000000000000006
-(0.2*math.log2(0.2)+0.8*math.log2(0.8))/2.0 ##Out[7]: 0.36096404744368116
5.1.3 CART分类树的生成算法

05决策树与随机森林(学习笔记)_第9张图片

5.2 CART的剪枝

CART剪枝算法从“完全生长”的决策树的底端剪去一些子树,使决策树变小(模型变简单), 从而能够对未知数据有更准确的预测。

CART剪枝算法由两步组成:

  1. 首先从生成算法产生的决策树 T 0 T_0 T0底端开始不断剪枝,直到 T 0 T_0 T0的根节点,形成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0, T_1, ..., T_n\} {T0,T1,...,Tn};
  2. 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树。
5.2.1 剪枝,形成一个子树序列

05决策树与随机森林(学习笔记)_第10张图片

5.2.2 选取最优子树 T α T_{\alpha} Tα

利用独立的验证数据集,测试子树序列中各子树的平方误差或基尼指数,最小的决策树就是最优决策树。

6. 随机森林

6.1 随机森林简介

2001年,Breiman把分类树组合成随机森林。在运算量没有显著提高的前提下,提高了预测精度。

随机森林的优点:

  • 两个随机性的引入,使得随机森林不容易陷入过拟合
  • 两个随机性的引入,使得随机森林具有很好的抗噪声能力
    • 能够处理很高维度(features很多)的数据,并且不需要做特征选择,对数据集的适应能力强:既能处理离散型数据,也能处理连续型数据,数据集无需规范化。
    • 可以生成一个 P r o x i m i t i e s = ( p i j ) Proximities=(p_{ij}) Proximities=(pij)矩阵,用于度量样本之间的相似性: p i j = a i j N p_{ij}=\frac{a_{ij}}{N} pij=Naij, a i j a_{ij} aij表示样本 i i i j j j出现在随机森林中同一个叶子结点的次数, N N N表示随机森林中树的棵树。

6.2 Bootstrapping和Baging采样方法

6.2.1 bootstrap aggregation(自助聚合)

Bootstrapping的名称来自成语“pull up by your own bootstraps”,意思是依靠你自己的资源,称为自助法,它是一种有放回的抽样方法。

bagging的步骤如下:

  1. 从样本集合中重采样(有重复的)选出n个样本;
  2. 在所有属性上,对这n个样本建立分类器(ID3, C45, CART, SVM, Logistic回归等);
  3. 重复以上两步m次,即获得了m个分类器;
  4. 将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类。

6.3 随机森林

随机森林在bagging的基础上做了修改,步骤如下:

  1. 原始训练集为N,应用bootstrap法有放回地随机抽取k个新的自助样本集,并由此构建k棵分类树,每次未被抽到的样本组成了k个袋外数据;
  2. 设有 m a l l m_{all} mall个属性,则在每一棵树的每个结点处随机抽取 m t r y m_{try} mtry个属性,然后在 m t r y m_{try} mtry中选择一个最有分类能力的变量,变量分类的阈值通过检查每一个分类点确定;
  3. 每棵树最大限度地生长,不做任何修剪;
  4. 将生成的多棵分类树组成随机森林,用随机森林分类器对新的数据进行判别和分类,分类结果按树分类器的投票多少决定。

注意:随机森林通常使用决策树作为基本分类器。但也可以使用SVM、Logistic回归等其它分类器,习惯上,这些分类器组成的”总分类器“,仍然叫做随机森林

你可能感兴趣的:(机器学习,机器学习,随机森林,决策树)