各种聚类方法的聚类思想介绍及其优缺点

聚类是一种无监督学习方法,旨在将数据集中的样本划分为若干个组,使得同一组内的样本相似度最大,而不同组之间的样本相似度最小。以下是几种常见的聚类方法及其思想、优缺点的介绍:

1. K-means 聚类

聚类思想

  • K-means 将数据分成 K 个簇,每个簇由一个中心(质心)代表。
  • 算法通过迭代优化,使得每个簇中的样本与质心的距离平方和最小。
  • 步骤:
    1. 随机初始化 K 个质心。
    2. 将每个样本分配到最近的质心。
    3. 重新计算每个簇的质心。
    4. 重复步骤 2 和 3,直到质心不再变化。

优点

  • 算法简单、易于实现。
  • 计算速度快,适用于大规模数据集。

缺点

  • 需要预先指定 K 值。
  • 对初始质心敏感,可能陷入局部最优。
  • 适用于球状簇,不适合非球状簇或大小差异较大的簇。

2. 层次聚类(Hierarchical Clustering)

聚类思想

  • 层次聚类通过构建树状结构(树状图或树状结构)来进行聚类。
  • 有两种方法:自底向上(凝聚型)和自顶向下(分裂型)。
    • 凝聚型:每个样本开始时作为一个簇,不断合并最近的簇。
    • 分裂型:所有样本开始时作为一个簇,不断分裂出最不相似的簇。

优点

  • 不需要预先指定簇的数量。
  • 可以生成聚类树,提供聚类的层次结构。

缺点

  • 计算复杂度高,不适合大规模数据集。
  • 对噪声和离群点敏感。

3. 密度聚类(DBSCAN)

聚类思想

  • DBSCAN 通过高密度区域的连通性定义簇。
  • 算法通过两个参数:ε(epsilon,半径)和 MinPts(最小点数)来定义簇。
  • 核心点:领域内包含至少 MinPts 个样本的点。
  • 边界点:不属于核心点,但在某个核心点的领域内。
  • 噪声点:既不是核心点也不是边界点。

优点

  • 不需要指定簇的数量。
  • 可以识别任意形状的簇。
  • 对噪声和离群点有较好的鲁棒性。

缺点

  • 参数 ε 和 MinPts 的选择对结果影响较大。
  • 在高维空间中,效果可能不佳。

4. 高斯混合模型(GMM)

聚类思想

  • GMM 假设数据来自于若干个高斯分布,通过期望最大化(EM)算法进行聚类。
  • 每个簇由一个高斯分布表示,EM 算法通过迭代估计模型参数(均值、协方差矩阵和混合系数)。

优点

  • 可以处理不同形状和大小的簇。
  • 提供每个样本属于某个簇的概率,结果更加柔性。

缺点

  • 需要预先指定簇的数量。
  • 对初始参数敏感,可能陷入局部最优。

5. 谱聚类(Spectral Clustering)

聚类思想

  • 谱聚类通过构建样本的相似矩阵并进行图划分来进行聚类。
  • 算法通过计算相似矩阵的特征值和特征向量,将样本投影到低维空间,然后在低维空间进行聚类(例如,K-means 聚类)。

优点

  • 可以处理任意形状的簇。
  • 在某些情况下,比传统的 K-means 聚类效果更好。

缺点

  • 计算复杂度高,不适合大规模数据集。
  • 需要选择适当的相似度度量和特征值个数。

6. 均值漂移(Mean Shift)

聚类思想

  • Mean Shift 通过在样本密度的高峰处进行聚类。
  • 算法通过在特征空间内移动点到密度最大的位置来定义簇。
  • 重复移动点直到收敛,形成密度高峰处的簇。

优点

  • 不需要预先指定簇的数量。
  • 可以识别任意形状的簇。

缺点

  • 计算复杂度高,不适合大规模数据集。
  • 对带宽参数的选择敏感。

算法复杂度低的聚类算法

在实际应用中,选择算法时常常需要在性能和复杂度之间找到平衡。以下是一些算法复杂度较低的聚类算法:

1. K-means 聚类

复杂度

  • 初始化:O(k⋅n)O(k \cdot n)O(k⋅n),其中 kkk 是簇的数量,nnn 是数据点的数量。
  • 每次迭代:O(k⋅n⋅d)O(k \cdot n \cdot d)O(k⋅n⋅d),其中 ddd 是数据的维度。
  • 总体复杂度:在迭代次数 ttt 较小时为 O(t⋅k⋅n⋅d)O(t \cdot k \cdot n \cdot d)O(t⋅k⋅n⋅d)。

适用场景

  • 数据集较大,维度较低。
  • 簇的形状较规则(球形)。

优点

  • 算法简单、易于实现。
  • 计算速度快,适用于大规模数据集。

缺点

  • 需要预先指定簇的数量。
  • 对初始质心敏感,可能陷入局部最优。

2. 单链(Single Linkage)层次聚类

复杂度

  • 构建距离矩阵:O(n2)O(n^2)O(n2)。
  • 合并最近的簇:每次迭代 O(n2)O(n^2)O(n2)。
  • 总体复杂度:O(n2log⁡n)O(n^2 \log n)O(n2logn)。

适用场景

  • 中小规模数据集。
  • 不需要预先指定簇的数量。

优点

  • 算法较简单,不需要预先指定簇的数量。
  • 可以生成聚类树,提供聚类的层次结构。

缺点

  • 计算复杂度高于 K-means。
  • 对噪声和离群点敏感。

3. 均值漂移(Mean Shift)

复杂度

  • 每次迭代:O(n2⋅d)O(n^2 \cdot d)O(n2⋅d)。
  • 总体复杂度:取决于收敛的迭代次数。

适用场景

  • 不需要预先指定簇的数量。
  • 可以识别任意形状的簇。

优点

  • 不需要预先指定簇的数量。
  • 可以识别任意形状的簇。

缺点

  • 计算复杂度较高,适用于中小规模数据集。
  • 对带宽参数的选择敏感。

4. Mini-Batch K-means

复杂度

  • 初始化:O(k⋅n)O(k \cdot n)O(k⋅n)。
  • 每次迭代:O(b⋅k⋅d)O(b \cdot k \cdot d)O(b⋅k⋅d),其中 bbb 是 mini-batch 的大小。
  • 总体复杂度:O(t⋅b⋅k⋅d)O(t \cdot b \cdot k \cdot d)O(t⋅b⋅k⋅d),其中 ttt 是迭代次数。

适用场景

  • 大规模数据集。
  • 簇的形状较规则(球形)。

优点

  • 基于 K-means,减少了每次迭代的计算量。
  • 适用于大规模数据集。

缺点

  • 需要预先指定簇的数量。
  • 对初始质心敏感,可能陷入局部最优。

Mini-Batch K-means是一种改进版的K-means算法,它通过使用一个小批量(mini-batch)的数据点而不是整个数据集来计算每个簇的中心。这种方法的主要优点是它减少了计算复杂度,尤其是在处理大数据集时。以下是Mini-Batch K-means算法的基本步骤:

  1. 随机选择初始中心:与标准的K-means算法一样,Mini-Batch K-means也需要随机选择K个初始中心。

  2. 随机选择数据子集:从整个数据集中随机选择一个小的数据子集,这个子集被称为“mini-batch”。

  3. 计算mini-batch中每个数据点与所有中心之间的距离:使用欧几里得距离或其他距离度量来计算每个数据点与所有K个中心之间的距离。

  4. 分配数据点:将mini-batch中的每个数据点分配到与其最近的中心所在的簇。

  5. 更新中心:根据mini-batch中每个簇的数据点计算新的中心。计算新中心的方法可以是取所有属于该簇的数据点的均值,也可以是其他方法,如取median或中位数。

  6. 重复步骤2-5:重复步骤2-5,直到满足某个停止条件,如中心变化小于某个阈值,或者迭代次数达到预设的最大次数。

  7. 使用所有数据点重新计算中心:在完成所有mini-batch迭代之后,可以使用所有数据点重新计算每个簇的中心,以确保每个中心都反映了整个数据集的信息。

Mini-Batch K-means的优点是它减少了每次迭代时需要计算的距离数量,从而提高了算法的计算效率。然而,这也可能导致算法收敛到局部最优解,而不是全局最优解。因此,在实际应用中,可能需要多次运行Mini-Batch K-means,每次都使用不同的mini-batch,以找到更好的聚类结果。

总结

对于计算复杂度较低的聚类算法,K-means 和 Mini-Batch K-means 是较好的选择,尤其适用于大规模数据集。尽管它们都有需要预先指定簇数量的缺点,但其简单性和高效性使其在许多实际应用中非常受欢迎。层次聚类(单链)和均值漂移适用于中小规模数据集,虽然计算复杂度相对较高,但在不需要预先指定簇数量的场景中具有优势。

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

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

相关文章

MySQL SQL 编程练习

目录 创建表并插入数据 查看表结构 创建触发器 创建INSERT 触发器 创建DELETE 触发器 创建更新触发器 创建存储过程 创建提取emp_new表所有员工姓名和工资的存储过程s1 创建存储过程s2,实现输入员工姓名后返回员工的年龄 创建一个存储过程s3,有2个参数&…

spring-from表单

在spring boot当中,from表单怎样开发(name=value) 先列出接口所需信息(抓包得到请求信息),将这些必要信息以注解的方式表达出来 步骤: 梳理前置条件(请求地址,请求header,请求方法,请求数据,响应结果)编辑一个普通类,在类上标记注解@Controller: 标记在类上,让类…

springboot校园商店配送系统-计算机毕业设计源68448

摘要 本文详细阐述了基于Spring Boot框架的校园商店配送系统的设计与实现过程。该系统针对校园内的用户需求,整合了用户注册与登录、商品浏览与购买、订单管理、配送追踪、用户反馈收集以及后台管理等功能,为校园内的普通用户、商家、配送员和管理员提供…

深入理解 SQL 中的 DATEDIFF 函数

DATEDIFF 是 SQL 中的一个常用函数,用于计算两个日期之间的天数差异。它非常有用,特别是在需要根据日期进行条件筛选或计算时间间隔的场景中。以下是对 DATEDIFF 函数的详细介绍,包括其语法和实用例子。 1. DATEDIFF 函数概述 DATEDIFF 函数…

算法与算法分析

目录 一.前言 二.算法的特性和要求 三.分析算法--时间效率 四. 分析算法--空间效率 一.前言 算法就是对特定问题求解方法和步骤的一种描述,它是指令的有限序列。其中,每个指令表示一个或多个操作。总而言之,我们数据结构就是通过算法实现操…

学习SQL如何使用CASE语句查询分析设备状态

学习SQL如何使用CASE语句查询分析设备状态 一、前言1. 问题背景2. SQL查询分析3. SQL查询解析 二、结论 一、前言 在实际应用中,经常需要对设备的状态进行监控和分析。通过SQL查询,我们可以有效地从数据库中提取和计算设备的状态信息。本文将介绍如何编…

FPGA实现LCD1602控制

目录 注意! 本工程采用野火征途PRO开发板,外接LCD1602部件进行测试。 有偿提供代码!!!可以定制功能!!! 联系方式见底部 一、基础知识 1.1 引脚信息 1.2 指令 1.2.1 清屏 1.…

【有效的括号】

有效的括号 一、题目二、思路三、代码 一、题目 二、思路 利用栈先进后出的特点存储左括号:后面遍历遇到的左括号要先闭合 用map存储左括号与右括号的对应关系,利用键值对快速查找右括号进行匹配 三、代码 使用.has()方法判断当前遍历的字符是否是右括…

项目架构知识点总结

项目架构知识点总结 【一】重要注解【1】SpringBootApplication(1)⭐️ComponentScan 注解(2)⭐️EnableAutoConfiguration 注解(3)⭐️SpringBootConfiguration 注解(4)Inherited 注…

vite+cesium+天地图

创建vite项目 直接在地址栏输入cmd进入命令行(vite项目默认为vue3) # yarn yarn create vite 项目名称 --template vue 创建成功后依次执行 yarn install yarn dev 安装cesium和vite-plugin-cesium 没有加版本号默认为最新版本 加版本号如cesium1.1…

vue3——两种利用自定义指令实现防止按钮重复点击的方法

方法一:利用定时器设置时间,下方代码设置时间为1秒 但是有个缺点:请求如果很慢,1秒钟还没有好,那么该方法就没用了 // 利用定时器:1秒之后才能再次点击app.directive(preventReClick, {mounted: (el, bind…

sql注入的专项练习 sqlilabs(含代码审计)

在做题之前先复习了数据库的增删改查,然后自己用本地的环境,在自己建的库里面进行了sql语句的测试,主要是回顾了一下sql注入联合注入查询的语句和sql注入的一般做题步骤。 1.获取当前数据库 2.获取数据库中的表 3.获取表中的字段名 一、sql…

WordPress 后台开发技巧:向文章发布页右侧添加自定义菜单项

案例图片 这个案例向你介绍了如何在文章发布页的右侧边栏增加一个新的自定义菜单项。具体用它实现什么功能,就看你的需要了。 代码 function add_custom_menu_item() { add_meta_box(custom_menu_item, 这里是菜单项名称, display_custom_menu_item, post, side, …

基于JSP、java、Tomcat、mysql三层交互的项目实战--校园交易网(1)-项目搭建(前期准备工作)

这是项目的初始页面 接下来我先写下我的初始项目搭建 技术支持:JAVA、JSP 服务器:TOMCAT 7.0.86 编程软件:IntelliJ IDEA 2021.1.3 x64 首先我们打开页面,准备搭建项目的初始准备 1.New Project 2.随后点击Next,勾…

C# Aspose PDF.dll 实现PDF添加水印

在C#中使用Aspose.PDF库来给PDF文档添加水印是一个常见的需求。Aspose.PDF是一个功能强大的库,它允许开发者在不需要Adobe Acrobat或其他PDF查看器的情况下创建、修改、渲染、打印和解析PDF文档。以下是一个使用Aspose.PDF库给PDF添加水印的基本示例: 首…

AttributeError: ‘list‘ object has no attribute ‘text‘

AttributeError: ‘list‘ object has no attribute ‘text‘ 目录 AttributeError: ‘list‘ object has no attribute ‘text‘ 【常见模块错误】 【解决方案】 示例代码 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英…

IDEA缓存和索引

IDEA缓存和索引 —2020年06月10日 IntelliJ IDEA首次加载项目的时候。都会创建索引,而创建索引的时间根项目的文件多少成正比。 IntelliJ IDEA的缓存和索引主要是用来加快文件查询,从而加快各种查找、代码提示等操作的速度。 某些特殊情况下&#xf…

安科瑞邀您走进2024北京电气设计第44届年会

2024年7月11日,2024建筑电气高峰论坛暨北京电气设计第44届年会在京如期而至,各路精英齐聚一堂,围绕智慧建筑、数据中心、工业厂房配电、储能技术等热点问题展开讨论。安科瑞携企业微电网智慧能源的一站式服务解决方案亮相盛会,尽享…

Java面试八股之什么是spring boot starter

什么是spring boot starter Spring Boot Starter是Spring Boot项目中的一个重要概念。它是一种依赖管理机制,用于简化Maven或Gradle配置文件中的依赖项声明。Spring Boot Starter提供了一组预定义的依赖关系,这些依赖关系被封装在一个单一的包中&#x…

十日Python项目——第三日(用户中心——邮箱验证、修改密码)

#前言: 在最近十天我会用Python做一个购物类项目,会用到DjangoMysqlRedisVue等。 今天是第三天,主要负责撰写用户中心部分,以及优化登录部分。若是有不懂大家可以先阅读我的前两篇博客以能够顺承。博客:十日Python项…