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

2023-11-26 22:01

本文主要是介绍聚类笔记/sklearn笔记:Affinity Propagation亲和力传播,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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 npX = 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博客

这篇关于聚类笔记/sklearn笔记:Affinity Propagation亲和力传播的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/426375

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个