数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论

文章目录

  • 分类问题的定义
  • 决策树问题
    • Gini系数
    • 过拟合
  • 误差及泛化理论
    • 泛化理论的理解和证明
  • 相关习题

都说港中文陶宇飞老师的数据挖掘课讲得非常好,这次选上,果然感觉老师思路清晰,循循善诱。但由于我对全英文授课还不太熟悉,加之专业水平实在不堪,因此颇有听天书的感觉。这篇文章是我对相关概念的梳理与理解。

分类问题的定义



首先老师抛出了对分类问题的定义,本质上就是在某一个分布D上找到一个分类器,可以实现在该分布上的特征域X到标签域Y的预测,然后我们需要使得这个分类器分类错误的误差尽可能小。这里其实我之前一直忽略的是这个分布D,其实所有分类器都是基于特定数据分布的。

但是上面有一个问题,就是我们是无法很准确地去描述一个分布的信息,因此常常只能基于某一个训练数据集S,这个S的数据是从分布D中得到的,都是独立同分布(independent and identically distributed (i.i.d.))的。但这其实就引入了两个误差概念:

  • 经验误差(empirical error):也叫训练误差,模型在训练集上的误差。
  • 泛化误差(generalization error):模型在新样本集(测试集)上的误差。

我们是想找到最佳泛化误差的,但是手头上能控制的只有经验误差,这两者的关系就是通过后面的一个关于误差的通理论证的。

决策树问题

老师选了决策树问题作为分类问题的典型例子,这和大陆常常拿线性二分类问题略有区别。这个部分也是考察的重点,需要着重了解各种推导以及计算,陶老师也给出了一些练习题给我们。

例子如上:
叶子结点上带的是类别标签class label,由于是二分类问题,所以只可能是yes or no(或者-1 or 1),内部节点上是属性attribute,该属性上有个属性断言predicate,满足属性声明的在属性节点的左侧,不满足的在右侧。定义如下:

如何定义这个断言,其实就相当于在属性上定义一种分割的方式split,由于属性可以分为序数属性(ordinal attribute)、标称属性(nominal attribute),因此其分割会略有不同,可以将ordinal attribute理解为可以用值评定大小关系定量描述,而nominal attribute只能通过枚举的方式定性描述。

如何利用决策树来对样本进行分类,就是按照下面的步骤,从根结点开始不断向下查找,直到找到叶子结点的class label。

可以观察到的是,决策树中的每个节点对应的数据S(u)是整个数据集的子集(root节点表示整个数据集),比方说例子中的education节点,表示「不是programmer的occupation」的子集:

Gini系数

上面只是引入了Split的定性概念,一个Split会将「符合P(u)」以及「不符合P(u)」的样本划分到两端,但是我们应该如何衡量我们是否挑选了一个好的Split值,表示其划分地很好呢?这就引入了GINI系数的定量概念。

GINI系数是针对一个子集set来说的,就是上面Split划分出来的决策树的节点代表的set,GINI衡量了划分后一个数据集的纯净程度(也就是各种label的“多样性”),GINI系数越小,代表数据集越纯净,样本范围是该子集的元素,在该二分类问题中,label就是全局已经标注好的yes、no。理想化来说,我们希望internal node在分割出S(v1),S(v2)的时候,S(v1)或者S(v2)内的label是一致的,划分地越纯净(GINI越小),训练样本的empirical error越小。

在下面的计算过程中,我们只关心纯净程度,因此 n y n_y ny就是全局S中带yes label的样本,而不关心它根据属性究竟是划分到了internal node的左边还是右边,就像相关习题中的习题1的第二小问。但是这种在计算时候的“不关心”,是否会让最后的分类正确率也不尽人意呢?在思考过后我认为是不会的,从后面过拟合中的改进Hunt’s Algorithm递归中我们可以看出,终止条件中标记叶子节点是根据其中大部分majority的label标记的,从上而下的路径也是尽可能选择纯净度最高的属性和值(GINI最小),从下往上回溯相当于是用纯净度最高的那个majority的label标记。

由此引入一个Split的GINI,我们只需要针对这个节点所有的Split计算GINI,然后找到其中最小的那个作为最佳分割。因为分割的GINI越小,代表其分割的子集越纯净

在知道Good Split后,我们就可以通过Hunt’s 算法构建一棵决策树,这是一种递归建立的过程,从上往下建立,从下往上递归返回结果,其中终止条件有两个:

  1. S S S的标签都是一样的,直接将该标签作为叶子节点返回
  2. S S S的所有属性值都是一样的,直接将 S S S中类别最多的标签作为叶子节点返回

过拟合

决策树建立的过程就是要让当前训练样本的emprical error尽可能小,但是这也是产生过拟合的主要原因。

决策树中产生过拟合的原因在于,随着树的不断扩深,我们上面也知道树的每个节点都是训练样本的子集,当某个节点代表的样本子集过小,虽然其生成的树的结构,能够很好地拟合训练数据,但是当将它作用在测试数据上时,可能会将不属于某个叶子的样本划分到该label上。

为了尽可能减少决策树构建过程中的过拟合,我们将Hunt’s算法修改如下,在样本过小时提前终止,这时终止条件有三个:

  1. S S S的标签都是一样的,直接将该标签作为叶子节点返回
  2. S S S的所有属性值都是一样的,直接将 S S S中类别最多的标签作为叶子节点返回
  3. S S S的数量过小的时候,直接将 S S S中类别最多的标签作为叶子节点返回

误差及泛化理论

通过一个题目可以看到决策树误差的产生,就是当我们的label叶子节点,将不属于该标签的样本,划入这个范围,因此产生了误差。


跟着上面下来,误差其实分为两类:

  • 经验误差(empirical error):也叫训练误差,模型在训练集上的误差。
  • 泛化误差(generalization error):模型在新样本集(测试集)上的误差。

不同于我们之前理解的误差,课件这里的误差实际上是指一个比例。
数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论_第1张图片


其蕴含的一个通理如上,其中errD为泛化误差,errS为训练误差,泛化误差被训练误差上界约束。其中可以看出当决策树节点越少,它理论上可以产生的最终分类器的数量就会减少,对应的就是H减少,让泛化误差上界缩小。当我们增加训练样本数量,S变大,泛化误差上界也会变小。

其中老师抛出了一个问题,当存在两棵决策树,它们有相同的empirical error,但一棵树只有10个节点,另一棵树有100个节点,我们通过Generalization Theorem应该选择哪一个?应该选择size更小的那个,因为我们可以通过更小的样本数量得到较小的泛化误差上界。

这其实也是针对所有分类器的泛化,之前针对某一个数据集S,我们是可以找到一个“好的”分类器的,但是将这个分类器放到新的数据集上,是否能得到好的效果是不确定的,也正是由于上面的那个泛化理论,用训练集的误差约束了测试集的误差的上界,因此在满足同一个数据分布的不同数据集下,我们在训练集上学到的好的模型,也是能够在测试集上表现良好的。

泛化理论的理解和证明

为了能够更清楚地阐明上面这个泛化理论的内涵,老师专门又用了一节课来为我们讲解。
数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论_第2张图片
经验误差是如何来约束泛化误差的呢?具体地来说,当一个训练集上的训练误差errS<=10%,后面加上的项<=1%,那么errD应该是<=11%,但是却不会过分地小于7%,因为如果是这样的话,errS应该是有比10%更小的上界的。

如何直观地理解其中“the set of classifiers that can possibly be returned”,即可能选作分类器的模型个数呢?在一个有106个参数的模型中,如果每个参数用一个8 byte的浮点数表示,那么这里占用了64*106 bit的空间,理论上来说这些数字就会有264*1000000 种排列情况,每一种排列即代表一种不同的模型。

其完整的证明过程老师与我们一起推导如下:
首先需要了解Hoeffding Bound约束,对于隶属于同一分布的伯努利变量X1、X2…Xn,设他们的数学期望为p,他们实际取值Xi的累加和t,除以数量n后得到t/n,这个t/n理论上的数学期望应该为单个伯努利变量的数学期望p,但是由于实际值和期望值有一定偏差,这种偏差的概率Pr是有一个上界的,根据deviation的变大而缩小。

还需要了解Union Bound,即多种事件联合发生的概率不大于他们各自发生的概率的累加和。
数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论_第3张图片
在有了上面两个Bound的储备之后,我们将目光看向一个分类器,对于一个分类器,当其在对测试集中的O1、O2… On做分类的时候,将其分类误差变量定义为Xi,对于O1分类错误则Xi为1,否则为0。这个X其实就满足了伯努利分布,设其期望为p,意思就是每个Xi取1的概率为p,就是每个样本O1可能被分类错误的概率为p,这就是泛化误差errD。真实的误差可以理解为所有Xi的和,运用上面的Hoeffding Bound,实际取值Xi的累加和t,除以数量n后得到t/n,t/n偏离期望p的概率Pr是受到上界约束的,这样子就将训练误差errS和泛化误差errD联系起来。
数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论_第4张图片
上面针对一个分类器h的结论是,在一个数据集上其「训练误差」大于「理论误差+偏移 α \alpha α」的概率Pr是小于一个上界的,我们将其中的偏移 α \alpha α换成要证明公式的约束项,就得到了下面绿色的表示形式,这还是一个分类器的结论,其描述的是,泛化误差大于训练误差加一个偏移量 α \alpha α,这个"bad event"的概率Pr,是不高于某个值的。运用Union Bound,当classifier set中所有分类器都考虑进来以后,它们总体发生“bad event”的概率Pr就小于一个值 δ \delta δ,反过来说,也就是最终要证明的,有 1 − δ 1-\delta 1δ的概率,泛化误差errD<=训练误差errS- α \alpha α
数据挖掘之分类问题、决策树问题以及一个关于误差的泛化理论_第5张图片

相关习题

习题1: 求给定样本下的GINI系数

习题2:
这道习题证明了如何在一个序数属性A上,以O(NlogN)的时间复杂度找到最佳分割点,核心思想就是枚举所有可能的分割值a,先通过排序算法将数据S按照属性A升序排列,然后从左到右一趟遍历,统计所有计算GINI的指标。

你可能感兴趣的:(人工智能,决策树,数据挖掘,分类)