聚类算法的分类整理

1、基于划分的聚类算法

基于划分的聚类算法 主要通过聚类中心的迭代重置,直到达到“簇内点足够近,簇间点足够远”的目标效果,完成样本集的最优化分。其算法优点是时间、空间复杂度低,可以处理大规模数据集。缺点包括容易陷入局部最优,对初始聚类中心的选取十分敏感,无法处理噪声和离群点,不能解决非凸数据等。其代表算法包括K-means、CLARANS和 CLARA。以 K-means 为例,算法流程为:

  • 步骤 1:初始的类簇中心采用随机选择的方式选取,一般人为设定为 K 个;
  • 步骤 2:对剩余对象,计算其与选取的各类簇中心的距离,将其分配给距离最近的簇;
  • 步骤 3:重新计算每个簇的平均值,将其作为新的聚类中心;
  • 步骤 4:重复步骤 2 和 3,直到聚类结果不再变化;

2、基于密度的聚类算法

基于密度的聚类算法其算法原理是通过计算数据样本分布的疏密情况,将高密度区域的点划分为同一个类簇。这种方式可以处理具有复杂形状的类簇和噪声数据。DBSCAN 算法是典型的基于密度的聚类算法,能够有效识别任意形状的类簇。缺点是聚类的结果与参数有很大的关系,对于稀疏度差异很大的数据集无法取得很好的聚类效果。其算法步骤为:

  • 步骤 1:从数据集中任选一个对象 p;
  • 步骤 2:寻找对象 p 的直接密度可达的数据点;
  • 步骤 3:若对象 p 存在直接密度可达数据点,则合并生成一个类簇,若不存在,将 p 作为一个边界点选取下一个对象;
  • 步骤 4:重复步骤 2 和 3,直到所有点都被处理。

3、基于层次的聚类算法

基于层次的聚类算法无需预先设置类簇个数,而是通过对数据集在不同层次上进行划分来获得树状聚类结构。一般分为两种类型:合并的层次聚类和分裂的层次聚类。前者是一种自底向上的层次聚类算法,从最底层开始,每一次通过合并最相似的类簇来形成上一层次的类簇,直到满足终止条件。后者则是采用自顶向下的方法,从一个包含全部数据点的聚类开始,然后把根节点分裂为一些子类簇,每个子类簇再递归地分裂下去,直到出现只包含一个数据点的类簇出现。这种算法的优点是处理速度很快,仅与类簇个数有关,与数据个数无关,可以解决非球形簇的聚类。其缺点是算法具有明显的贪心特征,一个数据点分配错误,将会出现连带性错误。代表算法包括 BIRCH算法、CURE 算法和 CHAMELEON 算法等。以自底向上的层次聚类算法为例,其算法步骤如下:

  • 步骤 1:将每个对象看作一个类簇,计算两两之间的相似性;
  • 步骤 2:将相似性最高的两个类簇进行合并成为一个新的类簇;
  • 步骤 3:重新计算新的类簇与所有类簇的相似性;
  • 步骤 4:重复步骤 2 和 3,直到不再有可合并类簇或者类簇数满足预先设定值。

在第二步中使用到的相似性度量方法,有很多算法,常见的有如下 5 种方法,其中 Ward 法与 Average Linkage 法比较常见:

3.1 单连接算法(SingleLinkage)

对于类 ,选择这两个类之间的任意两个对象的最小距离作为他们合并的相似性度量方式,如公式所示:

 

3.2 全连接算法(CompleteLinkage)

该算法是单连接算法的反面,对于对于类 选取两个类中距离最远的任意两个负荷曲线对象作为两个类之间的距离度量方式,如公式所示。然后选取类间距最小的类进行合并。

 

3.3 平均连接算法(Average-linkage)

该算法的计算量较大,对于类  ,求两个类之间所有对象两两之间的距离,然后再计算平均值作为两个类的距离。然后选取所有类之间距离最小的两个进行合并,具体如公式:

 

3.4  Ward法

选择合并之后的类导致的类内离差平方和增加量最小的两个类进行合并。

3.5  质心连接(CentroidLinkage)

对于类类   ,类之间的距离为聚类中心距离的平方作为距离度量:

 

4、基于网格的聚类算法

基于网格的聚类算法利用多分辨率形式的网格结构将数据空间划分为一个个的网格单元,并在网格单元上进行类簇划分。优点是处理速度快,与数据对象个数无关。缺点是参数敏感,无法处理不规则分布的数据,处理精度也不高。这类算法通常与基于密度的聚类算法结合从而提高聚类准确度,代表算法有 STING 算法、CLIQUE算]和 WAVE-CLUSTER 算法等。这些算法采用了不同的网格划分方法,但其核心步骤差异不大,如下所示。

  • 步骤 1:将数据空间划分为多个互不重叠的网格;
  • 步骤 2:对网格内数据进行统计;
  • 步骤 3:通过统计信息找到高密度网格单元;
  • 步骤 4:将相连的高密度网格单元合并为一个类簇;
  • 步骤 5:将低密度网格单元划分给距离最近的高密度网格单元所在类簇中。

5、基于模型的聚类算法

基于模型的聚类算法为每个类簇假设了一个模型,然后利用一个判断机制寻找数据与给定模型的最佳拟合,最后完成聚类。这一类算法主要包括基于概率的模型聚类和基于神经网络的模型聚类。基于概率的模型聚类主要采用了概率生成方法,假定同一类簇中的数据按照同一种概率分布,最常用的即为高斯混合模型(Gaussian Mixture Models, GMM)。基于神经网络的模型聚类最常见的是 SOM 模型,其可以保持原始数据的拓扑特征,把相似的数据分配到同一类。这类算法的优点是其对数据点所属类簇的划分以概率的形式表现,每一类的特征也可用参数表达。缺点是处理效率不高,特别是数据量很少时,聚类效果很差。以 SOM 模型为例,其算法流程如下:

  • 步骤 1:先将网络初始化,给输出层的每个节点权重赋值;
  • 步骤 2:从输入样本中随机选择一个输入向量,找到与该输入向量距离最小的权重向量;
  • 步骤 3:定义获胜单元,在获胜单元的领域内调整权重使其向输入向量靠近;
  • 步骤 4:提供新样本,再次进行训练;
  • 步骤 5:使邻域半径收缩,降低学习率,重复步骤 2-4,直到满足输出条件,得到聚类结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

minGW64安装和使用 极简教程

1、下载minGW64 官网下载:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/我的FTP:a、minGW64 install.exe b、解压免安装版 2、解压 3、添加环境变量 4、CMD 运行gcc 安装完成。 5、使用minGW编译C源码 6、运行

[C#反编译教程]001.Reflector.NET反编译工具 v8.5绿色版+注册机+注册教程

截图 下载地址 Reflector.NET反编译工具 v8.5绿色版注册机 下载地址:http://pan.baidu.com/s/1mgN1Cpi 密码:mx19 简介 .NET Reflector是一个类浏览器和反编译器,.NET Reflector可以分析程序集并向你展示它的所有秘密。.NET 框架向全世界引入…

openOCD安装 极简教程

1、下载openOCD 官网下载:https://gnutoolchains.com/arm-eabi/openocd/我的FTP:openOCD 2、解压 3、添加环境变量 ->path 4、CMD运行openOCD 安装完成。

一起谈.NET技术,.NET4.0 之 Dynamic VS Reflection 效率

在我先前的文章中,不断的推广.NET4.0新特性。特别是.NET4.0 Dynamic 这个新特性。随之而来的问题也出现了—Dynamic 执行效率如何? 我们做开发的不光需要代码简洁,能够希望自己能够写出好的架构。还有一点非常重要的就是,我们的写…

arm-none-eabi-gcc 嵌入式交叉编译器安装 极简教程

1、下载arm-none-eabi-gcc win10 官网下载:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads我的FTP:arm-none-eabo-gcc 2、解压 3、添加环境变量 4、CMD运行 安装完毕&#xff0c…

vscode openOCD 配置Jlink 下载和调试STM32 教程

1、修改openOCD 的配置文件jlink.cfg 由于手头上的jlink 是swd接口,需要将openOCD的jlink.cfg修改,指定接口类型为swd。这里直接复制一份,然后修改,jlink-swd.cfg内容如下: adapter driver jlink transport select s…

Ansi、Unicode、UTF8字符串之间的转换和写入文本文件

转载请注明出处http://www.cppblog.com/greatws/archive/2008/08/31/60546.html 最近有人问我关于这个的问题,就此写一篇blog Ansi字符串我们最熟悉,英文占一个字节,汉字2个字节,以一个\0结尾,常用于txt文本文件 Uni…

小女也爱c#(3)--俄罗斯方块练习数组

学完c了,总算是有点收获了,自己写了个俄罗斯方块练习数组,在vc6.0控制台环境下编译通过. makehead.h int Makepanel(char Ary_Panel[][10]);void gotoxy(int x, int y);void BrushsScreen(char ary[][20]);int initializationShape();void Sh…

放松时刻——C#分割字符串

让我们来练习一下字符串的分割~把话倒过来说: private void change_button_Click(object sender, EventArgs e) {var after_text before_TextBox.Text?.Select(x>x.ToString()).ToArray();string result "";for (int i after_text.Length - 1; i &…

使用WCF建立起Silverlight客户端与服务端的桥梁

最近正在开发一个项目,需要应用到Silverlight以及数据库。在正式开工之前需要掌握将数据从服务端送到客户端的技术,我们采用建立WCF服务的方法。 “做中学”是最好的学习方法,真正实践之后学习者将会有更多的自信和把握,这种感觉将…

如何用脚本可靠关闭一个linux服务或进程

一、脚本样例 以quectel的EC20模组关闭ppp拨号服务脚本为例,以下为脚本源码: #!/bin/sh timeout5 killall -15 pppd sleep 1 killall -0 pppd while [ $? -eq 0 ] dotimeoutexpr $timeout - 1if [ $timeout -eq 0 ]thenexit 1fisleep 1killall -0 ppp…

vscode 新建python 终端

ctrlshiftp 输入python, 选择Python:创建终端

STMF4x 固件库V1.25.0

https://www.st.com/en/embedded-software/stm32cubef4.html

初读CLR Via C# 之 IL、CTS、CLS

本章将对CLR中的IL、CTS和CLS进行一个大概的总结。下章将开始第二章的内容。 IL我们称之为高级汇编语言或者中间语言,在我们编写基于.NET框架下的程序(不论是C#、VB或者J#等)在被编译成本地CPU指令前,都将被编译成IL语言&#xff…

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV

20231222给NanoPC-T4(RK3399)开发板的适配Android11的挖掘机方案并跑通AP6398SV 2023/12/22 7:54 简略步骤:rootrootrootroot-X99-Turbo:~/3TB$ cat Android11.0.tar.bz2.a* > Android11.0.tar.bz2 rootrootrootroot-X99-Turbo:~/3TB$ tar jxvf Android11.0.tar.…

KEIL5 编译器导致的程序异常

STM32F407写程序过程中发现了一个KEIL5 ARM编译器导致的BUG,记录如下。 源代码比较简单,分别打印两个标志量的值,采用了volatile 声明,避免被优化。 代码功能不用多说,看一下输出结果: 两个标志量都被编译…

STM32F407控制AD7606 采用HAL库的TIM和SPI

前言 本文介绍基于STM32F407的AD7606 8通道同步采集控制方式,总体思路:PWM驱动AD7606完成模数转换,AD7606转换完成后其BUSY引脚给出下降沿,STM32捕获外部中断并在中断服务程序中调用SPI串口读取AD7606数据,工程采用cu…