首先老师抛出了对分类问题的定义,本质上就是在某一个分布D上找到一个分类器,可以实现在该分布上的特征域X到标签域Y的预测,然后我们需要使得这个分类器分类错误的误差尽可能小。这里其实我之前一直忽略的是这个分布D,其实所有分类器都是基于特定数据分布的。
但是上面有一个问题,就是我们是无法很准确地去描述一个分布的信息,因此常常只能基于某一个训练数据集S,这个S的数据是从分布D中得到的,都是独立同分布(independent and identically distributed (i.i.d.))的。但这其实就引入了两个误差概念:
我们是想找到最佳泛化误差的,但是手头上能控制的只有经验误差,这两者的关系就是通过后面的一个关于误差的通理论证的。
老师选了决策树问题作为分类问题的典型例子,这和大陆常常拿线性二分类问题略有区别。这个部分也是考察的重点,需要着重了解各种推导以及计算,陶老师也给出了一些练习题给我们。
例子如上:
叶子结点上带的是类别标签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」的子集:
上面只是引入了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 算法构建一棵决策树,这是一种递归建立的过程,从上往下建立,从下往上递归返回结果,其中终止条件有两个:
决策树建立的过程就是要让当前训练样本的emprical error尽可能小,但是这也是产生过拟合的主要原因。
决策树中产生过拟合的原因在于,随着树的不断扩深,我们上面也知道树的每个节点都是训练样本的子集,当某个节点代表的样本子集过小,虽然其生成的树的结构,能够很好地拟合训练数据,但是当将它作用在测试数据上时,可能会将不属于某个叶子的样本划分到该label上。
为了尽可能减少决策树构建过程中的过拟合,我们将Hunt’s算法修改如下,在样本过小时提前终止,这时终止条件有三个:
通过一个题目可以看到决策树误差的产生,就是当我们的label叶子节点,将不属于该标签的样本,划入这个范围,因此产生了误差。
跟着上面下来,误差其实分为两类:
不同于我们之前理解的误差,课件这里的误差实际上是指一个比例。
其蕴含的一个通理如上,其中errD
为泛化误差,errS
为训练误差,泛化误差被训练误差上界约束。其中可以看出当决策树节点越少,它理论上可以产生的最终分类器的数量就会减少,对应的就是H
减少,让泛化误差上界缩小。当我们增加训练样本数量,S
变大,泛化误差上界也会变小。
其中老师抛出了一个问题,当存在两棵决策树,它们有相同的empirical error,但一棵树只有10个节点,另一棵树有100个节点,我们通过Generalization Theorem应该选择哪一个?应该选择size更小的那个,因为我们可以通过更小的样本数量得到较小的泛化误差上界。
这其实也是针对所有分类器的泛化,之前针对某一个数据集S,我们是可以找到一个“好的”分类器的,但是将这个分类器放到新的数据集上,是否能得到好的效果是不确定的,也正是由于上面的那个泛化理论,用训练集的误差约束了测试集的误差的上界,因此在满足同一个数据分布的不同数据集下,我们在训练集上学到的好的模型,也是能够在测试集上表现良好的。
为了能够更清楚地阐明上面这个泛化理论的内涵,老师专门又用了一节课来为我们讲解。
经验误差是如何来约束泛化误差的呢?具体地来说,当一个训练集上的训练误差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,即多种事件联合发生的概率不大于他们各自发生的概率的累加和。
在有了上面两个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联系起来。
上面针对一个分类器h的结论是,在一个数据集上其「训练误差」大于「理论误差+偏移 α \alpha α」的概率Pr是小于一个上界的,我们将其中的偏移 α \alpha α换成要证明公式的约束项,就得到了下面绿色的表示形式,这还是一个分类器的结论,其描述的是,泛化误差大于训练误差加一个偏移量 α \alpha α,这个"bad event"的概率Pr,是不高于某个值的。运用Union Bound,当classifier set中所有分类器都考虑进来以后,它们总体发生“bad event”的概率Pr就小于一个值 δ \delta δ,反过来说,也就是最终要证明的,有 1 − δ 1-\delta 1−δ的概率,泛化误差errD
<=训练误差errS
- α \alpha α。
习题1: 求给定样本下的GINI系数
习题2:
这道习题证明了如何在一个序数属性A上,以O(NlogN)
的时间复杂度找到最佳分割点,核心思想就是枚举所有可能的分割值a,先通过排序算法将数据S按照属性A升序排列,然后从左到右一趟遍历,统计所有计算GINI的指标。