聚类笔记/sklearn笔记:Affinity Propagation亲和力传播

news2024/9/25 19:18:31

1 算法原理

1.1 基本思想

  • 将全部数据点都当作潜在的聚类中心(称之为 exemplar )
  • 然后数据点两两之间连线构成一个网络( 相似度矩阵 )
  • 再通过网络中各条边的消息( responsibility 和 availability )传递计算出各样本的聚类中心。

1.2 主要概念

Examplar聚类中心
similarity  S(i,j)

相似度

一般使用负的欧式距离,所以 S(i,j) 越大,表示两个点距离越近,相似度也就越高

Preference
  • 点 i 作为聚类中心的参考度(不能为0),取值为 S相似度 对角线的值
  • 此值越大,则为聚类中心的可能性就越大。
  • 如果没有被设置,则一般设置为 S相似度 值的中值

Responsibility 

吸引度

  • 点 k 适合作为数据点 i 的聚类中心的程度,记为 r(i,k) 。

Availability

归属度

  • 点 i 选择点 k 作为其聚类中心的适合程度,记为 a(i,k)
  • r和a都是第二个参数的点作为聚类中心

Damping factor

阻尼系数

主要是起收敛作用

1.3 算法流程

  • 计算相似度矩阵
    • 此时对角线上的值都是0,用某种方法(固定参数/相似度矩阵的中位值/最小值等)填充对角线的值
  • 开始时:构造一个全0的归属度矩阵a
  • 以下不断迭代更新
    • 更新每一个吸引度矩阵r中的单元格值
    • 更新归属度矩阵a
    • 使用阻尼系数更新归属度a和吸引度r
      • 使用阻尼系数(damping factor)来衰减吸引度和归属度信息,以免在更新的过程中出现数值振荡
      • 上面三个公式算出来的是等号右边的a和r
  • 获取聚类中心

1.4 举例

  • 假设有如下样本:共5个维度
  • 计算相似度矩阵
    • 相似度矩阵中每个单元是用两个样本对应值的差的平方和取负值得到的,对角线上的除外
    • 当聚类中心为对角线上的单元格选择了比较小的值,那么AP算法会快速收敛并得到少量的聚类中心,反之亦然。因此。我们使用表格中最小的值 -22 去填充相似度矩阵中的 0 对角线单元格。
  • 计算吸引度矩阵r
    • eg:计算 Bob对 Alice的 吸引度(Responsibility)【Alice视Bob为聚类中心的程度,r(Alice,Bob)
      • 这里套用上面的公式即为:用S(Bob,Alice)- max(a(Alice,others)+s(Alice,others))
        • 即 -7-(-6)=-1
  • 计算归属度矩阵a
      • 以alice为例,a(Alice,Alice)就是 所有大于0的 r(others,Alice)的和,即10+11=21
      • 以Alice支持Bob作为其聚类中心为例
      • a(Alice,Bob)=min(0,r(Bob,Bob)+0)=-15 【没有r(others,Bob)大于0】
  • 假设迭代一次就结束,那么我们计算评估矩阵
    • c=r+a
    • 一般将评估矩阵中取得最大值的一些点作为聚类中心
      • Alice,Bob 和 Cary 共同组成一个聚类簇
      • Doug 和 Edna 则组成了第二个聚类

1.5 主要缺点

  • Affinity Propagation的主要缺点是其复杂性。该算法的时间复杂度为O(N^2 \times I),其中 N 是样本数量,I 是直到收敛的迭代次数
  • 如果使用密集的相似性矩阵,则内存复杂度为 O(n^2),但如果使用稀疏的相似性矩阵则可以降低。
  • 这使得Affinity Propagation最适合小到中等大小的数据集

2 sklearn实现

class sklearn.cluster.AffinityPropagation(
    *, 
    damping=0.5, 
    max_iter=200, 
    convergence_iter=15, 
    copy=True, 
    preference=None, 
    affinity='euclidean', 
    verbose=False, 
    random_state=None)

2.1 主要参数


damping

float,默认为0.5

阻尼因子,取值范围是[0.5, 1.0)

max_iter

int,默认为200

最大迭代次数

convergence_iter

int,默认为15

估计的簇数量没有变化的迭代次数,达到该次数则停止收敛

preference

array-like形状为(n_samples,)或浮点数,默认为None

每个点的偏好 - 具有较大偏好值的点更有可能被选择为典型样本

如果没有传递偏好作为参数,它们将被设置为输入相似度的中值。

affinity

{‘euclidean’, ‘precomputed’},默认为‘euclidean’

使用哪种亲和力。目前支持‘precomputed’和欧几里得。‘euclidean’使用点之间的负平方欧几里得距离。

2.2 主要属性

from sklearn.cluster import AffinityPropagation
import numpy as np

X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

ap=AffinityPropagation(damping=0.8).fit(X)
cluster_centers_indices_

簇中心的索引

cluster_centers_

簇中心

labels_

每个点的标签

affinity_matrix_

亲和力矩阵

n_iter_

收敛所需的迭代次数

 

参考内容:AP聚类算法(Affinity propagation) - 知乎 (zhihu.com)

常见聚类算法及使用--Affinity Propagation(AP)_af nity propagation 是什么意思-CSDN博客

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

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

相关文章

软件工程——数据流图(20分把握在自己手里)【言简意赅】

数据流图【DFD -> Data Flow Diagram】 确定外部实体: 在一个对于某系统的描述中,我们需要分辨的是,该系统的使用人员(或外部设备),以及系统所反馈的人员(或外部设备)是谁? 这就是外部实体!与系统内部处…

新手必看!!附源码!!STM32通用定时器-比较输出PWM

一、什么是PWM? PWM(脉冲宽度调制)是一种用于控制电子设备的技术。它通过调整信号的脉冲宽度来控制电压的平均值。PWM常用于调节电机速度、控制LED亮度、产生模拟信号等应用。 二、PWM的原理 PWM的基本原理是通过以一定频率产生的脉冲信号&#xff0…

使用Wireshark提取流量中图片方法

0.前言 记得一次CTF当中有一题是给了一个pcapng格式的流量包,flag好像在某个响应中的图片里。比较简单,后来也遇到过类似的情况,所以总结和记录一下使用Wireshark提取图片的方法。 提取的前提是HTTP协议,至于HTTPS的协议需要导入服…

uni-app打包后,打开软件时使其横屏显示

找到page.json文件,在global加入以下代码: 这样就可以横屏显示了。

走迷宫(BFS宽度优先搜索)

给定一个 nm 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左、右任意一个方向移动…

机器学习实战-第2章 k-近邻算法

KNN 概述 k-近邻(kNN, k-NearestNeighbor)算法是一种基本分类与回归方法,我们这里只讨论分类问题中的 k-近邻算法。 一句话总结: 近朱者赤近墨者黑! k 近邻算法的输入为实例的特征向量,对应于特征空间的点;输出为实例的类别,可以取多类。k 近邻算法假设给定一个训练数…

掌握高效性能测试技能:JMeter基础入门!

一、JMeter基础 A、JMeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。 Apache JMeter may be used to test performance both on static and dynamic resources (files, Servlets, Perl scripts, Java Objects, Data Bases and Queries, FTP Servers and …

可视化NGINX管理平台Nginx Proxy Manager

# for CentOSyum install docker-compose -y# for Ubuntuapt-get install docker-compose -y 如果提示: 没有可用软件包 docker-compose, 错误:无须任何处理 通过 pip 安装 docker-compose # 添加企业版附加包 yum -y install epel-rel…

二次开发问题汇总【C#】

1未将对象引用到实例。 接口函数的参数不对。解决办法【用fixed去限制数组长度】 unsafe public struct VCI_BOARD_INFO {public UInt16 hw_Version;public UInt16 fw_Version;public UInt16 dr_Version;public UInt16 in_Version;public UInt16 irq_Num;public byte can_Num;…

【实战精选】掌握图像风格迁移:构建基于生成对抗网络的系统

1.研究背景与意义 随着计算机技术的不断发展,图像处理和计算机视觉领域取得了长足的进步。图像风格迁移是其中一个备受关注的研究方向,它可以将一幅图像的风格特征应用到另一幅图像上,从而创造出新的图像。这项技术具有广泛的应用前景&#…

分布式链路追踪入门篇-基础原理与快速应用

为什么需要链路追踪? 我们程序员在日常工作中,最常做事情之一就是修bug了。如果程序只是运行在单机上,我们最常用的方式就是在程序上打日志,然后程序运行的过程中将日志输出到文件上,然后我们根据日志去推断程序是哪一…

随笔记录-springmvc_ResourceHandlerRegistry+ResourceHttpRequestHandler

环境:springboot-2.7.5 配置文件配置静态资源映射 springboot配置静态资源映射方式是通过 WebMvcAutoConfiguration 实现的 spring: # resources: # # 自springboot 2.5.5之后,该属性已经被废弃,使用spring.web.resources.static-locat…

[Android]使用Git将项目提交到GitHub

如果你的Mac还没有安装Git,你可以通过Homebrew来安装它: brew install git 方式一:终端管理 1.创建本地Git仓库 在项目的根目录下,打开终端(Terminal)并执行以下命令来初始化一个新的Git仓库&#xff1…

红队攻防实战之钉钉RCE

我这一生如履薄冰,你说我能走到对岸吗? 本文首发于SecIN社区,原创作者即是本人 前言 网络安全技术学习,承认⾃⼰的弱点不是丑事。只有对原理了然于⼼,才能突破更多的限制。拥有快速学习能力的白帽子,是不…

【IEEE-TRANS】CCF-B类,IF:11+, 1区顶刊,无需版面费,最快2个月左右录用!

论文写作堪比西天取经,当我们经历“九九八十一难,取得真经“,还有最关键的一步,就是选刊发表。是“投石问路”,还是“投其所好”? 选刊有多重要,相信只要有过发表SCI经验的人都十分清楚。如果不…

Android设计模式--适配器模式

至诚之道,可以前知 一,定义 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 适配器模式在我们的开发中使用率极高,ListView,GridView&am…

烫伤事件屡有发生,觅光推脱责任,称是用户操作失误

提及“双十一”“直播间”等关键词,人们常常将其与“低价”“薅羊毛”等字眼挂钩。而在近日,科技美容品牌AMIRO觅光(下称“觅光”)却上演了一出“反向薅羊毛”的戏码,因线上线下渠道相差超千元的价格差饱受争议。 自横…

Jackson无缝替换Fastjson

目录 文章目录 一,Fastjson到Jackson的替换方案方案代码序列化反序列化通过key获取某种类型的值类型替换 二,Springboot工程中序列化的使用场景三,SpringMVC框架中的Http消息转换器1,原理:2,自定义消息转换…

FinGPT:金融垂类大模型架构

Overview 动机 架构 底座模型: Llama2Chatglm2 Lora训练 技术路径 自动收集数据并整理 指令微调 舆情分析 搜新闻然后相似搜索 检索增强架构 智能投顾 Hugging face 地址 学术成果及未来方向 参考资料