【Python】sklearn之AP聚类AffinityPropagation

news2025/1/4 19:39:56

文章目录

    • 基本原理
    • sklearn中的实现

基本原理

AffinityPropagation按照字面意思就是亲和力传播,可见这个算法的关键就是亲和力与传播。

说到传播,无外乎两件事,第一件事,传的是什么,暂且先不用管,因为名字里已经说了,传的是亲和度;第二件事,怎么传,为了解决这个问题,就必须造一条传递亲和力的通道。

最直接的想法就是连接样本中所有的点,这样点与点之间就有了关联。
从而得到一个图。

下面新建100个随机点,然后建立这100个随机点之间的距离矩阵,最后把距离矩阵画出来

import numpy as np
import matplotlib.pyplot as plt

from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

X, y = make_blobs(100, centers=[(1,1),(11,11)])
ds = np.linalg.norm(X.reshape(-1,1,2)-X.reshape(1,-1,2), axis=2)

得到结果如图所示

在这里插入图片描述

其中绿色的值比较小,而蓝色比较大。值越小,意味着距离越短,也就是说更应该属于相同的类别,换言之,也就是越相似。在AP算法中,用负距离表示相似度,从而相似度越大则距离越短,则越相似。

相应地,距离矩阵取个负号,就是相似度矩阵了,其元素表示为

s i j = − ∥ x i − x j ∥ 2 s_{ij}=-\Vert x_i-x_j\Vert^2 sij=xixj2

下面再详细地想一想这个亲和力到底是个啥,如果一个人很有亲和力的话,那么必然会吸引到其他人;反过来讲,只有这个人能够吸引到足够多的人,才说明这个人有亲和力,换言之,这个人需要依赖那些被他吸引的人。所以,AP算法通过相似度矩阵传递的真正内容,就是吸引和依赖。

吸引度 r i k r_{ik} rik由聚类中心 i i i传给点 k k k,用于累积 k k k的竞争力;依赖度 a i k a_{ik} aik与之相反,表示在数据点 k k k的帮助下, i i i才能成为聚类中心。

二者的更新方式如下

r i k = s i k − arg max ⁡ k ′ , k ′ ≠ k a i k ′ + s i k ′ a i k = min ⁡ ( 0 , r k k + ∑ i ′ , i ′ ∉ { i , k } max ⁡ ( 0 , r i ′ k ) ) \begin{aligned} r_{ik}&=s_{ik}-\argmax_{k', k'\not=k} a_{ik'}+s_{ik'}\\ a_{ik}&=\min(0, r_{kk}+\sum_{i', i'\not\in\{i,k\}}\max(0,r_{i'k})) \end{aligned} rikaik=sikk,k=kargmaxaik+sik=min(0,rkk+i,i{i,k}max(0,rik))

其中 r k k r_{kk} rkk为自吸引度,当该值为负数时,说明这个点不适合做聚类中心。随着不断迭代,如果一个聚类中心不适合做中心,那么其依赖度将会越来越小,最后顺利被聚类中心除名。

为了让迭代过程不那么剧烈,一般会在参数更新时添加一个阻尼系数 λ \lambda λ,以吸引度为例,在得到第 t t t r r r之后,会考虑上一代 r r r的影响,从而减小 t t t更新的幅度。

r t = ( 1 − λ ) r t + λ r t − 1 r_t=(1-\lambda)r_t+\lambda r_{t-1} rt=(1λ)rt+λrt1

sklearn中的实现

sklearn中,AffinityPropagation类的阻尼系数为参数damping,其取值范围从0.5到1,取值越大,则迭代越快,默认为0.5。下面做一个最简单的示范,需要注意的是,AP算法效率很低,测试数据不宜过大。

from sklearn.cluster import AffinityPropagation as AP
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
import numpy as np
import time
from itertools import cycle

ys, xs = np.indices([2,2])*6
cens = list(zip(xs.reshape(-1), ys.reshape(-1)))
X, _ = make_blobs(1400, centers=cens)
y = AP(random_state=0).fit(X)
ccIndices = y.cluster_centers_indices_  # 质心坐标

colors = 'bgrcmykbgrcmykbgrcmykbgrcmyk'
for x,k in zip(X, y.labels_):
    cen = X[ccIndices[k]]
    plt.plot([cen[0], x[0]], [cen[1], x[1]], colors[k])

plt.show()

得到聚类结果

在这里插入图片描述

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

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

相关文章

WORD: 如何在一个word里文档里创建多个目录?

如何在一个word里文档里创建多个目录? 1 目录的创建 引用/目标/自动目录 (同时文章本身需要设置层级标题正文等) 一般不选手动目录,没试过狠麻烦吧2 如何设置2个目录呢? 直接在新的地方插入一个目录,选择…

OpenGL教程一,窗体和图形的渲染(包含OpenGL、GLFW、GLAD)

运行环境:Linux 、C 本教程仅个人学习总结第一个hello world,渲染一个窗体渲染一个矩形本教程仅个人学习总结 一切参考资源:都在官网。 1、安装glfw 首先下载glfw : 点击这里 1、下载 2、解压 3、mkdir build && cd build 4、cmake …

学习poi导出excel之XSSFWorkbook

1 基本介绍 POI提供了HSSF、XSSF以及SXSSF三种方式操作Excel。 HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。 XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576&…

电脑桌面主题(28)和动态视频壁纸(31)合集(收藏)

最近就是突然被身边朋友的电脑壁纸给吸引到了,在这之前的我一直遵循着 “大道至简” 的原则,一张Windows原生态静态壁纸走天下,但是作为一个00后我还是 “破戒” 了,其实我认为特别像程序员之类的有一张自己满意的桌面壁纸是非常重…

Mybatis-Plus分页与条件查询

目录 标准分页功能制作 条件查询 条件查询-null值处理 标准分页功能制作 1:设置分页拦截器作为Spring管理的bean Configuration public class MpConfig {Beanpublic MybatisPlusInterceptor mpInterceptor(){//1.定义MP拦截器MybatisPlusInterceptor mpIntercept…

Python中使用的流行数据科学库

Python中使用的流行数据科学库 数据科学是用于采购、组织、打包和以可理解的格式呈现数据的程序和方法。在不同的领域可能有不同种类的数据,这些数据可能是结构化的,也可能是非结构化的。 为什么Python在人们开始他们的编码之旅时如此受欢迎&#xff1…

删除数组中符合指定条件的元素

不符合指定条件&#xff0c;可能是指定数组array中的某一项不符合某一值的要求&#xff1b;或者是拿另一个数组arr对比&#xff0c;要求array只留下复合arr中的值或者删除掉复合arr中的值。 1.不符合某一值的要求 <!DOCTYPE html> <html lang"en"> <…

一篇文章轻松掌握java图实现

图的基本概念&#xff1a;这里就不予介绍了&#xff0c;这里主要是讲图的代码实现 荔枝目录&#xff1a;1.图的存储结构1.1邻接矩阵1.2邻接表2.图的遍历2.1广度优先2.2深度优先3.最小生成树3.1Kruskal算法&#xff08;全局&#xff09;3.2Prim算法&#xff08;局部&#xff09;…

[UE][UE5]在UE中画一个线框球,网格连接画球,高阶画球并操控

[UE][UE5]在UE中画一个线框球&#xff0c;网格连接画球&#xff0c;高阶画球并操控1.材质法2.绘制调试球体3.网格连接4.高阶画球并操控1.材质法 缺点&#xff1a;是实体的&#xff0c;只能欺骗视觉&#xff0c;实际还是一个实体体积球&#xff0c;往里放东西显示不出来放进去的…

Python中ArcPy基于矢量要素批量将栅格影像切割为多个小部分

本文介绍基于Python中ArcPy模块&#xff0c;基于具有多个面要素的要素类&#xff0c;批量分割大量栅格图像的方法。 首先明确一下我们的需求。现在需要基于一个面要素类&#xff0c;对一个栅格遥感影像加以分割&#xff1b;如下图所示。这个面要素类中有3个部分&#xff0c;我们…

MMdetection框架速成系列 第02部分:整体算法流程+模型搭建流程+detection训练与测试核心组件+训练部分与测试部分的核心算法

MMdetection框架速成系列 第02部分1 MMDetection是什么1.1 模型分类2. 整体算法流程3 detection训练核心组件3.1 Backbone3.2 Neck3.3 Head3.4 Enhance3.5 BBox Assigner3.9 BBox Sampler3.10 BBox Encoder3.11 Loss3.12 Training tricks4 detection测试核心组件4.1 BBox Decod…

python源码打包exe、exe反编译

一、python3打包为exe文件 这里有个hello.py文件 step1&#xff1a;安装pyinstaller包 pip install pyinstaller step2&#xff1a;在cmd中进入hello.py文件所在路径。可以直接在hello.py文件路径下直接进入cmd step3&#xff1a;打包生成exe文件&#xff0c;使用如下命令&…

Linux网络协议之IP协议(网络层)

Linux网络协议之IP协议(网络层) 文章目录Linux网络协议之IP协议(网络层)1.IP协议基本概念2.IPV4协议格式3.分片与组装4.IP网段划分4.1 IP地址组成4.2 IP地址分类4.3 特殊的IP地址4.4 IP地址的数量限制4.5 私网IP地址与公网IP地址5.对路由的了解1.IP协议基本概念 IP协议全称为“…

第四章 vi和vim 编辑器-[实操篇]

一&#xff1a;vi 和 vim 的基本介绍 所有的 Linux 系统都会内建vi文本编辑器。 Vim 具有程序编辑的能力&#xff0c;可以看做是 Vi的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。代码补完&#xff0c;编译及错误跳转等方便编程的功…

Linux安装【入门学习适用】

Linux安装安装1、安装VMware激活码&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF2、安装CentOS3、FinalShell安装4、FinalShell的使用安装 1、安装VMware VMware-workstation-full-16.2.4无脑下一步即可 激活码&#xff1a;ZF3R0-FHED2-M80TY-8QYGC-NPKYF 2、安装CentOS 1、…

TensorFlow笔记之多元线性回归

文章目录前言一、数据处理二、TensorFlow1.x1.定义模型2.训练模型3.结果可视化4.模型预测5.TensorBoard可视化三、TensorFlow2.x1.定义模型2.训练模型3.结果可视化4.模型预测总结前言 记录使用TensorFlow1.x和TensorFlow2.x完成多元线性回归的过程。 一、数据处理 在此使用波…

dll修复工具哪个比较好?好的修复工具怎么选择

最近有小伙伴咨询小编&#xff0c;问dll修复工具的选择&#xff0c;因为他的电脑经常出现dll缺失&#xff0c;一缺失就打开不了各种软件程序&#xff0c;非常的让他烦恼&#xff0c;所以今天小编就来给大家详细的说说dll修复工具哪个比较好&#xff1f;要怎么去选择。 一.什么…

36 氪发布《研发项目管理软件应用指南》,ONES 入选典型厂商案例

近日&#xff0c;36氪企服点评发布了《研发项目管理软件应用指南》&#xff08;下称「指南」&#xff09;。36氪企服点评致力于帮助每个需求企业服务的人做出正确的决策&#xff0c;携手每个企服行业者为大众提供更高的价值与服务。在该指南中&#xff0c;36氪企服点评综合了海…

大数据系列——ClickHouse表引擎与分布式查询

目录 一、ClickHouse的表引擎 1、MergeTree的创建方式与存储结构 2、ReplacingMergeTree 二、数据分片与分布式查询 三、Clickhouse-ETL常见业务使用 一、ClickHouse的表引擎 表引擎体系&#xff0c;包括合并树、外部存储、内存、文件、接口和其他6大类20多种表引擎。而在…

全流量回溯分析为您解决应用性能问题(一)

前言 信息中心老师反应&#xff0c;用户反馈办公系统有访问慢的情况&#xff0c;需要通过流量分析系统来了解系统的运行情况&#xff0c;此报告专门针对系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统&#xff0c;使用流量分析系统提供实时和历史原始流量&am…