《数据挖掘导论》笔记(四)

分类

本章介绍分类的基本概念,讨论诸如模型的过拟合等关键问题,并提供评估和比较分类技术性能的方法。尽管本章主要关注一种称作决策树归纳的技术,但是本章讨论的大部分内容也适用于其他的分类技术。

预备知识

分类任务的输入数据是记录的集合。每条记录称作实例或样例,用元组(x,y)表示,其中x是属性的集合,而y是一个特殊的属性,指出样例的类标号(也称为分类属性或目标属性)。类标号必须是离散属性,这正是区别分类与回归的关键特征。回归是一种预测建模任务,其中目标属性y是连续的。

解决分类问题的一般方法

分类技术(或分类法)是一种根据输入数据集建立分类模型的系统方法。分类法的例子包括决策树分类法、基于规则的分类法、神经网络、支持向量机和朴素贝叶斯分类法。这些技术都使用一种学习算法确定分类模型,该模型能够很好地拟合输入数据中类标号和属性集之间的联系。学习算法得到地模型不仅能很好地拟合输入数据,还要能够正确地预测未知样本的类标号。因此,训练算法的主要目标就是建立具有很好的泛化能力模型,即建立能够准确地预测未知样本类标号的模型。

image

首先需要一个训练集(training set),它由类标号已知的记录组成。使用训练集建立分类模型,该模型随后将运用于检验集(test set),检验集由类标号未知的记录组成。

分类模型的性能根据模型正确和错误预测的检验记录计数进行评估,这些计数存放在称作混淆矩阵的表格中。

image

image

image

决策树归纳

决策树是一种由结点和有向边组成的层次结构

决策树中,包含三种结点:

1.根结点:没有入边,但有零条或多条出边

2.内部结点:恰有一条入边和两条或多条出边

3.叶结点:恰有一条入边,但没有出边

在决策树中,每个叶结点都赋予一个类标号。非终结点(包括根结点和内部结点)包含属性测试条件,用以分开具有不同特性的记录。

一旦构成了决策树,对检验记录及逆行分类就相当容易了。从树的根结点开始,将测试条件用于检验记录,根据测试结果选择适当的分支。沿着该分支或者到达另一个内部结点,使用新的测试条件,或者达到一个叶结点。到达叶结点之后,叶结点的类称号就被赋值给该检验记录。

如何建立决策树

原则上讲,对于给定的属性集,可以构成的决策树的数目达到指数级。尽管某些决策树比其他决策树更准确,但是由于搜索空间是指数规模的,找出最佳决策树在计算上是不可行的。尽管如此,人们还是开发了一些有效的方法,能够在合理的时间内构造出具有一定准确率的次最优决策树。这些算法通常都采用贪心策略,在选择划分数据的属性时,采取一系列局部最优决策来构造决策树,Hunt算法就是一种这样的算法。Hunt算法是许多决策树算法的基础,包括ID3、C4.5和CART。

1.Hunt算法

在Hunt算法中,通过将训练记录相继划分成较纯的子集,以递归方式建立决策树。设Dt是与节点t相关的训练记录集,而y={y1,y2,...,yc}是类标号,Hunt算法的递归定义如下:

  (1)如果Dt中所有记录都属于用一个类yt,则t是叶节点,用yt标记。

  (2)如果Dt中包含属于多个类的记录,则选择一个属性测试条件(attribute test condition),将记录划分成较小的子集。对于测试条件的每个输出,创建一个子女节点,并根据测试结果将Dt中的记录分布到子女节点中。然后对于每个子女节点,递归地调用该算法。

  为了解释该算法如何执行,考虑如下问题:预测贷款申请者是会按时归还贷款,还是会拖欠贷款。对于这个问题,训练数据集可以通过考察以前贷款者的贷款记录来构造。下图所示的例子中,每条记录都包含贷款者的个人信息,以及贷款者是否拖欠贷款的类标号。

image

该分类问题的初始决策树只有一个节点,类标号为“拖欠贷款者=否”,意味着大多数贷款者都按时归还贷款。然而,该树需要进一步细化,因为根节点包含两个类的记录。根据“有房者”测试条件,这些记录被划分为较小的子集,如图(b)所示。选取属性测试条件的理由稍后讨论,目前,我们假定此处这样选择是划分数据的最优标准。接下来,对根节点的每个子女递归地调用Hunt算法。从上图给出的训练数据集可以看出,有房的贷款者都能按时偿还了贷款,因此,根节点的左子女为叶节点,标记为“拖欠贷款者=否”。对于右子女,我们需要继续递归地调用Hunt算法,知道所有的记录都属于同一类为止。每次递归调用所形成的决策树显示在图(c)图(d)中。

image

如果属性值的每种组合都在训练数据集中出现,并且每种组合都具有唯一的类标号,则Hunt算法是有效的。但是对于大多数实际情况,这些假设太苛刻了。因此,需要附加的条件来处理以下的情况。

  (1)算法的第二步锁创建的子女节点可能为空,即不存在与这些结点相关联的记录。如果没有一个训练记录包含与这样的节点相关联的属性值组合,这种情形就可能发生。这时,该节点称为叶节点,类标号为其父节点上训练记录中的多数类。

  (2)在第二步,如果与Dt相关联的所有记录都具有相同的属性值,则不可能进一步划分这些记录。在这种情况下,该结点为叶结点,其标号与该结点相关联的训练记录中的多数类。

2.决策树归纳的设计问题

决策树归纳的学习算法必须解决下面两个问题:

(1)如何分裂训练记录? 树增长过程的每个递归步都必须选择一个属性测试条件,将记录划分成较小的子集。为了实现这个步骤,算法必须提供为不同类型的属性指定测试条件的方法,并且提供评估每种测试条件的客观度量。

(2)如何停止分裂过程? 需要有结束条件,以终止决策树的生长过程。一个可能的策略是分裂结点,直到所有的记录都属于同一个类,或者所有的记录都具有相同的属性值。尽管每个结束条件对于结束决策树归纳算法都是充分的,但是还可以使用其他的标准提前终止树的生长过程。

表示属性测试条件的方法

决策树归纳算法必须为不同类型的属性提供表示属性测试条件和其对应输出的方法。

二元属性:二元属性的测试条件产生两个可能的输出

image

标称属性:由于标称属性有多个属性值,它的测试条件可以用两种方法表示。对于多路划分,其输出数取决于该属性不同属性值的个数。例如,如果属性婚姻状况有三个不同的属性值——单身、已婚、离异,则它的测试条件就会产生一个三路划分。另一方面,某些决策树算法(如CART)只产生二元划分,他们考虑创建k个属性值的二元划分的所有2k-1-1种方法。

image

序数属性:序数属性也可以产生二元或多路划分,只要不违背序数属性值的有序性,就可以对属性值进行分组。图4-10显示了按照属性衬衣尺码划分训练记录的不同的方法。图4-10a和图4-10b中的分组保持了属性值间的序关系,而图4-10c所示的分组则违反了这一性质,因为它把小号和大号分为一组,把中号和加大号放在另一组。

image

连续属性:对于连续属性来说,测试条件可以是具有二元输出的比较测试(A<v)或(A≥v),对于二元划分,决策树算法必须考虑所有可能的划分点v,并从中选择产生最佳划分的点。对于多路划分,算法必须考虑所有可能的连续值区间。可以采用离散化的策略,离散化之后,每个离散化区间赋予一个新的序数值,只要保持有序性,相邻的值可以聚集成较宽的区间。

image

选择最佳划分的度量

有很多度量可以用来确定划分记录的最佳方法,这些度量用划分前和划分后记录的类分布定义。

设p(i|t)表示给定结点t中属于类i的记录所占的比例,有时,我们省略结点t,直接用pi表示该比例。在两类问题中,任意结点的类分布都可以记作(p0,p1),其中p1=1-p0。例如下图

image

选择最佳划分的度量通常是根据划分后子女结点不纯性的程度。不纯的程度越低,类分布就越倾斜。例如,类分布为(0,1)的结点具有零不纯性,而均匀分布(0.5,0.5)的结点具有最高的不纯性。不纯性度量的例子包括:

image

其中c是类的个数。

为了确定测试条件的效果,我们需要比较父结点(划分前)的不纯程度和子女结点(划分后)的不纯程度,他们的差越大,测试条件的效果就越好。增益△是一种可以用来确定划分效果的标准:

image

其中,I(.)是给定结点的不纯性度量,N是父结点的记录总数,k是属性值的个数,N(vj)是与子女结点vj相关联的记录个数。决策树归纳算法通常选择最大化增益△的测试条件,因为对所有的测试条件来说,I(parent)是一个不变的值,所以最大化增益等价于最小化子女结点的不纯性度量的加权平均值。最后,当选择熵(entropy)作为公式(4-6)的不纯性度量时,熵的差就是所谓的信息增益△info

1.二元属性的划分

假设有两种方法将数据划分成较小的子集。划分前,Gini指标等于0.5,因为属于两个类的记录个数相等。如果选择属性A划分数据,结点N1的Gini指标等于0.4898.而N2的Gini指标等于0.480,派生结点的Gini指标的加权平均为(7/12)*0.4898+(5/12)*0.480=0.486.类似的,我们可以计算属性B的Gini指标加权平均是0.371.因为属性B具有更小的Gini指标,它比属性A更可取

2.标称属性的划分

正如前面提到的,标称属性可以产生二元划分或多路划分。

3.连续属性的划分

其中测试条件“年收入≤v”用来划分拖欠贷款分类问题的训练记录。用穷举方法确定v的值,将N个记录中所有的属性值都作为候选划分点。对每个候选v,都要扫描一次数据集,统计年收入大于和小于v的记录数,然后计算每个候选的Gini指标,并从中选择具有最小值的候选划分点。这种方法的计算代价是昂贵的,因为对每个候选划分点计算Gini指标需要O(N)次操作,由于有N个候选,总的计算复杂度为O(N2).为了降低计算复杂度,按照年收入将训练记录排序,所需要的时间为O(NlogN),从两个相邻的排过序的属性值中选择中间值作为候选划分点,得到候选划分点55,65,72等。无论如何,与穷举方法不同,在计算候选划分点的Gini值时,不需要考察所有N

image

4.增益率

熵和Gini指标等不纯性度量趋向有利于具有大量不同值的属性。

增益率:

image

其中,划分信息,而k是划分的总数。如果每个属性值具有相同的记录数,则任意i:P(vi)=1/k,而划分信息等于log2k。这说明如果某个属性产生了大量的划分,它的划分信息将会很大,从而降低了增益率。

决策树归纳算法

算法4.1给出了称作TreeGrowth的决策树归纳算法的框架。该算法的输入是训练记录集E和属性集F。算法递归地选择最优的属性来划分数据(步骤7),并扩展树的叶结点(步骤11和步骤12),直到满足结束条件(步骤1).算法细节如下。

(1)函数createdNode()为决策树建立新结点。决策树的结点或者是一个测试条件,记作node.test_cond,或者一个类标号,记作node.label

(2)函数find_best_split()确定应当选择哪个属性作为划分训练记录的测试条件。如前所述,测试条件的选择取决于使用哪种不纯性度量来评估划分,一些广泛使用的度量包括熵、Gini指标和X2统计量。

(3)函数classify()为叶结点确定类标号。对于每个叶结点t,令p(i|t)表示该结点上属于类i的训练记录所占的比例,在大多数情况下,都将叶结点指派到具有多数记录的类:

leaf.label=argmaxp(i|t)

其中,操作argmax返回最大化p(i|t)的参数值i。p(i|t)除了提供确定叶结点类标号所需要的信息之外,还可以用来估计分配到叶结点t的记录属于类i的概率除了提供确定叶结点类标号所需要的信息之外,还可以用来估计分配到叶结点t的记录属于类i的概率。

(4)函数stopping_cond()通过检查是否所有的记录都属于同一个类,或者都具有相同的属性值,决定是否终止决策树的增长。终止递归函数的另一种方法是,检查记录是否小于某个最小阈值。

image

  建立决策树之后,可以进行树剪枝(tree-pruning),以减小决策树的规模。决策树过大容易受所谓过分拟合(overfitting)现象的影响。通过修建初始决策树的分支,剪枝有助于提高决策树的泛化能力。过分拟合和树剪枝问题将在4.4更详细的讨论。

决策树归纳的特点

决策树归纳算法重要特点的总结:

(1)决策树归纳是一种构建分类模型的非参数方法。换句话说,它不要求任何先验假设,不假定类和其他属性服从一定的概率分布

(2)找到最佳的决策树是NP完全问题。许多决策树算法都采取启发式的方法指导对假设空间的搜索。

(3)已开发的构建决策树结束不需要昂贵的计算代价,即使训练集非常大,也可以快速建立模型。此外,决策树一旦建立,未知样本分类非常快,最坏情况的时间复杂度为O(w),其中w是树的最大深度

(4)决策树相对容易解释,特别是小型的决策树。在很多简单的数据集上,决策树的准确率也可以与其他分类算法相媲美。

(5)决策树是学习离散值函数的典型代表。然而,它不能很好地推广到某些特定的布尔问题。

(6)决策树算法对于噪声的干扰具有相当好的鲁棒性,采用避免过拟合的方法之后尤其如此。

(7)冗余属性不会对决策树的准确率造成不利的影响。一个属性如果在数据中它与另一个属性是强相关的,那么它是冗余的。在两个冗余的属性中,如果已经选择其中一个作为用于划分的属性,则另一个将被忽略。然而,如果数据集中含有很多不相关的属性(即对分类任务没有用的属性),则某些不相关属性可能在树的构造过程中偶然被选中,导致决策树过于庞大。通过在预处理阶段删除不相关属性,特征选择技术能够帮助提高决策树的准确率。

(8)由于大多数的决策树算法都采用自顶向下的递归划分方法,因此沿着树向下,记录会越来越少。在叶结点,记录可能太少,对于叶结点代表的类,不能做出具有统计意义的判决,这就是所谓的数据碎片问题。解决该问题的一种可行的方法是,当样本数小于某个特定阈值时停止分裂。

(9)子树可能在决策树中重复多次,这使得决策树过于复杂,并且可能更难解释。当决策树的每个内部结点都依赖单个属性测试条件时,就会出现这种情况。由于大多数的决策树算法都采用分治划分策略,因此在属性空间的不同部分可以使用相同的测试条件,从而导致子树重复问题。

(10)迄今为止,本章介绍的测试条件每次都只涉及一个属性。这样,可以将决策树的生长过程看成划分属性空间为不相交的区域的过程,直到每个区域都只包含同一类的记录。两个不同类的相邻区域之间的边界称作决策边界。由于测试条件只涉及单个属性,因此决策边界是直线,即平行于“坐标轴”,这就限制了决策树对连续属性之间复杂关系建模的表达能力


斜决策树可以克服以上的局限,因为它允许测试条件涉及多个属性。

构造归纳提供另一种将数据划分成齐次非矩形区域的方法,该方法创建复合属性,代表已有属性的算术或逻辑组合。新属性提供更好的类区分能力,并在决策树归纳之前就增广到数据集中。与斜决策树不同,构造归纳不需要昂贵的花费,因为在构造决策树之前,它只需要一次性地确定属性地所有相关组合。相比之下,在扩展每个内部结点时,斜决策树都需要动态地确定正确的属性组合。然而构造归纳会产生冗余的属性,因为新创建的属性是已有属性的组合。

(11)研究表明不纯性度量方法的选择对决策树算法的性能影响很小,这是因为许多度量方法相互之间都是一致的。实际上,树剪切对最终决策树的影响比不纯性度量的选择的影响更大。

模型的过拟合

分类模型的误差大致分为两种:训练误差和泛化误差。训练误差也称再代入误差或表现误差,是在训练记录上误分类样本比例,而泛化误差是模型在未知记录上的期望误差。

注意,当决策树很小时,训练和检验误差都很大,这种情况称作模型拟合不足。出现拟合不足的原因是模型尚未学习到数据的真实结构,因此模型在训练集和检验集上的性能都很差。随着决策树中结点数的增加,模型的训练误差和检验误差都会随之降低。然而一旦树的规模变得太大,即使训练误差还在继续降低,但是检验误差开始增大,这种现象称为模型过拟合。

为了理解过分拟合现象,注意模型的训练误差随模型的复杂度增加而降低,例如,可以扩展树的叶结点,直到它完全拟合训练数据。虽然这样一棵复杂的决策树的训练误差为0,但是检验误差可能很大,因为该树可能包含这样的结点,他们偶然地拟合训练数据中某些噪声。这些结点降低了决策树的性能,因为他们不能很好的泛化到检验样本。如下面两棵树。

image

噪声导致的过拟合

考虑表4-3和表4-4中哺乳动物的分类问题的训练数据集合和检验数据集合。十个训练记录中有两个被错误地标记:蝙蝠和鲸被错误地标记为非哺乳类动物,而不是哺乳动物。

image

  完全拟合训练数据的决策树实现在图4-25a中。虽然该树的训练误差为0,但它在检验数据上的误差高达30%。人和海豚都被误分类为非哺乳类动物,因为它们在属性体温、胎生、4条腿上的属性值与训练数据中被错误标记的样本属性值相同。另一方面,针鼹是个例外,其检验记录中的类标号与训练集中相似的记录的类标号相反。例外导致的错误是不可避免的,它设定了分类器可以达到的最小错误率。

image

  相反,图4-25b中决策树M2具有较低的检验误差(10%),尽管它的训练误差较高(20%)。很明显,决策树M1过分拟合了训练数据,因为存在一个更简单、但在检验数据集上具有更低检验误差的模型。模型M1中的属性测试条件4条脚具有欺骗性,因为它拟合了无标记的训练记录,导致了对检验集中记录的五分类。

缺乏代表性样本导致的过拟合

根据少量训练记录做出分类决策的模型也容易受过分拟合的影响。由于训练数据缺乏具有代表性的样本,在没有多少训练记录的情况下,学习算法仍然继续细化模型就会产生这样的模型。

考虑表4-5中的五个训练记录,表中所有的记录都是正确标记的,对应的决策树在图4-26中。尽管它的训练误差为0,但是它的检验误差却高达30%。

image

人、大象和海豚都被误分类,因为决策树把很温但不冬眠的脊柱动物划分为非哺乳动物。决策树做出这样的分类决策是因为只有一个训练记录具有这样的特征。这个例子清楚地表明,当决策树的叶结点没有足够的代表性样本时,很可能做出错误的预测。

过分拟合与多重比较过程

模型的过分拟合可能出现在使用所谓的多重比较过程的学习算法。

多重比较过程与模型过分拟合有什么关系呢?许多学习算法都利用一个独立的候选集{γi},然后从中选取最大化给定标准的γmax。算法将把γmax添加到当前模型中,以提高模型的整体性能。重复这一过程,直到没有进一步的提高。例如,在决策树增长过程中,可以进行多种测试,以确定哪个属性能够最好地划分训练数据,只要观察到地改进是统计显著地,就选取导致最佳划分的属性来扩展决策树。

说T0是初始化决策树,Tx是插入属性x的内部结点后的决策树。原则上,如果观察到的增益△(T0,Tx)大于某个预先定义的阈值α,就可以将x添加到当前模型中。如果只有一个属性测试条件,则可以通过选择足够大的阈值α来避免插入错误的结点。然而,在实践中,可用的属性测试条件不止一个,并且决策树算法必须从候选集{x1,x2,…,xk}中选择最佳属性xmax来划分数据。在这种情况下,算法实际上使用多重比较过程来决定是否需要扩展决策树。更具体地说,这是测试△(T0,Txmax)>α,而不是测试△(T0,Tx)>α。随着候选个数k地增加,找到△(T0,Txmax)>α地几率也在增大。除非根据k修改增益函数△或阈值α,否则算法会不经意间在模型上增加一些欺骗性的结点,导致模型过拟合。

当选择属性xmax的训练记录集很小时,这种影响就变得更加明显,因为当训练记录较少时,函数△(T0,Txmax)的方差会很大。因此,当训练记录很少时,找到△(T0,Txmax)>α的概率就增大了。决策树增长到一定深度就会经常发生这种情形,这样会降低结点所覆盖的记录数,提高了添加不必要结点的可能性。大量的候选属性和少量的训练记录最后导致了模型的过拟合。

泛化误差估计

 虽然过分拟合的主要原因一直是个争议的话题,大家还是普遍同意模型的复杂度对模型的过分拟合有影响。如图4-23所示。问题是,如何确定正确的模型复杂度?理想的复杂度是能产生最低泛化误差的模型的复杂度。然而,在简历模型的过程中,学习算法只能访问训练数据集(见图4-3),对检验数据集,它一无所知,因此也不知道所建立的决策树在未知记录上的性能。我们所能做的就是估计决策树的泛化误差。本节提供一些估计泛化误差的方法。

  1. 使用再代入估计

  再代入估计方法假设训练数据集可以很好地代表整体数据,因而,可以使用训练误差(又称再代入误差)提供对泛化误差的乐观估计。在这样的前提下,决策树归纳算法简单地选择产生最低训练误差的模型作为最终的模型。然而,训练误差通常是泛化误差的一种很差的估计。

  例4.1 考虑图4-27中的二叉决策树,假设两棵决策树都由相同的训练数据产生,并且都根据每个叶结点多数类做出分类决策。注意,左边的树TL复杂一些,它扩展了右边决策树TR的某些叶结点。左决策树的训练误差是e(TL)=4/24=0.167,而右决策树的训练误差是e(TR)=6/24=0.25。根据再代入估计,左决策树要优于右决策树。

image

2. 结合模型复杂度

  如前所述,模型越是复杂,出现过分拟合的几率就越高。因此,我们更喜欢采用较为简单的模型。这种策略与应用众所周知的奥卡姆剃刀(Occam's razor)或节俭原则(principle of parsimony)一致。

  定义4.2 奥卡姆剃刀:给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更可取。

  奥卡姆剃刀是很直观的原则,因为复杂模型中的附加成分很大程度上是完全对偶然的拟合。用爱因斯坦的话来说,“所有事情都应该尽可能的简单,但不是简化。”下面我们介绍两种把模型复杂度与分类模型评估结合在一起的方法。

悲观误差评估 第一种方法明确地把使用训练误差与模型复杂度罚项的和计算泛化误差。结果泛化误差可以看做模型的悲观误差估计(pessimistic error estimate)。例如,设n(t)是结点t分类的训练数据记录,e(t)是被误分类的记录数。决策树T的悲观误差估计eg(T)可以用下式计算:

image

其中,k是决策树的叶结点数,e(T)决策树的总训练误差,Nt是训练记录数,Ω(ti)是每个结点ti对应的罚项。

  例4.2 考虑图4-27中的二叉决策树,如果罚项等于0.5,左边的决策树的悲观误差估计为:

image

右边的决策树的悲观误差估计为:

image

这样,左边的决策树比右边的决策树具有更好的悲观误差估计。对二叉树来说,0.5的罚项意味着只要至少能够改善一个训练记录的分类,结点就应当扩展。因为扩展一个结点等价于总误差增加0.5,代价比犯一个训练错误小。

  如果对于所有的结点t,Ω(t)=1,左边的决策树的北瓜误差估计为eg(TL)=11/24=0.458,右边的决策树的悲观误差估计为eg(TR)=10/24=0.417。因此,右边的决策树比左边的决策树具有更好的悲观错误率。这样,除非能够减少一个以上训练记录的误分类,否则结点不应当扩展。

最小描述长度原则 另一种结合模型复杂度的方法是基于称作最小描述长度(minimum description lenght,MDL)原则的信息论方法。为了解释说明该原则,考虑图4-28中的例子。在该例子中,A和B都是已知属性x值的给定记录集。另外,A知道每个记录的确切类标号,而B却不知道这些信息。B可以通过要求A顺序传送类标号而获得每个记录的分类。一条消息需要θ(n)比特的信息,其中n是记录的总数。

image

另一种可能是,A决定建立一个分类模型,概括x和y之间的关系。在传送给B前,模型用压缩形式编码。如果模型的准确率是100%,那么传输的代价就等于模型编码的代价。否则,A还必须传输哪些记录被模型错误分类信息。传输的总代价是:

image

其中,等式右边的第一项是模型编码的开销,而第二项是五分类记录编码的开销。根据MDL原则,我们寻找最小化开销函数的模型。

3.估计统计上界

泛化误差也可以用训练误差的统计修正来估计。因为泛化误差倾向于比训练误差大,所以统计修正通常是计算训练误差的上界,考虑到达决策树一个特定叶结点的训练记录数。

4.使用确认集

在该方法中,不是用训练集泛化误差,而是把原始的训练数据集分为两个较小的子集,一个子集用于训练,而另一个称作确认集,用于估计泛化误差。典型的做法是,保留2/3的训练数据集来建立模型,剩余的1/3用作误差估计。

  该方法常常用于通过参数控制获得具有不同复杂度模型的分类技术。通过调整学习算法中的参数(如决策树中剪枝的程度),知道学习算法产生的模型在确认集上达到最低的错误率。可以估计最佳模型的复杂度。虽然该方法为评估模型在未知样本上的性能提供了较好的办法,但用于训练的记录也减少了。

处理决策树归纳中的过分拟合

在前面章节中,我们介绍了一些估计分类模型泛化误差的方法。对于泛化误差可靠的估计能让学习算法搜索到准确的模型,而不会对训练数据集过分拟合。本节介绍两种在决策树归纳上避免过分拟合的策略。

先剪枝(提前终止规则) 在这种方法中,树增长算法在产生完全拟合整个训练数据集的完全增长的决策树之前就停止决策树的生长。为了做到这一点,需要采用更具有限制性的结束条件,例如,当观察到的不纯性度量的增益(或估计的泛化误差的改进)低于某个确定的阈值时就停止扩展叶结点。这种方法的优点在于避免产生过分拟合训练数据的过于复杂的子树。然而,很难为提前终止选择正确的阈值。阈值太高将导致拟合不足的模型,而阈值太低就不能充分地解决过分拟合的问题。此外,即便使用已有的属性测试条件得不到显著的增益,接下来的划分也可能产生较好的子树。

后剪枝 在该方法中,初始决策树按照最大规模生长,然后进行剪枝的步骤。按照自底向上的方式修建完全增长的决策树。修剪有两种做法:(1)用新的叶结点替换子树,该叶结点的类标号由树下记录中的多数类确定;或者(2)用子树中最长使用的分支代替子树。当模型不能再改进时终止剪枝步骤。与先剪枝相比,后剪枝技术倾向于产生更好的结果,因为不像先剪枝,后剪枝是根据完全增长的决策树做出的剪枝决策。先剪枝则可能过早终止决策树的生长。然后,对于后剪枝,当子树被剪掉后,生长完全决策树的额外的计算就被浪费了。

评估分类器的性能

4.4.4节中介绍了集中在训练过程中估计模型泛化误差的方法。估计误差有助于学习算法进行模型选择(model selection),即找到一个具有合适复杂度、不易发生过拟合的模型。模型一旦建立,就可以应用到检验数据集上,预测未知记录的来标号。

  测试模型在检验集上的性能是有用的,因为这样的测量给出模型泛化误差的无偏估计。在检验集上计算出的准确率或错误率可以用来比较不同分类器在相同领域上的性能。然而,为了做到这一点,检验记录的类标号必须是已知的。本节回顾一些常用的评估分类器性能的方法。

4.5.1 保持方法

  在保持(Holdout)方法中,将被标记的原始数据划分成两个不相交的集合,分别称为训练集合检验集。在训练数据集上归纳分类模型,在检验集上评估模型的性能。训练集和检验集的划分比例通常根据分析家的判断(例如,50-50,或者2/3作为训练集,1/3作为检验集)。分类器的准确率根据模型在检验集上的准确率估计。

  保持方法有一些众所周知的局限性。第一,用于训练的被标记样本较少,因为要保留一部分记录用于检验。因此,建立的模型不如使用所有被标记样本建立的模型好。第二,模型可能高度依赖于训练集和检验集的构成。一方面,训练集越小,模型的方差越大。另一方面,如果训练集太大,根据用较小的检验集估计的准确率又不太可靠。这样的估计具有很宽的置信区间。最后,训练集合检验集不再是相互独立的。因为训练集和检验集来源于同一个数据集,在一个子集中超出比例的类在另一个子集就低于比例,反之亦然。

4.5.2 随机二次抽样

  可以多次重复保持方法来改进对分类器性能的估计,这种方法称作随机二次抽样。设acci是第i次迭代的模型的准确率,总准确率是。随机二次抽样也会遇到一些与保持方法同样的问题,因为在训练阶段也没有利用尽可能多的数据。并且,由于它没有控制每个记录用于训练和检验的次数,因此,有些用于训练的记录使用的频率可能比其他记录高很多。

4.5.3 交叉验证

  替代随机二次抽样的一种方法时交叉验证(cross-validation)。在该方法中,每个记录用于训练的次数相同吗,并且恰好检验一次。为了解释该方法,假设把数据分为相同大小的两个子集,首先,我们选择一个子集作为训练集,而另一个做检验集,然后交换两个集合的角色,原先做训练集的现在做检验集,反之亦然,这种方法较二折交叉验证。总误差通过对两次运行的误差求和得到。在这个例子中,每个样本各做一次训练样本和检验样本。k折交叉验证是对该方法的推广,把数据分为大小相同的k分,在每次运行,选择其中一份做检验集,而其余的全部作为训练集,该过程重复k次,使得每份数据都用于检验恰好一次。同样,总误差是所有k次运行的误差纸之和。k折价差验证方法的一种特殊情况使令k=N,其中N是数据集的大小,在这种所谓留一(leave-one-out)方法中,每个检验集只有一个记录。该方法的优点是使用尽可能多的训练记录,此外,检验集之间是互斥的,并且有效地覆盖了整个数据集;该方法的缺点是整个过程重复N次,计算上开销很大,此外,因为每个检验集只有一个记录,性能估计度量的方法偏高。

4.5.4 自助法

  迄今为止,我们介绍的方法都是假定训练记录采用不放回抽样,因此,训练集和检验集都不包含重复记录。在自助(boostrap)方法中,训练记录采用有放回抽样,即已经选座训练的记录将放回原来的记录集中,使得它等概率地被重新抽取。如果原始数据有N个记录,可以证明,平均来说,大小为N的自助样本大约包含原始数据中63.2%的记录。这是因为一个记录被自助抽样抽取的概率是1-(1-1/N)N,当N充分大时,该概率逐渐逼近1-e-1=0.632。没有抽中的记录就称为检验集的一部分,将训练集简历的模型应用到检验集上,得到自助样本准确率的一个估计εt。抽样过程重复b次,产生b个自助样本。

  按照如何计算分类器的总准确率,有几种不同的自助抽样法。常用的方法之一是.632自助(.632 boostrap),它通过组合每个自助样本的准确率εt和由包含所有标记样本的训练集计算的准确率(accs)计算总准确率(accboot):

比较分类器的方法

比较不同分类器的性能,以确定在给定的数据集上哪个分类器效果更好是很有用的。但是依据数据集的大小,两个分类器准确率上的差异可能不是统计显著的。

为了更好地解释,考虑一对分类模型MA和MB。假设MA在包含30个记录地检验集上的准确率达到85%,而MB在包含5000个记录的不同检验集上达到75%的准确率。根据这些信息,MA比MB好吗?

上面的例子提出了涉及性能度量的统计显著性的两个关键问题。

(1)尽管MA的准确率比MB高,但是它是在较小的检验集上检验的。MA的准确率的置信程度有多高?

(2)每个试验成功的概率p是常数。

估计准确度的置信区间

为确定置信区间,需要建立支配准确率度量的概率分布

预测检验记录类标号的任务也可以看作是二项式实验。给定一个包含N个记录的检验集,令X是被模型正确预测的记录数,p是模型真正准确率。通过把预测任务用二项式实验建模,X服从均值为Np,方差为Np(1-p)的二项分布。可以证明经验准确率acc=X/N也是均值为p,方差为p(1-p)/N的二项分布。尽管可以用二项分布来估计acc的置信区间,但是当N充分大时,通常用正态分布来近似。

比较两个模型的性能

考虑一对模型M1和M2,它们在两个独立的检验集D1和D2上进行评估,令n1是D1中的记录数,n2是D2中的记录数。另外,假设M1在D1上的错误率为e1,M2在D2上的错误率为e2。目标是检验e1和e2的观察差是否是统计显著的。

比较两种分类法的性能

假设我们想用k折交叉验证的方法比较两种分类法的性能。首先,把数据集D划分为k个大小相等部分,然后,使用每种分类法,在k-1份数据上构建模型,并在剩余的划分上进行检验,这个步骤重复k次,每次使用不同的划分进行检验。

令Mij表示分类技术Li在第j次迭代产生的模型,注意,每对模型M1j和M2j在相同的划分j上进行检验。用e1j和e2j分别表示他们的错误率,它们在第j折上的错误率之差可以记作dj=e1j-e2j。如果k充分大,则dj服从于均值为dtcv(错误率的真实差)、方差为的正态分布。

posted @ 2018-01-23 16:29  彼岸花杀是条狗  阅读(1608)  评论(0编辑  收藏  举报