机器学习:决策树 -- 学习笔记

参考文章

  • 决策树算法原理(上) - 刘建平Pinard - 博客园
  • 决策树算法原理(下) - 刘建平Pinard - 博客园
  • 李航《统计学习方法》第二版

决策树算法

决策树学习算法包含:

  • 特征选择
  • 决策树生成
  • 决策树的剪枝
    机器学习:决策树 -- 学习笔记_第1张图片

下面会分别对三个部分进行一定的总结,参考资料主要来自于《统计学习方法》。

决策树模型基本思想

决策树学习本质上是从训练数据集中归纳出一组分类规则。 与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树) 可能有多个, 也可能一个也没有。 我们需要的是一个与训练数据矛盾较小的决策树, 同时具有很好的泛化能力。

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

举个生活中简单直观的例子:

  1. 若你作为一家公司的面试官,正在对于若干个候选人进行面试。作为面试官,你有自己的一套评判标准,对于推开门的每一位候选人,你都会对其特征、背景依次进行评估。候选人是否是应届毕业生?若是,候选人毕业院校是哪里?是985、211么?是否科班出身?在校荣誉?若不是应届毕业生,参加工作几年?上一家公司如何?是否是因为恶劣行为被上家公司开除?

    经过这样一系列的了解,候选人在你的心中评判出一个最终结果,通过或者不通过。

    在这样的一个过程中,作为面试官的你,就可以简单看作一个决策树模型,候选人则是一个样本,通过对样本特征的一次次判断,最终得到一个二分类的问题中结果。这是决策树模型在应用中的过程。(你可能会说,这也只是一个由特征到结果的分类决策的过程,从哪里体现决策树模型呢? 以这里面的面试为例,先观察候选人的是否是应届生,再判断其他特征这一过程即体现了决策树的思想。这里的是否是应届生,则是该决策树模型的根节点)

故决策树的决策过程即是样本由根节点途径内部节点到达叶子节点的过程。

根节点与内部节点

  • 根节点与内部节点无本质差别,唯一的不同是根节点是数据集用于决策的第一个最优划分特征。而根节点与内部节点的选取过程是一样的,都是选择能使数据集更好划分的特征(借助 熵、基尼指数等指标)。
  • 对于划分数据集、生产决策树,对于分类树,可以是按照其可能的离散取值划分 ≥ 2 \geq 2 2 的数据集,也可以按照:“是否为某个可能取值” 将其划分为二叉树。后者也是 CART 算法的做法。

叶子结点

  • 叶子节点即最后决策树的输出。对于分类问题,则是一个类、标签,对于回归问题,则是一个实数。为直观上更好的理解,学习阶段一般都是只讨论分类决策树。在 CART 算法中会介绍回归决策树。

决策树通过一次次的选择最优划分特征、以及最有划分特征下的最优划分点将当前数据集进行划分为两个或多个部分。如此递归的划分下去,直到所有训练数据子集都有了明确的分类,或者没有合适的特征为止。最终得到一颗树状结构。

  • 一个极端的例子,对于一个训练数据集 D D D ,用 x ( i ) x^{(i)} x(i) 代表其第 i i i 个特征,一共有 n n n 个特征。若存在一个特征 x ( i ) x^{(i)} x(i) 可以将训练数据集分为 k k k 个不交叉的子集 D k D_k Dk,且每个子集 D k D_k Dk 的样本点的标签相同,即任意 x i , x j ∈ D k x_i,x_j \in D_k xi,xjDk , 使得其标签 y i = y j y_i = y_j yi=yj,即输出相同。 这样我们就得到了一个在训练数据集上分类很好的决策树模型,这里的 x ( i ) x^{(i)} x(i) 特征即是在这里的最优划分特征。这颗决策树只有一个根节点和 k k k 个叶子节点。

输入样本,根据样本的特征,在决策树中,从根节点最终会经过一个一个的内部节点,最终到达一个叶子节点(类、输出)。所以说,决策树可以看成一个 if-then 规则的集合。

由过拟合问题引出的决策树的剪枝

由于决策树模型是对训练数据集的一次次划分,每次划分保证各个子集有最好的分类(参见下面的特征选择)。故由此得到的决策树有很严重的过拟合问题,及对于训练数据集精度过高,对于陌生的新的数据精度很低、或无法保证,由此对于新生成的决策树模型,很有必要对其进行剪枝(参见下面的决策树的剪枝)。

决策树的生成只考虑局部最优,相对地,决策树的剪枝则考虑全局最优。

直观上看,决策树的生成是基于训练数据集的,对于训练数据集的一次次划分,得到一条条可以从根节点到叶子节点的路径,由此组成的决策树模型,而一次次的最优特征点的选择、划分,很容易造成模型在训练数据集上的过分精确。

注意

根据采取的决策树算法的不同(特征选取等方法的不同),决策树不一定是二叉树。而从决策树算法的思想中,可以看出,决策树模型对于回归问题和分类问题都可以完成。

特征选择

参照前面举的极端的例子,存在某个特征,可以成功将数据集划分为若干个子集,且每个子集的输出唯一。则这个特征为最优划分特征。在首先选择根节点划分特征和每次内部节点选择划分特征时,我们都希望找到上述这种完美的划分特征,若能只经过一次根节点即可得到最优的划分当然是最好的了。(然而实际中,出现这种情况往往意味着出现了 数据泄露(Data Leakage),会照成模型严重的过拟合问题,这里不展开)

然而实际中,我们往往很难遇到上述的极端情况,即很难通过一个特征将数据集很好的划分,往往需要进过多个特征的划分最终得到一个结果。 于是我们需要在每次划分时选择一个当前最优的划分特征来用于划分数据集。

而选择 “最优” 特征,需要一个评判的指标,于是在这里引出了信息论中的

熵(entropy)

在信息论与概率统计中, 熵(entropy) 是表示随机变量不确定性的度量。熵度量了事物的不确定性,越不确定的事物,它的熵就越大

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

定义若 p i = 0 p_i = 0 pi=0,则 0 log ⁡ 0 = 0 0\log 0 = 0 0log0=0。通常上式对数采用以 2 为底,或者以 e 为底,这是熵分别称作比特(bit) 或 纳特(nat)

熵越大,随机变量的不确定性就越大,从定义在中看出一个随机变量 p p p 的熵范围在:

0 ≤ H ( p ) ≤ log ⁡ n 0 \leq H(p) \leq \log n 0H(p)logn

当随机变量只取两个值,设其为 1、0,其 X 的分布为
P ( X = 1 ) = p P(X=1)=p P(X=1)=p , P ( X = 0 ) = 1 − p P(X=0) = 1-p P(X=0)=1p , 0 ≤ p ≤ 1 0 \leq p \leq 1 0p1
此时熵为 H ( p ) = − p log ⁡ 2 p − ( 1 − p ) log ⁡ 2 ( 1 − p ) H(p) = -p\log_2 p - (1-p)\log_2 (1-p) H(p)=plog2p(1p)log2(1p)
这时,熵 H ( p ) H(p) H(p) 随概率 p p p 变化的曲线为:(单位为比特)
机器学习:决策树 -- 学习笔记_第2张图片

所以,当 p = 0 p = 0 p=0,或者 p = 1 p = 1 p=1 时,随机变量完全没有不确定性,即 X X X 的取值已经完全确定了。当 概率 p = 0.5 p = 0.5 p=0.5 时, H ( p ) = 1 H(p) = 1 H(p)=1,取值最大,不确定性最大。

而我们需要选择最优划分特征,即需要判断在选择某一特征下,数据集的熵是多少,即条件熵(conditional entropy)。其定义和公示如下

机器学习:决策树 -- 学习笔记_第3张图片

定义为X给定条件下Y的条件概率分布的熵对X的数学期望。

即通过特征 X,将数据集划分为了若干个子集,分别计算每个子集的熵,最后将 每个子集熵×若干子集中取该子集的概率 加起来。是一个求期望的过程。

信息增益

特征A对训练数据集D的信息增益 g ( D , A ) g(D,A) g(D,A), 定义为集合D的经验熵 H ( D ) H(D) H(D) 与特征 A 给定条件下的 D 的经验条件熵 H ( D ∣ A ) H(D|A) H(DA) 之差,即
g ( D , A ) = H ( D ) − H ( D ∣ A ) g(D,A) = H(D) - H(D|A) g(D,A)=H(D)H(DA)

一般地, 熵H(Y)与条件熵H(Y|X)之差称为互信息(mutual information) 。 决策树学习中的信息增益等价于训练数据集中类与特征的互信息。

信息增益比

信息增益值的大小是相对于训练数据集而言的, 并没有绝对意义。 在分类问题困难
时, 也就是说在训练数据集的经验熵大的时候, 信息增益值会偏大。 反之, 信息增益值会
偏小。 使用信息增益比(information gain ratio) 可以对这一问题进行校正。 这是特征选择
的另一准则

特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集D关于特征A的经验熵 H A ( D ) H_A(D) 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)
note: 这里《统计学习方法》第一版和第二版不同,我以第二版为主。

其中:(n 是特征A取值的个数)
H A ( D ) = − ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D) = - \displaystyle\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi

ID3 模型与 C4.5,以及CART 算法

《统计学习方法》中之对ID3和C4.5进行了简要的介绍,主要介绍 ID3 借助信息增益进行特征选择,C4.5借助信息增益比来进行特征选择以此构造决策树。

目前主流决策树似乎都是采用 CART 算法,故重点可以CART算法。

决策树算法小结

以下部分转自 决策树算法原理(下) - 刘建平Pinard - 博客园
    终于到了最后的总结阶段了,这里我们不再纠结于ID3, C4.5和 CART,我们来看看决策树算法作为一个大类别的分类回归算法的优缺点。这部分总结于scikit-learn的英文文档。

首先我们看看决策树算法的优点:

1)简单直观,生成的决策树很直观。

2)基本不需要预处理,不需要提前归一化,处理缺失值。

3)使用决策树预测的代价是O(log2m)。 m为样本数。

4)既可以处理离散值也可以处理连续值。很多算法只是专注于离散值或者连续值。

5)可以处理多维度输出的分类问题。

6)相比于神经网络之类的黑盒分类模型,决策树在逻辑上可以得到很好的解释

7)可以交叉验证的剪枝来选择模型,从而提高泛化能力。

8) 对于异常点的容错能力好,健壮性高。

我们再看看决策树算法的缺点:

1)决策树算法非常容易过拟合,导致泛化能力不强。可以通过设置节点最少样本数量和限制决策树深度来改进。

2)决策树会因为样本发生一点点的改动,就会导致树结构的剧烈改变。这个可以通过集成学习之类的方法解决。

3)寻找最优的决策树是一个NP难的问题,我们一般是通过启发式方法,容易陷入局部最优。可以通过集成学习之类的方法来改善。

4)有些比较复杂的关系,决策树很难学习,比如异或。这个就没有办法了,一般这种关系可以换神经网络分类方法来解决。

5)如果某些特征的样本比例过大,生成决策树容易偏向于这些特征。这个可以通过调节样本权重来改善。

你可能感兴趣的:(机器学习,决策树,机器学习,人工智能)