数据挖掘概念与分析第八章笔记

分类的基本概念

分类 

分类是一种重要的数据分析形式,它提取刻画重要数据类的模型,这种模型称为分类器,预测分类(离散的,无序的)类标号。

分类和数值预测是预测问题的两种主要类型。

分类的一般方法 

数据分类涉及两个过程:

1:学习阶段:建立描述预先定义的数据类或概念集的分类器。分类算法通过分析或从训练集"学习"来构造分类器。

训练集是由数据库元组和与它们相关联的类标号组成,用向量来表示X=(x1,x2,x3,x4...),类标号属性是离散值或者是无序的。由于提供了每个训练元组的类标号,这一阶段也称为监督学习。对应的还有无监督学习,这两者的区分就是训练集的类标号是否是已知的。无监督学习的例子是聚类。

2:分类阶段 :我们通过学习阶段就可以得到一个分类器,但是我们在使用分类器之前我们应该先评估一下分类器的预测准确率来确定该分类器是否是优秀的。

分类器在检验集上进行检验,检验集是由检验元组和与他们相关联的类标号组成的。分类器在给定检验集上的准确率是分类器正确分类的检验元组所占的百分比。如果得到的准确率是我们能够接受的,就说明这个分类器模型是能够被我们接受的,然后就可以对数据进行分类了。

决策树归纳

当下有很多的分类器模型,决策树分类器是一个相当经典的分类器,只要是接触机器学习,数据等方面的同学,一定听到过这个名词。

决策树分类为何如此流行?决策树分类器的构造不需要任何领域的知识或参数设置,因此适合于探测式知识发现。此外,这个分类器还可以处理高维数据,而且采用的是类似于树这种形式,也特别直观和便于理解。因此,决策树是许多商业规则归纳系统的基础。

决策树归纳是从有类标号的训练元组中学习决策树,其中的内部结点表示在一个属性上的测试,每个分支代表该测试的一个输出,而每个树叶节点存放一个类标号。决策树的基本算法有ID3,C4.5,CART。这三个方法都采用了贪心(非回溯)方法,其中决策树以自顶向下递归的分治方式构造。

决策树的步骤如下:(书中p214-p217有具体的讲解)

1:我们从单节点N开始,N代表的是D中的训练元组,如果D中的元组为同一类,那么我们就用不着对该元组进行分类,那么N的话就变成树叶,我们用该类标记它。

2:如果D中的训练元组不是同一类,那么我们就要对其进行分类,所以,我们应该按照什么顺序分类呢?就拿书上的例子来说,现在有属性age,name,income,lan_decision这四个属性,我们是先按照age来分还是先按照那name来分。这个不能随便分,要是随便分都可以的话,这个方法也就没意义了。书中图8.3中的attribute_list为候选的属性集合,而根据划分的依据是根据度量依次选出属性集合中最合适的属性来作为分裂属性。理想的情况下,分裂准则使得每个分支上的输出分区都能尽可能"纯"。书中介绍了三种方法:Gain(信息增益),Gainratio(增益率),Giniindex(基尼指数)。把这三种方法弄清楚之后,就知道选择哪一个属性作为分裂属性是最合适的

3:当我们选出分裂属性之后,我们根据分裂属性划分元组的情况进行讨论。分裂属性是让我们只是要划分哪一个,但是怎么划分还是一个问题。因为属性可以是离散和连续的,所以划分规则有如下:

A:若A是离散的,则对A的每个已知值划分一个分支

B:若A是连续的,则产生两个分支 A<=split-point 和 A>split-point

C:A是离散的并且必须要产生一个二叉树,则进行子集的划分

4:返回决策树

这里对递归划分步骤的终止条件进行一下总结:

1:分区D的所有元组都属于用一个类

2:没有剩余属性可以用来进一步划分元组

3:给定的分支没有元组,即D的分区为空。

属性选择度量

刚刚我们在产生决策树的过程中提到了属性选择度量,用来确定使用那一个属性作为分裂属性最好,这里有三个方法:

1:信息增益

设节点N代表或存放分区D的元组。选择具有最高信息增益的属性作为结点N的分裂属性。该属性使结果分区中对元组分类所需要的信息量最小,并反映这些分区中的最小随机性或"不纯性"。信息增益定义为原来的信息需求与新的信息需求(即对A进行划分之后)之间的差。公式在书中已经给出,结合书中的例8.1来理解。

在p219下方提出了一个问题,如何计算连续值属性的信息增益?书中简单说了一下,但是说的并不是很明白,所以我去查阅了一些相关资料,这里可以进行参考计算连续值的信息增益

信息增益度量偏向具有许多输出的测试,就是倾向于选择具有大量值的属性

2:增益率

同信息增益相同,选择具有最高的增益率的属性作为结点N的分裂属性。

当通过一个属性的划分将导致大量分区,每个元祖只包含一个元祖。由于每个分区都是纯的,所以基于该划分对数据集D分类所需要的信息为0,因此,通过该属性的划分得到的信息增益最大。显然这种划分对分类没有用,所以提出了增益率的思想。

书中已经给出公式和例子。
3:基尼指数 

基尼指数度量数据分区或训练元组集D的不纯度。书中写的很详细,还考虑了A是离散和连续的情况,看书中的例8.3就很好理解了。

决策树算法的差别:

 决策树算法之间的差别包括在创建树时如何选择属性和利用剪枝的机制

ID3使用信息增益,C4.5使用Gainratio,CART使用Giniindex(基尼指数)

所有的度量都具有某种偏倚,已经证明,决策树归纳的时间复杂度一般随树的高度指数增加。因此,倾向于产生较浅的树的度量尽可能更可取,然而,某些研究发现,较浅的树趋向于具有大量树叶和较高的错误率。所以这个好坏也不是绝对的,遇到具体问题具体再说吧,大部分度量都产生相当好的结果。

树剪枝

在决策树创建时,由于数据中的噪声和离群点,许多分支反应的是训练数据中的异常。剪枝方法处理这种过分拟合数据问题。

常用的两种剪枝方法:先剪枝和后剪枝。

1:先剪枝:通过提前停止树的构建而对树"剪枝".一旦停止,节点就成为树叶,该树叶可以持有子集元组中最频繁的类

2:后剪枝:这个更常用,就是在完全生长好的树上减去子树。通过删除结点的分支并用树叶替换它而剪掉非定节点上的子树。该树叶的类标号用子树中最频繁的类标记。

决策分类树的发展 

1:决策树的可伸缩性 

在前面的ID3,C4.5,CART算法中,我们会遇到一个问题就是这个决策树算法都限制训练元祖驻留在内存中,针对这个问题,我们也提出了新的决策树算法,如RainForest能适应可用的内存量,并用于任意决策树归纳算法,p224 8.2.4节有具体讲解。

2.决策树归纳的可视化挖掘 
随着发展,我们对决策树的构建越来越希望有一种可视化的方式,能够使我们以一种交互式的方式进行构建。那么有没有这么一种工具呢? 书P225,8.2.5节详细讨论了这么一个问题。有点看不懂,这个了解一下就好了

贝叶斯分类算法

可以参考这篇文章贝叶斯算法

贝叶斯算法是基于贝叶斯定理的,所以我们需要知道贝叶斯定理,书中已经给出了计算公式。

这一小节主要是把计算公式弄清楚就好了,书中也写的很详细了,如果还有不懂的,也可以借鉴我给找出的那篇博客来理解。

基于规则的分类

规则是表示信息或少量知识的好方法,基于规则的分类器使用一组IF-THEN规则表示。 

如何建立基于规则的分类器呢? 

1:由决策树提取规则

对每条从根到树叶结点的路径创建一个规则。沿着给定路径上的每个分裂准则的逻辑AND形成规则前件,存放类预测的树叶结点形成规则的后件。由于这些规则直接从树中提取,所以他们是互斥的和穷举的。

因为是从决策树上面提取的规则,所以存在异常的点,处理异常有两种方法:

1:先对决策树进行剪枝,再提取数据

2:直接提取数据,然后对规则进行修剪

2.使用顺序覆盖算法提取规则 

使用顺序覆盖算法可以直接从训练数据中提取IF-THEN规则(即不必产生决策树),顺序覆盖算法是最广泛使用的挖掘分类规则析取集的方法。

算法的一般策略是:一次学习一个规则,每学习一个规则,就删除该规则覆盖的元组,并在剩下的元组上重复该过程,这种算法的思想与决策树的完全不同。我们回想一下决策树的算法思想,它是把一整块的数据经过数次划分之后,细化成规则。所以它是在同时学习一组规则,而顺序覆盖算法是一次学习一条规则 

该算法具体是怎样实现的呢?书中有例8.11,我们结合这个例子来看。学习的过程是从一般逐渐到特殊,最开始从规则前件条件为空的规则开始,然后逐步添加当时看上去最好的一个属性,然后重复这个过程直至最后。 

同决策树一样,我们添加规则的时候我们怎么知道那个属性是当时最好的呢?顺序覆盖算法也有一个规则质量度量 

同决策树的属性选择度量有:Gain,Gainration.Giniindex几个指标一样,顺序覆盖算法的的规则质量度量也有几个指标:熵,基于信息增益的度量
其实,就我们自己单纯的认知来说,每添加一个条件,只要提高这个规则的准确率不就好了吗? 但事实上这是并不行的,准确率本身并非规则质量的可靠估计,覆盖率本身也没有用。最好的做法是集成准确率和覆盖率。 书P234,例8.8详细讨论了这个问题。 

模型评估与选择

 评估分类器性能的度量

 使用训练数据导出分类器,然后评估结果模型的准确率可能错误地导致过于乐观的估计。分类器的准确率最好在检验集上估计

书中p237介绍了正元组负元组真正例真负例假正例、假负例 等的概念,要先了解这些概念,才能更好的理解公式

混淆矩阵是分析分类器识别不同类元组的一种有用工具。给定m个类,混淆矩阵是一个至少为m * m的表,前m行和m列中的表目指出类i的元组被分类器标记为类j的个数。

通过混淆矩阵我们可以计算准确率,错误率,敏感度(真正例率)、真负例率、精度。图8.13给出了计算公式,结合例子很好理解。p239下方要求证明F度量是精度和召回率的调和均值。调和均值就是总体各统计量倒数的算术平均数的倒数,很好证明。

保持方法和随即二次抽样

保持:在这种方法中,给定数据随即地分成两个独立的集合:训练集和检验集。通常2/3的数据分配到训练集,剩下的分配到检验集,使用训练集导出模型,其准确率用检验集估计。

随即二次抽样:将保持方法重复k次。总准确率估计取每次迭代准确率的平均值

交叉验证

第一次:D2,D3,D4,D5,D6..Dk一起做训练集,D1做检验集

第二次:D1,D3,D4,D5,D6..Dk一起做训练集,D2做检验集

第三次:D1,D2,D4,D5,D6..Dk一起做训练集,D3做检验集

.....................

一般建议使用分层10-折交叉验证估计准确率,因为它具有相对较低的偏倚和方差。对于分类,准确率是k次迭代正确分类的元组总数除以初始数据中的元组总数

自助法

在数据集中有放回的均匀抽样,最常用的是一种.632自助法,在平均情况下,63.2%原数据元组将出现在自助样本中,其余的饿38.8%的元组将形成检验集,其中书中有推导方法。

 使用统计显著性检验选择模型

我们在前面讲了使用一些方法来预测分类的准确率,假设已经由数据产生了两个分类器M1,M2。他们的评估度量都不相同,那么我们应该选择哪一个分类器最好呢?直观地,我们可以选择具有最低错误率的模型。然而,平均错误率只是对未来数据真实总体上的错误估计,所以我们要评估两个分类器的准确率之差是否是偶然的,这里要用统计显著性来验证 

实际上,在比较两个模型的性能这件事情上远比大家想象的复杂得多。 因为这涉及到几个重要的因素:首先,我们希望比较的是泛化性能,然后通过实验评估方法我们获得的只是测试集上的性能,两者的对比结果可能未必相同;第二,测试集上的性能与测试集本身上的选择有很大关系。且不论使用不同大小的测试集会得到不同的结果,即便使用相同大小的测试集,若包含的测试样例不同,测试结果也会不同。第三,很多算法实际上都是有一定的随机性的,即便使用相同的的参数设置,在同一个测试集上运行多次,其结果也会有不同。因此,正因为有这么多的无法确定的因素,所以我们才要在统计学上去寻求帮助。 

为了确定两个模型之间存在真正的差别,我们需要进行统计显著性检验。最后我们希望得到的是这样一个陈述:经检验,A分类器比B分类器好,且这种论断的误差在正负4%以内。

我们使用的是t-检验,不论是卡方检验,还是t-检验还是z-检验等,都是为了统计样本的实际观测值与理论推断值之间的偏离程度(第三章的学习记录)。在这里,我们假设这两个分类器是相同的,如果计算值大于标准阈值,则我们拒绝假设,则这两个分类器之间存在统计显著的差别。p242中讲解了,但是还是有点理解不到,做个记号后面再看看。

ROC曲线先放一放

提高分类准确率的技术

组合分类器比其他的成员分类器更准确

组合分类把k个学习得到的模型M1,M2,M3,M4...Mk组合在一起,旨在创建一个改进的复合分类模型M*。给定一个待分类的新数据元组,每个基分类器通过返回类预测投票。组合分类器基于分类器的投票返回类预测。 

装袋,提升和AdaBoost,随即森林

 参考文章提高准确率技术

猜你喜欢

转载自blog.csdn.net/Phoenix_tgd/article/details/81941277