常用的聚类分析算法

下面将对常用的聚类分析算法做个简单介绍。

图1 图常用聚类算法之间的层次关系

1 基于划分的算法

划分聚类在一步中就产生所有的簇,而不要几个步骤。虽然在算法内部可以产生几个不同的簇,但划分聚类的结果只产生一个簇集。由于仅有一个簇集作为输出,所以用户必须事先给出聚类的数目,还需要用度量函数或者准则函数来判定所给出的解的优劣程度。

划分方法的基本思想是,给定一个n个样本的数据集,划分方法将数据划分为k个划分(k<=n),每个划分表示一个簇,同时满足:

第一,每个簇至少包含一个样本。

第二,每个样本必须属于且仅属于一个簇。

给定要创建的划分的数目k,首先创建一个初始划分然后利用一个循环定位技术通过将对象从一个划分移动到另一个划分来改善划分质量。典型的划分方法包括:K均值、K-medoids、CLARA、CLARANS等。算法流程如图3。

算法:根据聚类中的均值进行聚类划分的K均值算法。

输入:聚类个数K,以及包含n个数据对象的数据库。

输出:满足方差最小标准的k个聚类。

处理流程:

(1)从n个数据对象任意选择k个对象作为初始聚类中心:

(2)循环(3)到(4)直到每个聚类不再发生变化为止:

(3)根据每个聚类对象的均值中心对象,计算每个对象与这些中心对象的距离,并根据最小距离重新对相应对象进行划分;

(4)重新计算每个有变化聚类的均值中心对象;

图3 基于划分的聚类算法思想

划分算法一般要求所有的数据都装入内存,限制了它们在大规模数据集上的应用它们还要求用户预先指定聚类的个数,但在大多数实际应用中,最终的聚类个数是未知的另外,划分算法只使用某一固定的原则来决定聚类,这就使得当聚类的形状不规则或者大小差别很大时,聚类的效果不是很好。

2 基于层次的算法

层次的方法对给定数据集合进行层次的分解。根据层次的分解如何形成,层次的方法可以被分为凝聚的或分裂的方法。凝聚的方法,也称为自底向上的方法,一开始将每个对象作为单独的一个组,然后继续地合并相近的对象或组,直到所有的组合并为一个层次的最上层,或者达到一个终止条件。分裂的方法,也称为自顶向下的方法,一开始将所有的对象置于一个簇中。在迭代的每一步中,一个簇被分裂为更小的簇,直到最终每个对象在单独的一个簇中,或者达到一个终止条件。

CURE采用了一种新颖的层次聚类法,该算法选择属于自下而上聚合方法与自上而下分解的中间做法。它不用单个质心或对象来代表一个簇,而是选择数据空间中固定数目的具有代表性的点。一个簇的代表点通过如下方式产生首先选择簇中分散的对象,然后根据一个特定的分数或收缩因子向簇心“收缩”或移动他们。在算法的每一步,有最近距离的代表点对每个点来自于一个不同的簇的两个簇被合并。每个簇有多于一个的代表点使得可以适应非球形的几何形状。簇的收缩或凝聚可以有助于控制孤立点的影响。因此,对孤立点的处理更加健壮,而且能够识别非球形和大小变化较大的簇。对于大型数据库,它也具有良好的伸缩性,而且没有牺牲聚类质量。

针对大型数据库,CURE采用随机取样和划分两种方法的组合一个随机样本首先被划分,每个划分被部分聚类。这些结果簇然后被聚类产生希望的结果。

CURE算法的主要处理步骤说明如下:

(1)从原数据对象中抽取一个随机样本s,它包含s个对象;

(2)将样本s分割为一组划分

(3)将各划分局部聚类成q个聚类,其中q>1;

(4)通过随机采样消除异常数据,即若一个聚类增长太慢,就除去它;

(5)对部分聚类进行再聚类,落在每个新获得的聚类中的代表点,则根据收缩因子收缩或向聚类中心移动。这些点将要用于代表并描绘出聚类的边界。

(6)用相应的簇标签来标记数据。

绝大多数聚类算法或者擅长处理球形和相似大小的聚类,或者在存在孤立点时变得比较脆弱。CURE(Clustering Using Representatives)解决了偏好球形和相似大小的问题,在处理孤立点上也更加健壮。在孤立点存在的情况下,CURE也可以产生高质量的聚类结果,支持复杂形状和不同大小的聚类。该算法只要求对整个数据库的一遍扫描。因此,CURE的复杂度是O(n)。敏感度分析显示尽管一些参数变化可能不影响聚类质量,一般来说,参数设置确实对聚类结果有显著的影响。

3 基于密度的算法

基于密度的方法与其他方法的一个根本区别是它不是基于各种各样距离的而是基于密度的。这样就能克服基于距离的算法只能发现“圆形”类的缺点,以发现任意形状的聚类结果。这方法的思想就是只要一个区域中的点的密度大于某个阀值,就把它加到与之相近的聚类中。代表算法有DBSCAN算法,OPTICS算法,DENCLUE算法等。

DBSCAN算法是将密度足够大的那部分记录组成类,并可以在带有“噪声',的空间数据库中发现任意形状的聚类。它定义类为密度相连的点的最大集合,在这个算法中使用了Eps和MinPts两个全局变量。DBSCAN需要由用户主观来选择参数从而影响了最终的聚类结果,如果采用了空间索引DBSCAN的计算复杂度是O(logn),这里n是数据库中对象的数目,否则计算复杂度为O(n2)。对于参数的设置通常是依靠经验,难以确定。尤其是对于真实的高维数据集合而言OPTICS算法克服了DBSCAN算法的缺点,是一种顺序聚类的方法。OPTICS没有显式地产生一个数据集合,它为自动和交互的聚类分析计算一个类秩序。这个秩序代表了数据的基于密度的聚类结构。它包含的信息,等同于从一个宽广的参数设置范围所获得的基于密度的聚类。

DENCLUE是一个基于一组密度分布函数的聚类算法。该算法主要基于下面的想法(1)每个数据点的影响可以用一个数学函数来形式化地模拟,它描述了一个数据点在邻域内的影响,被称为影响函数。(2)数据空间的整体密度可以被模型化为所有数据点的影响函数的总和。(3)然后聚类可以通过确定密度吸引点来得到,这里的密度吸引点是全局密度函数的局部最大。

4 基于网格的算法

基于网格的方法是采用了一个多分辨率的网格数据结构。它首先将数据空间划分成为有限个单元cell的网格结构所有的处理都是以单个的单元为对象的。这么处理的一个突出的优点就是处理速度块,通常这是与目标数据库中记录的个数无关的,它只是与把数据空间分成多少个单元有关。代表算法有STING算法、CLIQUE算法、WAVE-CLUSTER算法。

STING算法是一种基于网格的多分辨率的聚类技术,它将空间区域划分成为矩形单元,针对不同级别的分辨率,通常存在多个级别的矩形单元,这些单元形成了一个层次结构、高层的每个单元被划分为多个低一层的单元,关于每个网格单元属性的统计信息被事先计算和存储,这些统计参数对于查询处理是有用的。CLIQUE可以自动地发现最高维的子空间,高密度聚类存在于这些子空间中。CLIQUE对元组的输入顺序不敏感,无需假设任何规范的数据分布,它随输入数据的大小线性地扩展。当数据的维数增加时具有良好的可伸缩性,但是,由于方法大大简化,聚类结果的精确性可能会降低。WAVE-CLUSTER是一种多分辨率的聚类算法,它首先通过在数据空间上强加一个多维网格结构来汇总数据,然后采用一种小波变换来变换原特征空间,在变换后的空间中找到密集区域。在该方法中,每个网格单元汇总了一组映射到该单元的点的信息,这种汇总信息适合于在内存中进行多分辨率小波变换使用,以及随后的聚类分析。

5 几种常用算法比较

对于上述聚类算法可以从六个方面对其性能进行比较。比较的结果如表1所示。

(1)可伸缩性

很多聚类算法在小数据集上能够达到很好的效果,但是在满足小数据集的同时能否满足大数据集、高复杂性、高增量的要求,是考察算法性能的一个方面。

(2)处理不同类型属性的能力

现实世界中的数据存在多种属性类型,如数值型、一元型、分类标称型、序数型及混合型数据。一般的聚类算法都能处理数值型数据,由于聚类算法的应用范围不断增大,也要求其能处理不同类型属性的数据。

(3)发现任意形状的簇

很多基于距离的聚类算法只能发现具有相近尺度的球状簇,而算法能否发现任意形状的簇是非常重要的,如螺旋型或呈延伸状态的簇,以及其它非凸形状的簇。

(4)处理噪声数据的能力

实际应用中的数据不可避免存在与所需内容无关的噪声数据,包括孤立点、空缺、未知数据或错误等,算法能否降低这些噪声数据的影响,决定了算法能否发现数据真实的分布状态。

表1 聚类算法比较

(8)对输入记录顺序不敏感。一些聚类算法对输入数据的顺序敏感也就是不同的数据输入会导致获得非常不同的结果。因此设计对输入数据顺序不敏感的聚类算法也是非常重要的。

根据以上分析可以看出,K均值算法是比较简单、适用性比较广的算法之一。它可以针对数值、文本和图像等数据做聚类分析,而且算法的时间复杂度也比较低。因此,对k均值算法的改进是值得考虑的,也可以将其用于网页聚类。

《来源于科技文献,经本人分析整理,以技术会友,广交天下朋友》

文本聚类分析算法_常用的聚类分析算法相关推荐

  1. 文本聚类分析算法_常用的聚类分析算法综述

    聚类分析定义 所谓聚类就是按照事物的某些属性,把事物聚集成类,使类间的相似性尽可能小,类内相似性尽可能大.聚类是一个无监督的学习过程,它同分类的根本区别在于分类是需要事先知道所依据的数据特征,而聚类是 ...

  2. matlab中k-means算法_机器学习 | KMeans聚类分析详解

    大量数据中具有"相似"特征的数据点或样本划分为一个类别.聚类分析提供了样本集在非监督模式下的类别划分.聚类的基本思想是"物以类聚.人以群分",将大量数据集中相似 ...

  3. python牛顿法计算平方根_常用的平方根算法详解与实现

    本文从属于笔者的数据结构与算法系列文章. SquareRoot 平方根计算一直是计算系统的常用算法,本文列举出几张简单易懂的平方根算法讲解与实现.其中Java版本的代码参考这里 Reference B ...

  4. 数据结构和算法之常用 10 种算法

    目录 1.二分查找算法(非递归) 2.分治算法 2.1分治算法最佳实践-汉诺塔 3.动态规划算法 4.KMP 算法 4.1KMP 算法最佳应用-字符串匹配问题 5.贪心算法 5.1贪心算法最佳应用-集 ...

  5. dijkstra 算法_最短路径问题Dijkstra算法详解

    1.Dijkstra算法介绍 · 算法起源: · Djkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家E ...

  6. hash算法_数据库中间件分片算法之hash

    前言 夜深人静的时候,打开云音乐,点上一曲攀登,带上真无线蓝牙耳机,瞬间燃到爆,键盘打字如飞倦意全无. 分片规则 这几天有人问我,dble和MyCat到底有什么不同.其实dble作为MyCAT的同门, ...

  7. kmeans算法_实战 | KMeans 聚类算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  8. java 哈希一致算法_一致哈希算法Java实现

    一致哈希算法(Consistent Hashing Algorithms)是一个分布式系统中常用的算法.传统的Hash算法当槽位(Slot)增减时,面临所有数据重新部署的问题,而一致哈希算法确可以保证 ...

  9. cart算法_机器学习十大算法之一——决策树CART算法

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第23篇文章,我们今天分享的内容是十大数据挖掘算法之一的CART算法. CART算法全称是Classification ...

  10. mysql 编程算法_十大编程算法助程序员走上高手之路

    算法一:快速排序算法 快 速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种 状况并不常见.事实上,快速排 ...

最新文章

  1. Reactor/Proactor的比较 (ZZ)
  2. 自动识别HTML代码里的图片链接,并下载到服务器的指定目录(开源)
  3. ping不通www.baidu.com,但可以访问www.baidu.com网页
  4. shell 中的return
  5. 大数据谋定农业发展路径-丰收节贸易会:全球十大经典案例
  6. 得到选择框句柄 怎么操作_知道借名买房有风险,只能选择借名买房该怎么操作?...
  7. 米斯特白帽培训讲义 挖掘篇
  8. 六年级计算机应用计划,六年级信息工作计划
  9. 51单片机指针c语言,单片机C语言教程:C51指针的使用
  10. SCI/SSCI期刊列表已更新,这几本期刊被剔除~
  11. python实现KM算法
  12. 学习Java必看的Java书籍(本本经典实用)
  13. Linux的ssh登录命令,Linux SSH登录命令总结
  14. OpenCASCADE(OCC)读取STEP模型文件到XDE中
  15. QT6程序全屏和隐藏鼠标指针笔记
  16. Java-满天繁星案例(1)
  17. 云南省昭通市领导一行莅临上海控安调研指导
  18. JAVA游戏 混乱大枪战
  19. ubuntu 14.04版本更改文件夹背景色为草绿色
  20. 零基础学习之万物皆可GAN学习路线

热门文章

  1. TraceView issue
  2. java随机数使用技巧(超简单)
  3. Wireshark 使用教程
  4. 论坛源码手机php,【校园社区APP】带后台完整社区论坛手机应用源码
  5. 九款好看的后台管理系统登录模板
  6. ​越狱iOS必备神器Flex使用指南-屏蔽越狱检测的破解利器
  7. 亚马逊吸尘器需要提交UL1017测试报告,亚马逊要求提供ISO17025资质机构出具的UL报告
  8. mongovue mysql_mongoVUE的增删改查操作使用说明(转)
  9. [linux]LINUX程序设计cc1--入门
  10. SQLServer 内连接和外连接