四种无监督聚类算法说明

目录

 一、K-Means无监督学习(K-Means)的认识-CSDN博客​​​​​​

 二、Mini-Batch K-Means -- Centroid models

 三、AffinityPropagation (Hierarchical) -- Connectivity models

四、Mean Shift -- Centroid models

无监督聚类是一种机器学习技术,用于将数据分组成不同的类别,而无需提前标记或指导。在无监督聚类中,算法通过分析数据之间的相似性和差异性,自动将数据划分为具有相似特征的组。 

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import sklearn.cluster as cluster
import time
%matplotlib inline

data = np.load('clusterable_data.npy')#这是一个类似细胞的数据集
plt.scatter(data.T[0], data.T[1], c='b')
frame = plt.gca()
frame.axes.get_xaxis().set_visible(False)
frame.axes.get_yaxis().set_visible(False)

 

 一、K-Means无监督学习(K-Means)的认识-CSDN博客​​​​​​

#K-Means --Centroid models

# k-means clustering
from numpy import unique
from sklearn.cluster import KMeans
from matplotlib import pyplot

# define the model
model = KMeans(n_clusters=6)
# fit the model
model.fit(data)
# assign a cluster to each example
yhat = model.predict(data)
# retrieve unique clusters
clusters = unique(yhat)

palette = sns.color_palette('deep', np.unique(yhat).max() + 1)
colors = [palette[x] if x >= 0 else (0.0, 0.0, 0.0) for x in yhat]
plt.scatter(data.T[0], data.T[1], c=colors)
frame = plt.gca()
frame.axes.get_xaxis().set_visible(False)
frame.axes.get_yaxis().set_visible(False)
plt.title('Clusters found by K-Means')

 二、Mini-Batch K-Means -- Centroid models

Mini-Batch K-Means是一种改进的K-Means聚类算法,它使用了一种随机化的方法来提高运行效率。Centroid models是指聚类过程中使用的中心模型,用于代表每个簇的质心。

在传统的K-Means算法中,聚类过程涉及计算每个数据点与所有质心之间的距离,并将数据点分配到距离最近的质心所代表的簇中。然后,通过计算每个簇中数据点的平均值,更新每个簇的质心。

而在Mini-Batch K-Means中,为了提高计算效率,在每次迭代时只选取部分数据点进行计算。具体做法是,每次从数据集中随机选择一小部分数据(称为Mini-Batch),然后计算这些数据点与当前质心之间的距离,将它们分配到距离最近的簇中,并更新这些簇的质心。

Centroid models在Mini-Batch K-Means中起到了表示每个簇的作用。它们是每个簇的质心,代表了该簇中所有数据点的平均值。在每次迭代中,通过对Mini-Batch中的数据点进行聚类,更新质心,从而不断优化簇的分布和数据点的分配。

通过使用Mini-Batch K-Means和Centroid models,可以加速聚类过程并处理大规模的数据集,同时保持较高的聚类质量。

# mini-batch k-means clustering
from numpy import unique
from sklearn.cluster import MiniBatchKMeans
from matplotlib import pyplot

model = MiniBatchKMeans(n_clusters=6)
# fit the model
model.fit(data)
# assign a cluster to each example
yhat = model.predict(data)
# retrieve unique clusters
clusters = unique(yhat)

palette = sns.color_palette('deep', np.unique(yhat).max() + 1)
colors = [palette[x] if x >= 0 else (0.0, 0.0, 0.0) for x in yhat]
plt.scatter(data.T[0], data.T[1], c=colors)
frame = plt.gca()
frame.axes.get_xaxis().set_visible(False)
frame.axes.get_yaxis().set_visible(False)
plt.title('Clusters found by Mini-Batch K-Means')

 

 三、AffinityPropagation (Hierarchical) -- Connectivity models

AffinityPropagation是一种基于图论的聚类算法,它可以自动确定每个样本的聚类中心。它通过计算样本之间的相似性来构建一个图模型,并在图上进行迭代更新以确定聚类中心。

在AffinityPropagation算法中,样本之间的相似性通过计算欧氏距离、相关系数或其他相似性度量得到。根据相似性度量,构建一个相似度矩阵。然后,算法通过迭代更新样本之间的消息传递来确定每个样本的聚类中心。

具体来说,AffinityPropagation算法通过以下步骤进行聚类:

  1. 初始化相似度矩阵,将样本之间的相似性度量填入矩阵中。

  2. 在相似度矩阵上进行迭代更新,直到满足停止准则。每一轮更新包括两个步骤:

    • 确定每个样本的"责任"(responsibility)值,表示该样本选择其他样本作为聚类中心的程度。
    • 确定每个样本的"可用性"(availability)值,表示其他样本选择该样本作为聚类中心的程度。
  3. 根据最终的聚类中心确定样本的聚类归属。

AffinityPropagation算法的主要优点是不需要预先指定聚类数量,能够自动确定每个样本的聚类中心。然而,它的计算复杂度较高,并且对初始参数的选择敏感。此外,它的结果可能会受到相似性度量的选择和参数调整的影响。

from sklearn.cluster import AffinityPropagation
from matplotlib import pyplot
from numpy import unique

# fit the model
model = AffinityPropagation(damping=0.95)
model.fit(data)
yhat = model.predict(data)

# retrieve unique clusters
clusters = unique(yhat)

palette = sns.color_palette('deep', np.unique(yhat).max() + 1)
colors = [palette[x] if x >= 0 else (0.0, 0.0, 0.0) for x in yhat]
plt.scatter(data.T[0], data.T[1], c=colors)
frame = plt.gca()
frame.axes.get_xaxis().set_visible(False)
frame.axes.get_yaxis().set_visible(False)
plt.title('Clusters found by AffinityPropagation')#显然这种方法不适合于用在类似细胞结构的数据上

clusters
'''结果:array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
       34, 35, 36, 37, 38, 39, 40, 41], dtype=int64)'''

四、Mean Shift -- Centroid models

Mean Shift是一种基于密度的非参数化聚类算法。它的目标是发现数据分布中的概率密度最大值,从而确定聚类中心。该算法通过不断地迭代更新数据点的位置,使其向概率密度较高的区域移动,直到达到局部最大值。

具体来说,Mean Shift算法首先选择一个初始点作为聚类中心,然后计算该点周围数据点的平均位置(即mean shift)。然后将该平均位置作为新的聚类中心,并重复该过程,直到聚类中心不再发生明显的变化或达到设定的迭代次数。

在算法的最终阶段,可以根据聚类中心的邻域关系将数据点分配到不同的聚类。Mean Shift算法的优点是不需要预先指定聚类数量,可以自动适应数据的分布形态。然而,它在处理高维数据时可能会受到维数灾难的影响,并且对初始中心点的选择较为敏感。因此,在实际应用中,可能需要进行参数调优或配合其他算法来提高聚类效果。

# mean shift clustering
from numpy import unique
from sklearn.cluster import MeanShift
from matplotlib import pyplot

# define the model
model = MeanShift(bandwidth=0.175,cluster_all=False)
# fit model and predict clusters
yhat = model.fit_predict(data)
# retrieve unique clusters
clusters = unique(yhat)

palette = sns.color_palette('deep', np.unique(yhat).max() + 1)
colors = [palette[x] if x >= 0 else (0.0, 0.0, 0.0) for x in yhat]
plt.scatter(data.T[0], data.T[1], c=colors)
frame = plt.gca()
frame.axes.get_xaxis().set_visible(False)
frame.axes.get_yaxis().set_visible(False)
plt.title('Clusters found by Mean Shift')

clusters
#结果:array([-1,  0,  1,  2,  3,  4])
#-1表示噪音,不属于某个群

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Star 8K+,使用.NET开发的开源NoSQL数据库

LiteDB 是一个轻量级、快速、易用的 .NET NoSQL 嵌入式数据库,完全用 C# 托管代码开发,并且是免费和开源的。它非常适合在移动应用(Xamarin iOS/Android)和小型的桌面/Web 应用中使用。 主要特点 简单易用的 API,类似…

软件项目质量保证措施-word

一、 质量保障措施 二、 项目质量管理保障措施 (一) 资深的质量经理与质保组 (二) 全程参与的质量经理 (三) 合理的质量控制流程 1. 质量管理规范: 2. 加强协调管理&…

BikeDNA(八)外在分析:OSM 与参考数据的比较2

BikeDNA(八)外在分析:OSM 与参考数据的比较2 1.数据完整性 见链接 2.网络拓扑结构 见链接 3.网络组件 本节仔细研究两个数据集的网络组件特征。 断开连接的组件不共享任何元素(节点/边)。 换句话说,…

MES生产执行系统在生产车间的主要作用

MES生产执行系统提供从生产订单下达到产品完成全流程的优化管理。实现现场设备、执行系统及管理系统的集成,实时监控生产管理各项绩效指标。 如果说ERP是上层决策,生产车间是下层执行,那么MES就是连接管理软件和一线生产的中间桥梁。 MES也…

c++静态数据成员

目录 静态成员变量 1. 问:这是为什么呢? (以下结束均为个人理解,如有问题,请指教) 2. 使用场景(举一个例子) 代码中需要注意的点: 3.总结: 静态成员函数 使用场景: 静态成员函数中没有…

大模型核心技术原理: Transformer架构详解

在大模型发展历程中,有两个比较重要点:第一,Transformer 架构。它是模型的底座,但 Transformer 不等于大模型,但大模型的架构可以基于 Transformer;第二,GPT。严格意义上讲,GPT 可能…

Linux 内核如何根据设备树文件来匹配内核

一. 简介 上一篇文章学习了 Linux内核如何确定是否支持此设备,如果支持,设备就会启动 Linux 内核。 文章地址如下: 设备树根节点下的compatile属性的作用-CSDN博客 本文继上面文章的学习。这里简单看一下, Linux 内核是如何根…

odoo17 | 模型之间的交互

前言 在前一章中,我们使用继承来修改模块的行为。在我们的房地产场景中,我们希望更进一步,能够为我们的客户生成发票。Odoo提供了一个发票(Invoicing)模块,所以直接从我们的房地产模块创建一个发票会很简洁…

VS报错:error:LNK2005 _main 已经在 *.obj 中定义

应该是重定义了,但是又解决不了,看似又没有重定义啊,就在一个文件定义了啊?怎么会出现这种情况呢?关键是,编译报错,程序运行不了了。 这里提一下我的前期操作,是因为将一个头文件和…

图像监视:在 Visual Studio 调试器中查看内存中图像

先决条件 本教程假定您具有以下可用项: 安装了 Update 1 的 Visual Studio 2012 Professional(或更高版本)。更新 1 可在此处下载。在 Windows 计算机上安装 OpenCV(教程:在 Windows 中安装)。能够在 Visua…

【Spring 篇】深入探索:Spring集成Web环境的奇妙世界

嗨,亲爱的小白们!欢迎来到这篇有关Spring集成Web环境的博客。如果你曾对如何在Spring中构建强大的Web应用程序感到好奇,那么这里将为你揭示Web开发的神秘面纱。我们将用情感丰富、语句通顺的文字,以小白友好的方式,一探…

survey和surveyCV:如何用R语言进行复杂抽样设计、权重计算和10折交叉验证?

一、引言 在实际调查和研究中,我们往往面临着样本选择的复杂性。复杂抽样设计能够更好地反映真实情况,提高数据的代表性和可靠性。例如,多阶段抽样可以有效地解决大规模调查的问题,整群抽样能够在保证样本的随机性的同时减少资源消…

D25XB100-ASEMI家用电器整流桥D25XB100

编辑:ll D25XB100-ASEMI家用电器整流桥D25XB100 型号:D25XB100 品牌:ASEMI 封装:GBJ-5(带康铜丝) 平均正向整流电流(Id):25A 最大反向击穿电压(VRM&…

thinkphp递归实现无限级子分类合并上级children

//设别分类列表public function getCategoryList(){$list = Db::name(categorys)->select(

玩转Mysql 七 (索引的创建与设计原则)

一、索引的创建与使用 1、索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 (1)从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 (…

20_GC垃圾回收机制

文章目录 GC如何确定垃圾如何回收垃圾回收垃圾的时机 GC 如何确定垃圾 引用计数算法 给对象添加一个引用计数器,每当一个地方引用它时,计数器加1,每当引用失效时,计数器减少1,当计数器的数值为0时,也就是对…

Django教程|数据统计图表(echarts、highchart)

前言 highchart,国外。 echarts,国内。 本项目集成 hightchart和echarts图表库实现数据统计功能。 包括:折线图,柱状图,饼图和数据集图。 效果图 echats Highcharts 源代码 编写模板(Template&#x…

Docker安装Atlassian全家桶

文章目录 省流:1.docker-compose文件2.其他服务都正常启动,唯独Bitbucket不行。日志错误刚启动时候重启后查询分析原因再针对第一点排查看样子是安装的bitbucket和系统环境有冲突问题? 结论: 省流: bitbucket 只能安装…

idea使用ssh连接docker,并通过Dockerfile文件,直接在idea中启动docker应用,并进行远程debug

idea使用ssh连接docker,并通过Dockerfile文件,直接在idea中启动docker应用,并进行远程debug 第一步: idea通过ssh连接docker第二步:使用Dockerfile文件在远程启动应用第三步: 远程debug 容器运行的好处是减轻本地运行的负担(本地电…

数据结构初探:揭开数据结构奥秘

🌈个人主页:聆风吟 🔥系列专栏:数据结构、算法模板、汇编语言 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 数组结构起源二. 基本概念和术语2.1 数据2.2 数据元素2.3 数据项2.4 …