k-means文本聚类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
1 概念及应用背景 (1)
1.1概念 (1)
1.2应用背景................................................................................... 错误!未定义书签。

2 系统设计框架..................................................................................... 错误!未定义书签。

2.1总体框架................................................................................... 错误!未定义书签。

2.2文本聚类的具体过程 (1)
3应用程序具体实现及说明 (3)
3.1获取文档的输入....................................................................... 错误!未定义书签。

3.2提取文档的TF/IDF权重 (3)
3.3 k-means进行数据聚类 (4)
4 实验结果及分析................................................................................. 错误!未定义书签。

4.1实验结果................................................................................... 错误!未定义书签。

4.2结果分析................................................................................... 错误!未定义书签。

5结论...................................................................................................... 错误!未定义书签。

5.1实验结论................................................................................... 错误!未定义书签。

5.2个人感受................................................................................... 错误!未定义书签。

附录:项目框架和主程序代码............................................................. 错误!未定义书签。

1 概念及应用背景
1.1概念
文本聚类(Text clustering)是在没有学习的条件下对文本集合进行组织或划分的过程,其主要依据著名的聚类假设:同类的文档相似度较大,而不同类的文档相似度较小。

作为一种无监督的机器学习方法,聚类由于不需要训练过程,以及不需要预先对文档手工标注类别,因此具有一定的灵活性和较高的自动化处理能力,已经成为对文本信息进行有效地组织、摘要和导航的重要手段,为越来越多的研究人员所关注。

1.2文本聚类的具体过程
1 文本信息的预处理
文本聚类的首要问题是如何将文本内容表示成为数学上可分析处理的形式,即建立文本特征,以一定的特征项(如词条或描述)来代表目标文本信息。

要建立文本信息的文本特征,常用的方法是:对文本信息进行预处理(词性标注、语义标注),构建统计词典,对文本进行词条切分,完成文本信息的分词过程。

对于中文的处理,Lucene中文分词组件je-analysis.jar是个不错的包,其分词方法主要有以下两种:
MMAnalyzer analyzer = new MMAnalyzer();
//采用正向最大匹配的中文分词算法,相当于分词粒度等于0
MMAnalyzer analyzer = new MMAnalyzer(int wordLength);
//参数为分词粒度:当字数等于或超过该参数,且能成词时,该词就被切分出来
2 文本信息特征的建立
文本信息的特征表示模型有多种,常用的有布尔逻辑型、向量空间型、概率型以及混合型等。

其中,向量空间模型(Vector Space Model,VSM) 是近几年来应用较多且效果较好的方法之一。

1969 年,Gerard Salton 提出了向量空间模型VSM ,它是文档表示的一个统计模型。

该模型的主要思想是:将每一文档都映射为由一组规范化正交词条矢量张成的向量空间中的一个点。

对于所有的文档类和未知文档,都可以用此空间中的词条向量(T1 ,W 1 ,T 2 ,W2 ,…, Tn , Wn )来表示( 其中,Ti 为特征向量词条;Wi 为Ti 的权重)。

一般需要构造一个评价函数来表示词条权重,其计算的唯一准则就是要最大限度地区别不同文档。

这种向量空间模型的表示方法最大的优点在于将非结构化和半结构化的文本表示为向量形式,使得各种数学处理成为可能。

3 文本信息特征集的缩减
VSM 将文本内容表示成数学上可分析处理的形式,但是存在的一个问题是文档特征向量具有惊人的维数。

因此,在对文本进行聚类处理之前,应对文本信息特征集进行缩减。

通常的方法是针对每个特征词条的权重排序,选取预定数目的最佳特征作为结果的特征子集。

选取的数目以及采用的评价函数都要针对具体问题来分析决定。

4 文本聚类
在将文本内容表示成数学上可分析处理的形式后,接下来的工作就是在此数学形式的基础上,对文本进行聚类处理。

文本聚类主要有 2 种方法:基于概率[6] 和基于距离。

基于概率的方法以贝叶斯概率理论为基础,用概率的分布方式描述聚类结果。

基于距离的方法,就是以特征向量表示文档,将文档看成向量空间中的一个点,通过计算点之间的距离进行聚类。

目前,基于距离的文本聚类比较成熟的方法大致可以分为 2 种类型:层次凝聚法和平面划分法。

对于给定的文件集合D={d1, d2,…,di ,…, dn},层次凝聚法具体过程如下:
(1) 将D中的每个文件di 看成一个具有单个成员的簇ci ={di}这些簇构成了D的一个聚类C={c1 ,c2 ,…,ci ,…,cn};
(2) 计算C中每对簇(ci ,cj)之间的相似度sim{ci ,cj};
(3) 选取具有最大相似度的簇对(ci ,cj)将ci和cj合并为一个新的簇ck =sim ci∪cj,从而构成了D的一个新的聚类C =(c1, c2,…,cn-1);
(4) 重复上述步骤,直至C中剩下一个簇为止。

该过程构造出一棵生成树,其中包含了簇的层次信息以及所有簇内和簇间的相似度。

对于给定的文件集D={d1 , d2 ,…,di ,…, dn},平面划分法的具体过程如下:
(1) 确定要生成簇的数目k;
(2) 按照某种原则生成k个聚类中心作为聚类的种子S=(s1,s2,…,si,…,sk);
(3) 对D中的每个文件di,依次计算它与各个种子sj的相似度sim (di,sj);
(4) 选取具有最大相似度的种子,将di归入以sj为聚类中心的簇cj,从而得到D的一个聚类C={ci ,cj};
(5) 重复此步骤若干次,以得到较为稳定的聚类结果。

这2种类型各有优缺点。

层次凝聚法能够生成层次化的嵌套簇,准确度较高。

但在每次合并时,需要全局地比较所有簇之间的相似度,并选出最佳的2个簇,因此执行速度较慢,不适合大量文件的集合。

而平面划分法相对来说速度较快,但是必须事先确定k 的取值,且种子选取的好坏对群集结果有较大影响。

2 k-means聚类方法原理
计算两篇文档的相似度,最简单的做法就是用提取文档的TF/IDF权重,然后用余弦定理计算两个多维向量的距离。

能计算两个文本间的距离后,用标准的k-means算法就可以实现文本聚类了。

这里会用到TF/IDF权重,用余弦夹角计算文本相似度,用方差计算两个数据间欧式距离,用k-means进行数据聚类。

其具体实现过程为:
图2-1 文本聚类具体实现过程
2.1提取文档的TF/IDF权重
TF-IDF(term frequency–inverse document frequency)的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。

TFIDF实际上是:TF*IDF,TF词频(Term Frequency),IDF反文档频率(Inverse Document Frequency)。

TF表示词条t在文档d中出现的频率。

IDF的主要思想是:如果包含词条t的文档越少,IDF越大,则说明词条t具有很好的类别区分能力。

假如document1和document2的term的TF/IDF分别是t11,t12,t13,...t1n和t21,t22,t23,...,t2n.他们之间的相似性可以用余弦定理来表示。

则:cos(d1,d2) = d1和d2的内积/(d1的长度*d2的长度) = (t11*t21 + t12*t22 + t13*t23 + ... + t1n*t2n)/(|d1|*|d2|);
d1 = sqrt(t11*t11 + t12*t12 + t13*t13 + ... + t1n*t1n)。

夹角越大,相似性越大;为1则表示d1和d2一致。

例如一篇文档文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是0.03 (3/100)。

一个计算文件频率(DF) 的方法是测定有多少份文件出现过“母牛”一词,然后除以文件集里包含的文件总数。

所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其文件频率就是0.0001 (1000/10,000,000)。

最后,TF-IDF分数就可以由计算词频除以文件频率而得到。

以上面的例子来说,“母牛”一词在该文件集的TF- IDF分数会是300 (0.03/0.0001)。

下面简单介绍下基本的计算步骤:
(1) 文档预处理:1)文档分词;2)移除停用词;3)单词正规化处理
(2) 分出的单词作为索引项(或单词表),它们代表的就是向量空间的项向量
(3) 计算项权值:这包括要计算1)词频;2)倒排文件频率;3)TF-IDF权值
(4) 计算文档之间的相似度,用余弦相似度(cosine similarity)一同使用于向量空间模型中,用以判断两份文件之间的相似性。

这里将文档分词从其中提取文档的TF/IDF权重中分离出来,文档分词采用je-analysis-1.5.3.jar中的jeasy.analysis.MMAnalyzer类,该类需依赖于lucene2.4~2.9版本的包,使用方法很简单:
MMAnalyzer mm = new MMAnalyzer();
String result = mm.segment(str,splitor);// splitor是切词后各词组的分隔符,这里使用" "
如文档内容为字符串"奥运拳击入场基本分邹市明夺冠对手浮出水面",则分词后的结果为"奥运拳击入场基本分邹市明夺冠对手浮出水面"。

2.2 k-means聚类算法
k-means 算法接受输入量k ;然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。

聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。

k-means 算法的工作过程说明如下:
(1) 从n个数据对象任意选择k 个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;
(2) 再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);
(3) 不断重复这一过程直到标准测度函数开始收敛为止。

一般都采用均方差作为标准测度函数。

k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。

具体如下:
输入:k, data[n];
(1) 选择k个初始中心点,例如c[0]=data[0],…c[k-1]=data[k-1];
(2) 对于data[0]….data[n],分别与c[0]…c[n-1]比较,假定与c[i]差值最少,就标记为i;
(3) 对于所有标记为i点,重新计算c[i]={ 所有标记为i的data[j]之和}/标记为i的个数;
(4) 重复(2)(3),直到所有c[i]值的变化小于给定阈值。

k-means算法的复杂度为:O(nkt)。

其中:n为对象个数,k为聚类数,t为迭代次数。

通常k、t<< n,所以k-means算法具有很高的效率。

同时k-means算法具有较强的可伸缩性,除了生成k个聚类外,还可生成每个聚类的中心,因此被广泛应用。

这里将文档聚成3个聚类。

首先生成k-means的输入数据,是一个联合数组,第一维表示文档个数,第
二维表示所有文档分出来的所有词
double[][] data = new double[docs.length][];
然后初始化k-means算法,第一个参数表示输入数据,第二个参数表示要聚成几个类
WawaKMeans kmeans = new WawaKMeans(data, K);
最后获取聚类结果并将结果输出。

相关文档
最新文档