常用数据聚类算法总结记录与代码实现[K-means/层次聚类/DBSACN/高斯混合模型(GMM)/密度峰值聚类/均值漂移聚类/谱聚类等]

news2024/7/6 18:08:44

本文的主要目的是总结记录日常学习工作中常用到的一些数据聚类算法,对其原理简单总结记录,同时分析对应的优缺点,以后需要的时候可以直接翻看,避免每次都要查询浪费时间,欢迎补充。

 聚类算法是一种无监督学习的方法,用于将数据集中的样本按照某种相似度或距离度量进行分组。以下是一些常见的聚类算法:

  1. K-means聚类算法:将数据集划分为K个聚类,每个聚类以其质心(centroid)为代表。通过迭代优化,将样本点分配给与其最近的质心,然后更新质心位置,直到达到收敛条件。

  2. 层次聚类算法(Hierarchical Clustering):基于样本间的相似性或距离,逐渐构建出一个层次结构的聚类结果。分为凝聚聚类(Agglomerative Clustering)和分裂聚类(Divisive Clustering)两种方法。

  3. DBSCAN聚类算法:基于密度的聚类算法,可以识别出具有足够样本密度的区域,并将其作为一个簇。可以自动发现任意形状的聚类。

  4. 高斯混合模型(GMM)聚类算法:假设数据由多个高斯分布组成,通过估计每个分布的参数,将样本分配给对应的分布,从而实现聚类。

  5. 密度峰值聚类(Density Peak Clustering):通过寻找样本点的局部密度和相对于其他样本点的距离,找出具有较高密度的样本点作为聚类中心。

  6. 均值漂移(Mean Shift)聚类算法:通过不断迭代,将样本点向密度最大的方向移动,从而找到聚类中心。

  7. 谱聚类(Spectral Clustering)算法:根据数据的相似性构建相似度矩阵,并将其转换为拉普拉斯矩阵,最后通过对拉普拉斯矩阵进行特征分解来实现聚类。

这些聚类算法在不同的场景和数据集上有各自的优势和适用性。选择合适的聚类算法需要考虑数据特点、聚类目标以及算法的复杂度和可扩展性。

当数据没有明确的标签信息时,聚类算法可以帮助我们发现数据中的潜在结构和模式。以下是对每种聚类算法的详细介绍,包括算法原理、优点和缺点:

(1)K-means聚类算法:
算法原理:
K-means聚类将数据集划分为K个聚类,并通过迭代优化来不断更新聚类中心。算法的步骤包括初始化K个聚类中心、计算样本与聚类中心的距离、将样本分配给最近的聚类中心、更新聚类中心位置并重复以上步骤直到收敛。
优点:
简单且易于实现,计算效率高;对于大型数据集具有较好的可扩展性;适用于凸型或球状聚类结构的数据。
缺点:
需要事先指定聚类数目K;对于不同形状、密度不均匀的聚类结构效果可能较差。

代码实现如下:

# Load the iris dataset
iris = load_iris()
X = iris.data

# K-means clustering
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
kmeans_labels = kmeans.labels_


(2)层次聚类算法(Hierarchical Clustering):
算法原理:
层次聚类根据样本间的相似度或距离逐渐构建出一个层次结构的聚类结果。凝聚聚类从每个样本开始,逐步合并最相似的样本,直到形成一个大聚类;分裂聚类从包含所有样本的大聚类开始,逐步将其分解为更小的子聚类。
优点:
无需指定聚类数目;结果呈现层次结构,可以通过截取树状图来获得不同聚类数目的结果;适用于多种聚类结构。
缺点:
计算复杂度较高,特别是对于大规模数据集;对于噪声和孤立点敏感。

代码实现如下:

# Load the iris dataset
iris = load_iris()
X = iris.data

# Hierarchical clustering
hierarchical = AgglomerativeClustering(n_clusters=3)
hierarchical_labels = hierarchical.fit_predict(X)


(3)DBSCAN聚类算法:
算法原理:
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度的聚类算法,通过确定样本周围的邻近样本密度来划分聚类。核心样本是周围距离内至少包含MinPts个样本的样本,密度可达样本是通过核心样本密度凸包连通得到的样本。
优点:
能够自动发现任意形状的聚类,对于密度不均匀的聚类结构效果好;对噪声和孤立点具有鲁棒性。
缺点:
对于样本密度差异较大的数据集,需要事先调节参数;不适用于高维数据,容易受到维度灾难的影响。

代码实现如下:

# Load the iris dataset
iris = load_iris()
X = iris.data

# DBSCAN clustering
dbscan = DBSCAN(eps=0.5, min_samples=5)
dbscan_labels = dbscan.fit_predict(X)


(4)高斯混合模型(GMM)聚类算法:
算法原理:
高斯混合模型假设数据由多个高斯分布组成,通过估计每个分布的参数,将样本分配给对应的分布。可以使用EM算法进行参数估计。
优点:
能够模拟复杂的数据分布,适用于非凸型、椭圆形状的聚类;对于数据集中存在的噪声和异常值具有较好的鲁棒性。
缺点:
对于大规模数据集计算复杂度较高;需要事先指定高斯分布数目。

代码实现如下:

# Load the iris dataset
iris = load_iris()
X = iris.data


# Gaussian Mixture Model (GMM) clustering
gmm = GaussianMixture(n_components=3)
gmm.fit(X)
gmm_labels = gmm.predict(X)


(5)密度峰值聚类(Density Peak Clustering):
算法原理:
密度峰值聚类是一种基于样本点的密度和相对距离的聚类方法。其原理如下:
首先,计算每个样本点的局部密度,表示该样本周围的样本数量或密度。
然后,计算每个样本点与其他样本点的最小距离(距离可以使用欧氏距离等度量)。
根据局部密度和最小距离确定每个样本点的密度峰值,并将具有较高局部密度和较远最小距离的样本点作为聚类中心。
最后,将其他样本分配给距离最近的密度峰值所在的簇。
密度峰值聚类的优点和缺点如下:
优点:
能够发现任意形状和大小的聚类,不受密度均匀性的限制。
对噪声和离群点具有较好的鲁棒性,能够识别出没有明显密度峰值的数据。
不需要预先指定聚类数目,自动确定聚类中心。
缺点:
当数据集存在多个密度峰值且密度相似时,聚类结果可能不稳定。
对参数的选择比较敏感,如设置最小距离阈值等。
在处理大规模数据集时,计算样本点之间的距离和局部密度较为耗时。

代码实现如下:

# Load the iris dataset
iris = load_iris()
X = iris.data

# Density Peak Clustering
# You may need to install the density_peaks package first:
# pip install density-peaks-clustering
from density_peaks import density_peaks
dp = density_peaks.DensityPeaks(n_clusters=3)
dp.fit(X)
dp_labels = dp.labels_

(6)均值漂移(Mean Shift)聚类算法:
算法原理:
均值漂移聚类算法通过不断迭代,将样本点向密度最大的方向移动,从而找到聚类中心。具体步骤如下:
初始化每个样本点的位置作为当前估计的聚类中心。
对于每个样本点,计算其周围样本的平均位置(均值漂移向量),并将样本点向该位置移动。
重复步骤2,直到达到收敛条件或迭代次数限制。
优点:
不需要事先指定聚类数目,能够自适应地确定聚类中心的数量。
能够处理任意形状和大小的聚类,对噪声和离群点具有较好的鲁棒性。
相比于K-means等方法,对于非球状的聚类结构效果更好。
缺点:
运行时间较长,特别是在处理大规模数据集时,由于每个样本都需要计算均值漂移向量。
对于高维数据,由于维数灾难的影响,可能出现聚类效果不佳。
对于具有多个密度峰值且密度相似的数据集,聚类结果可能不稳定。

代码实现如下:

# Load the iris dataset
iris = load_iris()
X = iris.data

# Mean Shift clustering
mean_shift = MeanShift()
mean_shift_labels = mean_shift.fit_predict(X)


(7)谱聚类(Spectral Clustering)算法:
算法原理:
谱聚类算法根据数据的相似性构建相似度矩阵,并将其转换为拉普拉斯矩阵。然后,通过对拉普拉斯矩阵进行特征分解来实现聚类。
构建相似度矩阵:通常使用高斯核函数计算样本之间的相似度,或者使用K近邻方法选择最近的样本作为相似样本。
转换为拉普拉斯矩阵:根据相似矩阵构建拉普拉斯矩阵,可以使用标准化的拉普拉斯矩阵或对称标准化的拉普拉斯矩阵。
特征分解:对拉普拉斯矩阵进行特征分解,得到特征向量,并使用K-means等聚类方法对特征向量进行聚类。
优点:
可以处理非凸形状和大小不同的聚类,适用于任意形状的数据分布。
相比于K-means等传统方法,对于图像分割、社交网络等具有复杂关系的数据集效果更好。
不需要预先指定聚类数目,能够自适应地确定聚类数量。
缺点:
对于大规模数据集,计算相似度矩阵和特征分解的计算复杂度较高。
需要事先调节参数,如相似度阈值、K近邻数目等。
对于高维数据,可能出现"维度灾难"问题,聚类效果不佳。
代码实现如下所示:

# Load the iris dataset
iris = load_iris()
X = iris.data

# Spectral clustering
spectral = SpectralClustering(n_clusters=3)
spectral_labels = spectral.fit_predict(X)

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

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

相关文章

chrales过期重装或使用途中的踩坑记录及使用方法

1、背景 我的是证书过期了,提示无网络。 1. 重新下载 安装(或者 不需要重新下载安装,用已有的就可以) 2. 重新进行配置 3. (关键)检查电脑上的 证书过期时间 4. (关键)检查手机上的证书过期时间 5. (手机配置好后,点开链接显示无网络&#…

Android:简单登录界面

一、前言&#xff1a;这个登陆界面我前前后后写了差不多一个星期&#xff0c;主要有密码登录、验证码登录、键盘自动隐藏、忘记密码、新建密码等功能&#xff0c;你们可以自己研究一下&#xff01; 二、上代码&#xff1a; 资源文件 1.在value包下面添加一个dimens.xml <…

对性能测试评估分析优化市场的反思

目录 前言&#xff1a; 性能市场的现状 性能测试人员的价值体现 年龄和加班 性能行业的出路 前言&#xff1a; 性能测试评估分析和优化是一个关键的环节&#xff0c;它可以帮助我们了解系统的性能瓶颈和潜在问题&#xff0c;并提出相应的优化方案。在市场竞争激烈的环境下…

Cesium 实战 - AGI_articulations 扩展:模型自定义关节动作

Cesium 实战 - AGI_articulations 扩展&#xff1a;模型自定义关节动作 简要概述两种方式实现模型组件动作模型添加关节&#xff08;articulations&#xff09;1.导入模型&#xff08;J15.glb&#xff09;2.查看模型内部组件信息&#xff08;名称&#xff09;4.将需要J15.glb复…

Docker常见命令(以备不时之需)

参考官网&#xff1a;https://docs.docker.com/engine/reference/commandline/cli/ 帮助启动类命令 启动docker&#xff1a; systemctl start docker 停止docker&#xff1a; systemctl stop docker 重启docker&#xff1a; systemctl restart docker 查看docker状态&…

架构训练营笔记系列:面向复杂度的设计

面向复杂度的设计 DDD 是可扩展架构的设计技巧&#xff0c;不是架构方法论。不关注高性能、高可靠。 架构本质&#xff1a;为了降低软件系统复杂度 怎么做架构设计 &#xff1f;思路是分析系统需求找到系统复杂的地方&#xff0c;然后设计方案。 复杂度相关有哪些&#xff1…

Unity的PostProcessing后处理使用介绍

大家好&#xff0c;我是阿赵。 上一篇文章说了Unity的PostProcessing后处理有bug并提供了解决办法&#xff0c;这里顺便介绍一下PostProcessing的用法。 一、安装 打开PackageManager&#xff0c;然后搜索Post&#xff0c;应该就能看到左边出现搜索结果&#xff0c;选择&…

一个人的面相能直接反映其个性与命运

中国传统文化&#xff0c;博大精深&#xff0c;面相学只是其中一种。 在古代&#xff0c;面相学却是一门非常实用的学科&#xff0c; 尤其是经过了一代代人的发展&#xff0c;面相学得到了完善之后&#xff0c;他的准确性往往会超过现代人的预料。相由心生&#xff0c;面相是对…

用户端App 测试方法与技术

目录&#xff1a; app测试体系app项目测试流程app结构讲解app测试设计思路app常见bug解析常用模拟器使用android开发者选项安装mumu模拟器adb命令介绍adb环境搭建与配置adb与设备交互adb安装卸载应用adb命令启动页面adb命令清缓存adb文件传输adb日志操作adb命令操作Android设备…

DRF+Vue.JS前后端分离项目实例(下) --- Vue.js 前端实现代码

本文上篇请 点击阅读 1. 需求说明 本文以学生信息查询功能为例&#xff0c;采用前后端分离架构&#xff0c;后端提供RESTFul 接口&#xff0c;前端代码用Vue.js Bottstrap实现。 1.1 本例要求提供如下查询功能&#xff1a; 列表查询、单条查询 添加学生信息 更改学生信息 删…

在线试用Stable Diffusion生成可爱的图片

文章目录 一、 Stable Diffusion 模型在线使用地址&#xff1a;二、模型相关版本和参数配置&#xff1a;三、图片生成提示词与反向提示词&#xff1a;提示词1提示词2提示词3提示词4提示词5 一、 Stable Diffusion 模型在线使用地址&#xff1a; https://inscode.csdn.net/insc…

python 读取npy文件

import numpy as np test np.load("I:/软件/mask.npy") print(test) 如下图所示&#xff1a;

Web3 智能合约通过数组方式存储更多学生数据

之前的文章 Web3 在Truffle项目中编写出自己的第一个solidity智能合约带大家写了一个相对捡漏的智能合约 这样 每次 我们set 后 都会将原来的数据覆盖掉了 那么 有些人可能会想 那我们弄个数组 将新的数据全部加到数组里不就行了吗&#xff1f; 这个想法其实就很不错 我们可以…

数据结构与算法--javascript(持续更新中...)

一. 概论 1. 数据结构 队列&#xff1a;一种遵循先进先出 (FIFO / First In First Out) 原则的一组有序的项&#xff1b;队列在尾部添加新元素&#xff0c;并从头部移除元素。最新添加的元素必须排在队列的末尾。&#xff08;例如&#xff1a;去食堂排队打饭&#xff0c;排在前…

JsonView下载安装

文章目录 一、JsonView概述二、JsonView下载三、JsonView安装四、JsonView测试 一、JsonView概述 SONView是一款非常好用的Json格式查看器。在日常开发调试中经常会遇到Json格式的数据需要解析阅读&#xff0c;但Json格式数据阅读性极差&#xff0c;JSONView可以帮我们解决Jso…

基于协同过滤算法的智能推荐点餐系统小程序/基于微信小程序的点餐系统

摘 要 在社会的发展和科学技术的进步&#xff0c;现在我们所生活的世纪是一个集信息高度数字化&#xff0c;网络化&#xff0c;信息化的&#xff0c;以网络为核心的社会。随着移动互联网的飞速发展&#xff0c;微信客户端的应用也逐渐广泛起来。与此同时&#xff0c;我国每个人…

上手CUDA编程

上手CUDA编程 文章目录 上手CUDA编程矩阵加法例子编译 查看本机GPU信息内存管理函数专门二维数组拷贝函数 Reference>>>>> 欢迎关注公众号【三戒纪元】 <<<<< 矩阵加法例子 编写 CUDA C 程序时&#xff0c; 要将文件命名为 *.cu&#xff0c;cu文…

新版危险废物标签二维码制作教程

生态环境部发布的《危险废物识别标志设置技术规范》已经在2023年7月1日正式实施&#xff0c;除了对危废标签格式、内容的规范&#xff0c;明确规定新版危废标签需要包含数字识别码和二维码&#xff0c;实现危险废物“一物一码”管理。 其中危险废物标签中的二维码部分&#xff…

【SuperPoint】语义SLAM深度学习用于特征提取

1. 概况 作者的写作思路很清晰&#xff0c;把各个技术点这么做的原因写的很清楚&#xff0c;一共三篇&#xff0c;另外两篇分别是2016年和2017年发表的&#xff0c;这三篇文章通读下来&#xff0c;可以看清作者在使用深度学习进行位姿估计这一方法上的思路演变过程&#xff0c…