四种无监督聚类算法说明

目录

 一、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 inlinedata = 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 pyplotmodel = 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表示噪音,不属于某个群

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

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

相关文章

11Spring IoC注解式开发(上)(元注解/声明Bean的注解/注解的使用/负责实例化Bean的注解)

注解的存在主要是为了简化XML的配置。Spring6倡导全注解开发。 注解开发的优点:提高开发效率 注解开发的缺点:在一定程度上违背了OCP原则,使用注解的开发的前提是需求比较固定,变动较小。 1 注解的注解称为元注解 自定义一个注解: package com.sunspl…

Unity中的异步编程【7】——在一个异步方法里播放了animation动画,取消任务时,如何停止动画播放

用一个异步方法来播放一个动画,正常情况是:动画播放结束时,异步方法宣告结束。那如果我提前取消这个异步任务,那在这个异步方法里面,我要怎么停止播放呢?! 一、播放animation动画的异步实现 1…

html+css+Jquery 实现 文本域 文字数量限制、根据输入字数自适应高度

先看效果&#xff1a;初始的效果&#xff0c;样式多少有点问题&#xff0c;不重要&#xff01;重要的是功能&#xff01; 输入后&#xff1a; 根据文字长度&#xff0c;决定文本域长度 限制文字数量 话不多说&#xff0c;直接上代码&#xff01; <!DOCTYPE html> <h…

特征工程-特征处理(一)

特征处理-&#xff08;离散型特征处理&#xff09; 完成特征理解和特征清洗之后&#xff0c;我们要进行特征工程中最为重要和复杂的一步了——特征处理 离散型特征处理 离散型特征通常为非连续值或以字符串形式存在的特征&#xff0c;离散型特征通常来讲是不能直接喂入模型中…

如何有效提高矢量网络分析仪的动态范围

动态范围是网络分析仪&#xff08;VNA&#xff09;接收机的最大输入功率与最小可测量功率&#xff08;本底噪声&#xff09;之间的差值&#xff0c;如图所示&#xff0c;要使测量有效&#xff0c;输入信号必须在这些边界内。 如果需要测量信号幅度非常大的变化&#xff0c;例如…

C程序训练:阶乘与溢出

已知n是整数&#xff0c;计算12!3!...n!&#xff0c;并给出最大能够计算的n值是多少&#xff1f; 1. 假设n是int类型&#xff0c;系统用32位表示int类型。代码如下&#xff1a; #include <stdio.h> int main() {int n,sum1,sum1,fact1;int step;for(n2; n<100; n) {…

UCB Data100:数据科学的原理和技巧:第二十一章到第二十六章

二十一、SQL II 原文&#xff1a;SQL II 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 学习成果 介绍过滤组的能力 在 SQL 中执行数据清理和文本操作 跨表连接数据 在本讲座中&#xff0c;我们将继续上次的工作&#xff0c;介绍一些高级的 SQL 语法。 首先&…

3d建模软件有哪些?3d云渲染推荐

3D建模软件有很多&#xff0c;有的非常复杂难以上手&#xff0c;那么适合新手的有哪些呢&#xff1f;一起来看看吧。 1、SketchUp SketchUp是一个用户友好且直观的建模软件&#xff0c;能与V-Ray渲染器一起使用&#xff0c;适合初学者。2、Blender Blender是一个功能强大且免费…

高级JavaScript。如何用JavaScript手撸一个富文本编辑器?

要素过多建议收藏 - 富文本编辑 基本的技术就是在空白 HTML 文件中嵌入一个 iframe 。通过 designMode 属性&#xff0c;可以将这个空白文档变成可以编辑的&#xff0c;实际编辑的则是 <body> 元素 的 HTML 。 designMode 属性有两个可能的值&#xff1a; "…

文件恢复工具推荐!这三款轻松恢复数据!

“大家保存在电脑上的文件丢失后有什么比较好的恢复方法或者工具推荐吗&#xff1f;对于我这种电脑小白来说&#xff0c;真的太需要一个好用的工具了&#xff01;谢谢&#xff01;” 在我们的日常工作中&#xff0c;可能都遇到过文件误删或丢失的情况。这有时会让我们感到很不安…

【模型评估 07】过拟合与欠拟合

在模型评估与调整的过程中&#xff0c;我们往往会遇到“过拟合”或“欠拟合”的情况。如何有效地识别“过拟合”和“欠拟合”现象&#xff0c;并有针对性地进行模型调整&#xff0c;是不断改进机器学习模型的关键。特别是在实际项目中&#xff0c;采用多种方法、从多个角度降低…

将.NET应用转换成Window服务

写在前面 本文介绍了将.NET8.0应用程序转换成Windows服务。 需要在NuGet中获取并安装&#xff1a;Microsoft.Extensions.Hosting.WindowsServices 包 代码实现 using System.Runtime.InteropServices; using WorkerService1;public class Program {public static void Main…