使用kNNModel对文本进行自动分类Word文档格式.docx

上传人:b****3 文档编号:16969665 上传时间:2022-11-27 格式:DOCX 页数:15 大小:510.01KB
下载 相关 举报
使用kNNModel对文本进行自动分类Word文档格式.docx_第1页
第1页 / 共15页
使用kNNModel对文本进行自动分类Word文档格式.docx_第2页
第2页 / 共15页
使用kNNModel对文本进行自动分类Word文档格式.docx_第3页
第3页 / 共15页
使用kNNModel对文本进行自动分类Word文档格式.docx_第4页
第4页 / 共15页
使用kNNModel对文本进行自动分类Word文档格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

使用kNNModel对文本进行自动分类Word文档格式.docx

《使用kNNModel对文本进行自动分类Word文档格式.docx》由会员分享,可在线阅读,更多相关《使用kNNModel对文本进行自动分类Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。

使用kNNModel对文本进行自动分类Word文档格式.docx

在这些方法中,kNN和Rocchio被频繁的用到,并且它们都是基于相似度的(similarity-based)。

kNN算法使用整个训练实例作为计算相似度的依据。

对于一个要被分类的新文档dt离它最近的k个邻居被检索出来,这样形成dt的k个邻居,邻居间对dt的多数投票以决定它属于哪一类。

然而,使用kNN,我们需要选择一个合适的k值,成功的分类非常依赖于这个值。

此外,kNN是一个懒惰的学习方法(lazylearningmethod),因为它不需要建立学习模型,并且所有的计算都几乎集中在分类阶段,这也阻止了它应用于效率要求较高的领域,如动态挖掘大型网页仓储。

然而kNN在文本分类上的应用从很早[12]就开始了,并且被评价为在路透社新闻专线故事(一个基本数据集)上用于文本分类是最有效的方法。

Rocchio方法在一定程度上可以处理这些问题。

在它最简单的方式下,它通过总括实例对每个类别的贡献,使用泛化的实例(generalizedinstances属于一个类别实例的平均权值形成这个类的一个泛化的实例)作为模型来代替整个训练实例。

这种方法高效并且容易实现,因为学习一个分类器基本上可以归结为求平均权值,对一个新实例进行分类仅需要计算新实例和泛化实例之间的内积。

它是个基于相似度的算法,因为它使用这些泛化的实例作为计算基于内积的相似度。

此外,Rocchio方法通过概括实例对每个类别的贡献能够在一定程度上处理噪声数据。

例如,如果一个特征主要出现在一个特定的类的许多实例中,它在泛化的实例中将会对应一个较大的权值;

同样,如果一个特征主要出现在其他类别的训练实例中,它在泛化的实例中权值将会趋于零[1]。

因此,Rocchio方法可以在一定程度上过滤掉某些不相关的特征。

另一方面,Rocchio分类器的一个缺点是它限制了前提条件来设置线性可分的超平面,在这方面Rocchio算法比kNN算法[1]来的不给力。

由Lametal.[1]提出的泛化的实例集算法(generalizedinstancesetalgorithm)以试图克服kNN算法和线性分类器的缺点。

它的主要思想是算法为每个类构造了不止一个泛化的实例,而不像Rocchio方法那样在线性分类器中为每个类构建仅有一个泛化实例。

但是这种方法仍然存在一些缺点,其中一个是合适的k值很难选取和被选择用来构造每个局部泛化实例的正例的顺序,因为泛化实例集方法的性能依赖于它们;

其它的主要缺点是在获得一个泛化实例后从训练集中去除最高k个实例将直接影响进一步泛化实例的计算。

这些问题可能使得泛化实例集方法在实际应用中难以实行。

在认出每种技术的长处和短处后,我们提出一个新方法,称为kNNModel-based算法,简称为kNNModel,它结合了kNN和Rocchio分类器的优点。

所提出和方法和kNN、Rocchio算法一起被实现并集成到我们的文本分类原型中。

我们实验性地在两个文档集上评估了kNNModel,这两个文档集是20-newsgroup集和ModApte版的Reuters-21578新闻故事集,用重采样的t测试对比了它和kNN、Rocchio的实验结果。

文章的下面组织如下:

第二部分描述文本分类的体系结构和各组件的功能,也即我们的实现的原型。

第三部分介绍所提出的文本分类kNNmodel-based算法。

在第四部分中则是阐述实验性的结果和讨论。

第五部分总结全篇,并指出现存的一些问题和进一步的研究方向。

2文本分类的体系结构

在这一部分中,我们给出文本分类体系结构的一个概述并描述每个部分的功能。

文本分类通常由以下三个关键部分组成:

数据预处理、分类器构造和文档分类。

数据预处理实现了将原始文档转换成压缩文档表示的功能,并将统一地用于训练、验证和分类的各个阶段。

分类器构造实现了从训练集中归纳学习的功能,而文档分类则实现了文档分类的功能。

这三个部分在一起组成了文本分类。

下图Fig.1显示了文本分类体系结构总揽的原型。

虚线箭头表示分类过程的数据流,而实线则代表分类器构造过程的的数据量。

文本预处理,分类器构造和文档分类这三个部分将在下面几个小节中详细阐述。

2.1数据预处理

数据预处理是文本分类的一个基本部分,一般由六个子部件组成,它包括文档转换、功能词去除、词后缀删除、特征选择、字典构造、特征权值化。

在我们的原型中实现的每个组件的功能描述如下:

1.文档转换(Documentconversion)将不同类型的文档如XML、PDF、HTML、DOC等格式转换成普通的文本格式;

2.功能词去除(Functionwordremoval)将文档中的冠词、介词、连接词等删除掉;

3.词后缀规范化(Wordstemming)标准化词的后缀,例如将labelling转换成label,introduction转换成introduct。

4.特征选择(Featureselection)通过删除不相关或相关性小的特征来减小数据空间的维度。

在我们的原型中,我们选择信息增益(InformationGain)作为特征选择的标准。

5.词典构造(Dictionaryconstruction)构造一个统一的词典,用来作为将文档转换成特征向量的的参照。

向量中的每个特征对于词典中的一个词。

6.特征权值化(Featureweighting)在词典中,给每个词指派不同的权值。

我们使用标准化的特征频率联合倒转文档频率(termfrequencycombinedwithinversedocumentfrequencyTFIDF)作为我们文本分类原型的权值化功能。

信息增益和TFIDF功能分别定义如下:

在公示1中,P(t,c)是特征t出现在类别c的文档中的概率,P(t)是特征t出现在出现在文档中的概率,P(c)是文档属于类别c的概率。

在公式2中#(tk,di)是特征tk在文档di中出现的次数,#Tr(tk)是特征tk的文档频率,即特征tk在训练集文档Tr中的频率,|Tr|是训练集中的文档数。

Γ是至少出现在训练集中的一篇文档中的特征集合,wki是正规化的特征权值。

在数据预处理的最后,每篇文档都被转换成压缩的表现形式(特征权向量),并将被用于训练、验证和分类阶段。

2.2构造分类器

分类器的构造是文本自动分类的关键部分。

这部分的角色是通过学习预定义的文档来建立分类器,用来对未知的文档进行分类。

在我们的文本分类原型中,我们实现了三个分类算法:

kNN、Rocchio和kNNModel,除了我们将在第三部分介绍的kNNmodel-based算法,下面对每个算法作简单的描述。

2.2.1kNN算法

kNN是一个基于相似度的学习算法,并且由于它在包括文本分类的许多问题领域内非常有效而为人所熟知[5,7]。

给定一个测试文档dt(表示成词的权值向量)并选择好相似度度量,通过计算它与训练集中其他文档的相似度,kNN算法查找离他最近的k个邻居,由此形成dt的邻近的邻居,邻居里不同类的文档之间的权值投票以决定dt的类别。

2.22Rocchio算法

Rocchio方法即一个线性分类器。

给定一个训练集Tr,通过下面的公式,它直接对类别ci计算其泛化的实例Vci=(w1i,w1i,……,w|Γ|i)

i=1,2,……,m,m是训练集中的类别数。

在公式4中,Tci是属于类别ci的文档集合,

是不属于类别ci的文档集合,#Tci是Tci中的文档数。

另外,δ是用来设置不属于类ci文档相对重要性的参数控制。

如果δ=0,Vci概括着训练集中属于类ci的质心。

给定一个测试文档dt,Rocchio分类器计算dt和每一个泛化的实例之间的内积,并将dt分类到与dt距离最近的一个泛化的实例类别。

2.3文档分类

文档分类部分直接使用分类器构造阶段创建的模型对新文档进行分类。

对于kNN我们使用整个训练集来提供作为分类依据。

所有需要分类的文档必须先经过预处理,就像分类器构造阶段一样。

3kNNmodel-based算法

3.1kNNModel概念

kNN对于文本分类来说是一个简单有效的方法,然而,标准的kNN是基于实例的学习方法,它保持着所有的训练数据来进行分类。

这阻止了它在许多场合的应用,如动态网页分类。

提高其效率的一种方法是找出整个训练数据的一些代表来进行分类,例如,从训练集中建立一个典型的学习模型(代表的集合),并使用这个模型来进行分类。

这就是我们建立一个kNNmodel-base方法来提高其效率同时保持分类精确度的动机。

从另一方面来说,Rocchio方法非常有效,因学习一个分类器归结为给每个类建立一个泛化的实例,并用以作为分类的依据。

Rocchio为人熟知的一个缺点是它线性地划分实例空间的特性。

如图Fig.2所示,加号和圆圈分别代表两类不同类别的实例,小方块代表“加号”泛化出的实例,由于“加号”类出现在不相交的群体中,导致Rocchio方法建立的分类器失去了它们的大部分,因为这些实例的质心可能会超出这些群。

克服这个缺点的一个方法是为一个类建立多个局部代表,每个类的代表数依赖于给定的训练集的数据分布。

图Fig.3阐明了kNNModel对“加号”类的建模。

注:

为了简化描述,文档相似度(以及下面的图示说明)用欧几里得距离来描述,而不使用更普通的基于内积和余弦的相似度。

如果我们使用欧几里得距离作为我们的相似度度量的描述,显然许多同类标签实例在很多局部区域相互距离很近。

在每个局部区域,质心实例di,以Fig.4为例,加上一些额外信息如Num(di):

局部区域内的实例数,Sim(di):

局部区域内与质心di相似度距离最远的实例,这可能是局部区域的一个好的代表。

为了更好的反映给定训练集的局部和一般的分布,我们让这些代表和由Rocchio方法得到的泛化实例作为模型表示整个训练集。

这样做的一个优点是通过局部和整体的泛化,它更好的反映了每个类的数据分布,从而可能提高分类的精确度;

另一个优点是它减少了用于分类的实例数,因此提高了效率。

群组不相交的问题可以通过为一个类创建多个代表的方法轻易的解决。

对于一个要被分类的新实例,我们考虑它与每个泛化实例的距离并看它是否落入各个代表的影响区域,然后决定它归为哪一类。

在模型构造过程中,每个实例都有一些邻居,这些邻居覆盖了同类型的最多实例,称为局部邻居(localneighborhood)。

在这些局部邻居里,最大的一个叫做全局邻居,可以被获得并被视为代表所有被覆盖的实例的一个代表。

对于还没有被任何代表覆盖的实例,我们重复上述操作步骤,直到所有的实例都被所构造的代表覆盖。

最后kNNModel创建的模型由构造的代表和每个类泛化的实例组成。

显然,在我们的模型构造过程中不需要选择一个确定的k值,被代表覆盖的实例数可以看作是最优的k值,而且它对于不同的代表值也是不同的,它由局部数据的分布自动确定。

此外,使用一组构造的代表加上每个类别泛化的实例作为模型减少了分类的数据量,从而提高了效率,而且,由于同时通过局部和全局的泛化,模型更能反映出每个类真实数据的分布,这可能会提高分类的精确度。

最后群组不相交的问题可以通过给每个类构造多个代表轻易的解决掉。

3.2建模与分类算法

设D为n个预标签的文档的集合{d1,d2,……,dn},m个类的集合为{c1,c2,……,cm}.对于每个文档di∈D,都表示成向量的形式(w1i,w1i,……,w|Γ|i),其中wki是第i个文档的第k个特征,|Γ|是特征的总数。

同样,每个特征对应训练集中(文本去特征词、规范词后缀和特征选择后)的一个词。

在kNNmodel-based算法中,我们使用信息增益来作为默认的特征选择标准,联合特征频率和反向文档频率(TFIDF)作为默认的权值函数,余弦函数Δ[14]作为默认的相似度度量。

详细的模型构造算法描述如下:

1.从给定的训练集中构造一个相似度矩阵;

2.给每个实例标为“ungrouped”,设置集合M=Φ;

3.对每个“ungrouped”实例,找到其局部邻居;

4.在步骤3中获得的所有局部邻居里找到它的全局邻居Ni。

构造代表(Cls(di),Sim(di),Num(di),Rep(di)),并加入M,将Ni覆盖的所有实例设置为“grouped”;

5.重复步骤3和4,直到训练集中的所有的实例都被设置为“grouped”;

6.对每个类ci计算其泛化实例Vci,i=1,2,…,m,并将(ci,0,n,Vci)加入M;

7.模型M由所有从以上的学习过程中得到的代表组成。

在上述算法中,符号M表示用来存储构造的模型的集合,即代表的集合。

如果Δ(di,dj)>

=Sim(dj),则认为di由代表(Cls(dj),Sim(dj),Num(dj),Rep(dj))覆盖,典型代表(Cls(dj),Sim(dj),Num(dj),Rep(dj))中的元素分布为:

dj的类别,由Nj到dj覆盖的实例相互之间最低的相似度,Nj覆盖的实例数,一个代表dj本身的表示。

在第4步中,如果不止一个邻居群具有相同的最大邻居数,我们选择Sim(dj)值最大的一个,即密度最高的一个作为代表。

在步骤6里,n是训练的实例数。

因为余弦相似度的最小值是0,我们将Sim(Vci)设为0,i=1,2,…m。

这样的设置允许属于每个类的整体实例对新的实例进行分类时都有一定的影响。

分类算法描述如下:

1.设置Cont(ci)=0,i=1,2……,m

2.对一个待分类的新实例dt,按照如下方法计算它在模型中和所有代表的相似度:

对每一个代表(Cls(dj),Sim(dj),Num(dj),Rep(dj)),如果Δ(di,dj)>

=Sim(dj),则将贡献值Δ(di,dj)加入到Cont(Cls(dj))中,即Cont(Cls(dj))=Cont(Cls(dj))+Δ(di,dj);

3.Cont(cx)=max{Cont(ci)|i=1,2,……,m},将dt分类到cx中;

在算法中,Δ(di,dj)>

=Sim(dj)表示(Cls(dj),Sim(dj),Num(dj),Rep(dj))覆盖dt。

在文本分类中,训练集中含有一定量的噪声是很常见的,例如合适的特征丢失,印刷错误或人为的分类错误[1]。

为了提高kNNModel的分类精确度,我们在模型构造过程中集成修剪工作,通过修改算法中第3步的模型构造过程以允许每个局部邻居覆盖ε个不同类别的实例(称为误差容忍率)。

这是进一步提高kNNModel分类精确度的尝试,实验性的结果在下一部分呈现。

4实验和评估

4.1实验环境

实验的最终目的是评估我们的kNNModel方法在文本分类中的效率和效力。

两个广泛应用的文本分类算法:

kNN和Rocchio也实现了并作为和我们的原型对比基准。

所有的实验结果记录都基于十倍交叉验证方法(tenfoldcrossvalidationmethod)和所谓的F1-measure[12]。

F1-measure是查准率(precision)和查全率(recall)的调和平均数,它们定义如下:

在公示6中,查准率和查全率是两个在文本分类中标准的度量,它在给定的类别中评价算法的效果[12]。

precision和recall分别定义如下:

在上述公式中,对于类别c,truepositive是属于正确的划分为类别c的文档数;

falsepositive是错误的划分为类别c的文档数;

falsenegative是属于类别c但却被划分为其他类别的文档数。

除了F1,macroaveragedF1也被用于评估在两个给定数据集上不同算法的总体性能。

macroaveragedF1计算每个类别的F1值,并在每个类别的F1score上取平均值。

给定一个拥有m个类别的训练集,设第i个类别的F1值为F1(i),macroaveragedF1定义如下:

此外,我们使用重采样的t测试(resampledttest)[13]来度量两种分类方法在性能上的统计性差别。

这个测试在基于n次测试的结果上比较了两种分类方法的性能。

在每次测试中,数据集随机地分成了训练集和测试集两部分。

分别记录A、B两种方法在测试集上的误差率,设PA(i)、PB(i)为方法A和B在第i次测试中的误差率,然后Student’sttest可以用统计计算:

其中

,这个统计量服从n-1自由度的t分布。

如果实验中有10次测试,如果|t|>

t9,0.975=2.262[15],两个分类方法就其性能来说的空前提可以被舍弃。

4.2实验数据集

实验基于两个经常用来做文本分类研究的公共数据集:

20-newsgroup集和ModApte版的Reuters-21578新闻故事集。

4.2.1Reuters-21578文集

Reuters数据集已经被用作许多文本分类实验的实验数据。

数据最初是由Carnegiegroup于1987年从路透社新闻专线收集,现在在文本分类社区广泛应用的至少有5个版本。

本实验所用的数据集为ModApte版的Reuters-21578新闻故事集,可以从http:

//aaadaviddlewisaaa/resources/testcollections/reuters21578下载。

在我们的实验中,我们使用这个文集中7个频率最高的类别作为我们的训练和测试数据。

每个子集包含200篇文档。

这7个频率最高的类是:

{Acq,Corn,Crude,Earn,Interest,Ship,Trade}。

4.2.220-newsgroup文集

20-newsgroup文集包含将近20,000个新闻组的文档,大致的均分成涉及20个不同的新闻组。

我们的实验评估所选的版本为20-news-18828version,可以从bbb:

//aaaai.mit.edu/∼jrennie/20Newsgroups下载。

在这个数据集中,副本被移除,每篇文档仅保留头部“From”和“Subject”。

在我们的实验中,我们选择这个文集的一个子集,它包括20个类别,每个类别包含200篇文档。

所有用来进行训练和测试的文档都要经过预处理阶段,包括文档转换、功能词去除、词后缀标准化、特征选择和特征权值化。

在我们的文本分类原型中,我们使用信息增益(InformationGain)作为特征选择标准,正规化的TFIDF作为权值化功能。

4.3评估

4.3.1实验1

这个实验的目标是评价在上述两个数据集上不同算法的macroaveragedF1值,每个算法的基本参数设置概括在表Table1中,在所有的设置中根据性能选择最优的参数。

表Tables2和Tables3分别列出每个类别的每种算法的F1值和对应的macroaveragedF1值。

不同的参数值在每种算法上的测试以保证实验性结果真实地反映算法的性能。

kNN算法中的k值以步长5从5到95变化;

Rocchio算法中的δ值以0.1的步长从0.1到1.0变化;

kNNModel中的ε值以步长1从0到9变化。

在表Table1中,表头IG是InformationGain的缩写。

这一列的值是预定义的用以在不同的数据集上进行特征选择的临界值。

其它的表头信息在2.2节都有过介绍。

表Tables2和Tables3列出了实验结果,数据显示了kNNModel比kNN和Rocchio的性能要好。

对于3个算法的详细统计量评估将在实验3中给出。

4.3.2实验2

在实验1中,基于对每种算法建立的模型,我们以分类一批文档作为测试评估算法的效率。

和实验1设置一样,我们建立两个子集来进行测试,一个子集包含从Reuters-21578文集中随机选出1400篇文档,另一个子集从20-newsgroup文集中随机选择4000篇文档。

实验结果的数据见表Table4,表头NOD表示文档的数目,这一列的值为用来进行测试的文档数。

其他列的值表示不同算法在测试上所花费的时间(以秒计算)。

从实验的结果明显的可以看出kNNModel比kNN更有效,因为它的分类只需保留少量代表,并且也比得上Rocchio算法。

所以,kNNModel在文本分类的一些情况下是对kNN的一个不错的替代算法,如动态挖掘大型web仓储中由于kNN的低效而被认为是不合适的。

4.3.3实验3

这个实验的目标是测量任意两种方法在性能上的统计量差别。

在基于每个数据集上进行的10次测试所获得的实验数据,我们对比了任意两个分类方法的性能。

在每次测试中,数据集被随机地划分成两个同样大小的子集,一个用来做训练,另外一个做为测试用。

在两个不同的数据集上进行的每次测试结果分别列在表Tables5和Tables6中。

从这两个表中,任意两个方法性能的统计量差别可以很容易地使用重取样的t测试(resampledttest)计算出,结果分别列在表Tables7和Tables8中。

在表Tables7中,例如,5.71(+)表示kNNModel就其在Reuters-21578数据集上所表现出的性能比kNN好,即对应|t|=5.71>

t9,0.975=2.262。

在表T

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 临床医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1