文本聚类算法介绍

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44977889

http://www.llwjy.com/blogdetail/41b268618a679a6ec9652f3635432057.html

个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~

-------------------------------------------------------------------------------------------------

本博客通过对当前比较成熟的聚类算法分析,介绍如何对非结构的数据(文档)做聚类算法,第一大部分的内容来源百度百科,第二部分是对文本聚类算法思想的介绍。这里因为各种原因就不给出具体的代码实现,如若有兴趣,可以在后面留言一起讨论。

###################################################################################

#####以下内容为聚类介绍,来源百度百科,如果已经了解,可以直接忽略跳到下一部分

###################################################################################

聚类概念

聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘的一个重要算法。聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点。聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。

算法用途

在商业上,聚类可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。它作为数据挖掘中的一个模块,可以作为一个单独的工具以发现数据库中分布的一些深层的信息,并且概括出每一类的特点,或者把注意力放在某一个特定的类上以作进一步的分析;并且,聚类分析也可以作为数据挖掘算法中其他分析算法的一个预处理步骤。

聚类分析的算法可以分为划分法(Partitioning Methods)、层次法(Hierarchical Methods)、基于密度的方法(density-based methods)、基于网格的方法(grid-based methods)、基于模型的方法(Model-Based Methods)。

算法分类

很难对聚类方法提出一个简洁的分类,因为这些类别可能重叠,从而使得一种方法具有几类的特征,尽管如此,对于各种不同的聚类方法提供一个相对有组织的描述依然是有用的,为聚类分析计算方法主要有如下几种:

划分法

划分法(partitioning methods),给定一个有N个元组或者纪录的数据集,分裂法将构造K个分组,每一个分组就代表一个聚类,K<N。而且这K个分组满足下列条件:

(1) 每一个分组至少包含一个数据纪录;

(2)每一个数据纪录属于且仅属于一个分组(注意:这个要求在某些模糊聚类算法中可以放宽);

对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后的分组方案都较前一次好,而所谓好的标准就是:同一分组中的记录越近越好,而不同分组中的纪录越远越好。

大部分划分方法是基于距离的。给定要构建的分区数k,划分方法首先创建一个初始化划分。然后,它采用一种迭代的重定位技术,通过把对象从一个组移动到另一个组来进行划分。一个好的划分的一般准备是:同一个簇中的对象尽可能相互接近或相关,而不同的簇中的对象尽可能远离或不同。还有许多评判划分质量的其他准则。传统的划分方法可以扩展到子空间聚类,而不是搜索整个数据空间。当存在很多属性并且数据稀疏时,这是有用的。为了达到全局最优,基于划分的聚类可能需要穷举所有可能的划分,计算量极大。实际上,大多数应用都采用了流行的启发式方法,如k-均值和k-中心算法,渐近的提高聚类质量,逼近局部最优解。这些启发式聚类方法很适合发现中小规模的数据库中小规模的数据库中的球状簇。为了发现具有复杂形状的簇和对超大型数据集进行聚类,需要进一步扩展基于划分的方法。

使用这个基本思想的算法有:K-MEANS算法、K-MEDOIDS算法、CLARANS算法;

层次法

层次法(hierarchical methods),这种方法对给定的数据集进行层次似的分解,直到某种条件满足为止。具体又可分为“自底向上”和“自顶向下”两种方案。

例如,在“自底向上”方案中,初始时每一个数据纪录都组成一个单独的组,在接下来的迭代中,它把那些相互邻近的组合并成一个组,直到所有的记录组成一个分组或者某个条件满足为止。

层次聚类方法可以是基于距离的或基于密度或连通性的。层次聚类方法的一些扩展也考虑了子空间聚类。层次方法的缺陷在于,一旦一个步骤(合并或分裂)完成,它就不能被撤销。这个严格规定是有用的,因为不用担心不同选择的组合数目,它将产生较小的计算开销。然而这种技术不能更正错误的决定。已经提出了一些提高层次聚类质量的方法。

代表算法有:BIRCH算法、CURE算法、CHAMELEON算法等;

密度算法

基于密度的方法(density-based methods),基于密度的方法与其它方法的一个根本区别是:它不是基于各种各样的距离的,而是基于密度的。这样就能克服基于距离的算法只能发现“类圆形”的聚类的缺点。

这个方法的指导思想就是,只要一个区域中的点的密度大过某个阈值,就把它加到与之相近的聚类中去。

代表算法有:DBSCAN算法、OPTICS算法、DENCLUE算法等;

图论聚类法

图论聚类方法解决的第一步是建立与问题相适应的图,图的节点对应于被分析数据的最小单元,图的边(或弧)对应于最小处理单元数据之间的相似性度量。因此,每一个最小处理单元数据之间都会有一个度量表达,这就确保了数据的局部特性比较易于处理。图论聚类法是以样本数据的局域连接特征作为聚类的主要信息源,因而其主要优点是易于处理局部数据的特性。

网格算法

基于网格的方法(grid-based methods),这种方法首先将数据空间划分成为有限个单元(cell)的网格结构,所有的处理都是以单个的单元为对象的。这么处理的一个突出的优点就是处理速度很快,通常这是与目标数据库中记录的个数无关的,它只与把数据空间分为多少个单元有关。

代表算法有:STING算法、CLIQUE算法、WAVE-CLUSTER算法;

模型算法

基于模型的方法(model-based methods),基于模型的方法给每一个聚类假定一个模型,然后去寻找能够很好的满足这个模型的数据集。这样一个模型可能是数据点在空间中的密度分布函数或者其它。它的一个潜在的假定就是:目标数据集是由一系列的概率分布所决定的。

通常有两种尝试方向:统计的方案和神经网络的方案。

###################################################################################

#####以下内容为文本聚类方法分析

###################################################################################

文本聚类

目前针对聚类算法的研究多数都是基于结构化数据,很少有针对非结构化数据的,这里就介绍下自己对这方面的研究。由于源码目前牵扯到一系列的问题,所以这里就只介绍思想,不提供源码,如有想进一步了解的,可以在下方留言。

文本聚类(Text clustering)文档聚类主要是依据著名的聚类假设:同类的文档相似度较大,而不同类的文档相似度较小。作为一种无监督的机器学习方法,聚类由于不需要训练过程,以及不需要预先对文档手工标注类别,因此具有一定的灵活性和较高的自动化处理能力,已经成为对文本信息进行有效地组织、摘要和导航的重要手段。

我们本次的介绍重点就是介绍如何对非结构化的文本做聚类。

文本聚类思想

由于目前对结构化的数据的聚类研究已经十分成熟,所以我们就要想办法把这种非结构化的数据转化为结构化的数据,这样也许就会很好处理。

由于自己的工作方向是搜索引擎,所以自己的一些算法思想也都是基于它来的,对于如何将非结构话的数据转化为结构化的数据,可以参照下博客《基于lucene的案例开发:索引数学模型》

下面给出具体的算法说明:

第一步:记录分词

这里为了简化模型,我们就直接默认一篇文本只有一个属性。在这一步中,我们需要对所有的文档做初始化分析,过程中我们需要统计如下几个值:第N篇文档包含哪些词元、第N篇文档中的词元M在文档N中出现的次数、词元M在多少篇文档中出现、词元M在所有文档中出现的次数。在这一步中,需要使用到分词技术,当处理中文的时候,建议使用IK等中文分词器,其他通用分词器处理的效果不是太好。这一步将文档转化为Document = {term1,
term2, term3 …… termN};

第二步:计算权重

这里的计算权重方法和之前的稍微有一点区别,具体计算公式如下:

通过这一步的处理,我们就将Document = {term1, term2, term3 …… termN}转化为DocumentVector = {weight1, weight2, weight3 …… weightN}

第三步:N维空间向量模型

我们将第二步得到的DocumentVector放到N维空间向量模型中(N是词元的总数),文档D在m坐标上的映射为文档D中的m词元的权重,具体如下图:

第四步:最相近的文档

在N维空间向量模型中,我们规定夹角越小,两篇文档就越相似。这一步,我们需要找到两个夹角最下的两个向量(即最相似的两篇文档);

第五步:合并文档

将第四步得到的两篇文档视为一篇文档(即将这两篇文档当作一个类别);

第六步:验证

判断这时的文档数目是否满足要求(目前剩余的文档数是否等于要聚类的类别数),如果满足要求结束本次算法,不满足要求,跳到第二步循环2、3、4、5、6。

算法评估

目前在自己工作笔记本(配置一般,内存4G)上的测试结果是聚类1W篇文档耗时在40s~50s,下图是对10条数据的聚类效果截图:

时间: 2024-11-06 01:40:02

文本聚类算法介绍的相关文章

基于位置信息的聚类算法介绍及模型选择

百度百科 聚类:将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异."物以类聚,人以群分",在自然科学和社会科学中,存在着大量的分类问题.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法.聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的. 分类和聚类算法一直以来都是数据挖掘,机器学习领域的热门课题,因此产生了众多的

FCM聚类算法介绍

FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小.模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则是一种柔性的模糊划分.在介绍FCM具体算法之前我们先介绍一些模糊集合的基本知识. 1 模糊集基本知识 首先说明隶属度函数的概念.隶属度函数是表示一个对象x隶属于集合A的程度的函数,通常记做μA(x),其自变量范围是所有可能属于集合A的对象(即集合A所在空间中的所有点),取值范围是[0,1],即0<=

文本聚类算法总结

以下内容为聚类介绍,除了红色的部分,其他来源百度百科,如果已经了解,可以直接忽略跳到下一部分. 聚类概念      聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法,同时也是数据挖掘的一个重要算法.聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是多维空间中的一个点.聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性. 算法用途      在商业上,聚类可以帮助市场

文本挖掘之文本聚类(MapReduce)

刘 勇  Email:[email protected] 简介 针对大数量的文本数据,采用单线程处理时,一方面消耗较长处理时间,另一方面对大量数据的I/O操作也会消耗较长处理时间,同时对内存空间的消耗也是很大,因此,本文引入MapReduce计算模型,以分布式方式处理文本数据,以期提高数据处理速率.本文结合Kmeans和DBSCAN算法,对上述算法进行改进,其中借鉴Kmeans聚类方法(类别个数的确定性)以及DBSCAN聚类方法(基于密度),并在数据处理过程中引入多个Reducer对数据进行归并

[python] 使用Jieba工具中文分词及文本聚类概念

声明:由于担心CSDN博客丢失,在博客园简单对其进行备份,以后两个地方都会写文章的~感谢CSDN和博客园提供的平台.        前面讲述了很多关于Python爬取本体Ontology.消息盒InfoBox.虎扑图片等例子,同时讲述了VSM向量空间模型的应用.但是由于InfoBox没有前后文和语义概念,所以效果不是很好,这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识.        相关文章:        [Python爬虫]

基于朴素贝叶斯分类器的文本分类算法

源代码下载:NaviveBayesClassify.rar Preface 文本的分类和聚类是一个比较有意思的话题,我以前也写过一篇blog<基于K-Means的文本聚类算法>,加上最近读了几本数据挖掘和机器学习的书籍,因此很想写点东西来记录下学习的所得. 在本文的上半部分<基于朴素贝叶斯分类器的文本分类算法(上)>一文中简单介绍了贝叶斯学习的基本理论,这一篇将展示如何将该理论运用到中文文本分类中来,具体的文本分类原理就不再介绍了,在上半部分有,也可以参见代码的注释. 文本特征向量

文本挖掘之文本聚类(借力打力)

刘勇    Email:[email protected] 简介 在文本相似度判定中,作者将该算法用于文本聚类中,其核心思想通过比较两个文本向量中元素的相似度,即向量中所含的元素相似个数越多,则两个向量越相似,继而上述文本越相似.作者在短文本相似判定中采用了余弦相似度该算法来实现,本文借鉴数学集合取交集,借用现有组件来实现上述算法功能,继而减少工作量,也具备便捷性,也能取得较好的效果. 数学集合 该方法的思想为:先将文本数据采用中文切分,将其切分为词汇(词组.短语.词汇的统称,本文不做细粒度划分

文本挖掘之文本聚类(DBSCAN)

刘勇   Email:[email protected] 简介 鉴于基于划分的文本聚类方法只能识别球形的聚类,因此本文对基于密度的文本聚类算法展开研究.DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种典型的基于密度的聚类方法,可以找出形状不规则的聚类,而且聚类时无需事先知道聚类的个数.  基本概念 DBSCAN算法中有两个核心参数:Eps和MinPts(文献与程序中经常使用).前者定义为邻域半径,后者定义

看完这篇文章,包你懂得如何用Python实现聚类算法的层次算法!

什么是聚类 将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类.由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异.聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法. 聚类分析起源于分类学,但是聚类不等于分类.聚类与分类的不同在于,聚类所要求划分的类是未知的.聚类分析内容非常丰富,有系统聚类法.有序样品聚类法.动态聚类法.模糊聚类法.图论聚类法.聚类预报法等. 起步 层次聚类( Hierarchical Cluste