马尔可夫聚类算法

马尔可夫聚类算法(Markov Clustering Algorithm,MCL)是一种用于图聚类的算法,广泛应用于生物信息学、社交网络分析、推荐系统等领域。

其核心思想是模拟随机游走过程,通过迭代地扩散和收缩图上的概率分布来识别图中的自然聚类或社区结构。

马尔可夫聚类算法的核心步骤

  1. 构建转移矩阵

    1. 对于给定的图,生成转移矩阵(Markov Matrix),其中每个元素表示从一个节点转移到另一个节点的概率。

    2. 设图的邻接矩阵为 A,转移矩阵 M 的元素定义为

      M_{ij} = \frac{A_{ij}}{\sum_k A_{ik}}

      ,即从节点 i 转移到节点 j 的概率是节点 i 的所有边的权重的归一化值。

  2. 扩散(扩展)操作:

    • 对转移矩阵进行幂运算 Mr,通常 r=2。这相当于模拟多步随机游走,使得概率分布扩散开来。

    • 扩展步骤是为了使节点间的相似性得以传播,能捕捉到较长路径上的信息。

  3. 收缩(膨胀)操作

    • 对转移矩阵的每个元素进行逐项幂操作

      M_{ij} = M_{ij}^\alpha

      ,然后重新归一化。通常,膨胀因子 α 取值大于1。

    • 膨胀步骤是为了增强高概率路径,同时抑制低概率路径,这样能把概率集中在更紧密相关的节点上,从而分离出聚类。

  4. 归一化

    • 收缩操作后需要重新归一化矩阵,使得每行的概率和为1,以确保结果仍然是一个有效的转移矩阵。

  5. 迭代

    • 不断重复扩散和收缩操作,直到矩阵收敛,得到稳定的概率分布。收敛时,转移矩阵的列通常会收敛到一些特定的块结构,这些块对应图中的不同聚类。

  6. 解码聚类

    • 通过观察收敛后的矩阵,确定聚类。一般来说,转移矩阵的每一列的高值(接近1)集中在特定的行上,这些行就代表了同一个聚类。

算法优点

  • 自适应性:不需要预先指定聚类的数量。

  • 适应性强:可以很好地处理带有噪声的网络。

  • 捕捉复杂结构:能有效捕捉到网络中的复杂拓扑结构。

算法缺点

  • 参数选择:膨胀因子和扩展次数的选择对结果有较大影响。

  • 计算复杂度:对于大规模图,计算量较大,需要有效的矩阵运算方法。

算法实现

import numpy as npdef add_self_loops(matrix):"""在对角线上添加自环(self-loops)"""np.fill_diagonal(matrix, 1)return matrix
def normalize(matrix):"""归一化矩阵使其行和为1"""return matrix / np.sum(matrix, axis=1, keepdims=True)def expand(matrix, power):"""对矩阵进行幂次乘法"""return np.linalg.matrix_power(matrix, power)
def inflate(matrix, power):"""对矩阵元素逐元素幂乘"""return normalize(np.power(matrix, power))def converged(matrix1, matrix2, tol=1e-5):"""检查矩阵是否收敛"""return np.all(np.abs(matrix1 - matrix2) < tol)def mcl(graph, expand_factor=2, inflate_factor=2, max_iterations=100, tol=1e-5):"""执行马尔可夫聚类算法"""# 创建初始转移矩阵matrix = add_self_loops(graph)matrix = normalize(matrix)for i in range(max_iterations):print(f"Iteration {i+1}")previous_matrix = matrix.copy()# 扩展matrix = expand(matrix, expand_factor)# 收缩(膨胀)matrix = inflate(matrix, inflate_factor)# 检查收敛if converged(previous_matrix, matrix, tol):breakreturn matrixdef extract_clusters(result_matrix):"""从 result_matrix 中提取聚类。:param result_matrix: 马尔可夫聚类算法得到的稳定转移矩阵:return: 每个节点的聚类标签"""# 获取每一行的最大值索引,这些索引代表聚类标签cluster_assignments = np.argmax(result_matrix, axis=1)return cluster_assignmentsdef group_nodes_by_cluster(cluster_assignments):"""将节点按聚类分组。:param cluster_assignments: 每个节点的聚类标签:return: 每个聚类包含的节点列表"""clusters = defaultdict(list)for node, cluster in enumerate(cluster_assignments):clusters[cluster].append(node)return clusters
# 示例图(邻接矩阵)
graph = np.array([[0, 1, 1, 0, 0, 0],[1, 0, 1, 1, 0, 0],[1, 1, 0, 0, 0, 0],[0, 1, 0, 0, 1, 1],[0, 0, 0, 1, 0, 1],[0, 0, 0, 1, 1, 0]
])# 执行MCL
result_matrix = mcl(graph)# 提取聚类信息
cluster_assignments = extract_clusters(result_matrix)
clusters_grouped = group_nodes_by_cluster(cluster_assignments)print("Cluster Assignments:", cluster_assignments)
print("Grouped Clusters:", clusters_grouped)

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

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

相关文章

章十九、JavaVUE —— 框架、指令、声明周期、Vue-cli、组件路由、Element

目录 一、 框架 ● vue.js 框架 ● 特点 ● Vue 安装 二、 第一个vue程序 ● 创建项目 ​编辑 ● 导入 vue.js ● 创建vue对象&#xff0c;设置属性&#xff0c;使用模版渲染到页面 介绍 — Vue.js (vuejs.org) 三、 vue指令 ● v-text ● v-html ● v-…

LeetCode 671.二叉树第二小的结点

这个题我们可以用数组辅助完成&#xff0c;然后进行排序后&#xff0c;再用再进行取值&#xff0c;这是我的代码块: /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/void Preorde…

uniapp scroll-view 虚拟滚动【适合每条数据高度一致】

基本原理 有一万条数据&#xff0c;我们按10条一页来进行分组&#xff0c;会有1000页页面滚动到第10页的位置的时候&#xff0c;10页之后和10页之前是不用被显示的&#xff0c;可以直接隐藏掉如果是数据删除&#xff0c;页面会不流畅&#xff0c;会卡顿一下&#xff0c;且滚动位…

vue-cli搭建

一、vue-cli是什么&#xff1f; vue-cli 官方提供的一个脚手架&#xff0c;用于快速生成一个 vue 的项目模板&#xff1b;预先定义 好的目录结构及基础代码&#xff0c;就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目&#xff0c;这个骨架项目就是脚手架&#xff0c;…

QT事件处理系统之二:窗口部件的事件拦截,以及事件的传递顺序

1、案例说明 在父窗口中为selfLineEdit窗口安装事件过滤器,这样我们可以在父窗口中首先拦截来自于selfLineEdit本身产生的事件,并且决定该事件最终是否继续传递到selfLineEdit窗口本身。 2、关键代码 selfLineEdit.cpp #include "selfLineEdit.h" #include &l…

ECM和MEMS技术在心肺声学监测中的应用

心肺疾病是全球范围内导致死亡的主要原因。因此&#xff0c;对这些疾病迹象的准确和快速评估对于为患者提供适当的医疗保健至关重要。心血管疾病最重要的迹象之一是心脏周期的异常。大多数呼吸系统疾病则表现为呼吸周期的异常。有多种方法可以监测心脏和肺部的周期。听诊是监测…

pytest测试框架pytest-xdist插件并发执行测试用例

Pytest提供了丰富的插件来扩展其功能&#xff0c;本章介绍下插件pytest-xdist&#xff0c;主要是提供并行测试、分布式测试、循环测试等功能&#xff0c;可以加快测试速度。 pytest-xdist官方显示没有严格的python和pytest版本限制。 pytest-xdist安装 使用pip命令安装: pip…

java内置线程池

线程池常见方法 如何获取线程池对象 缓存线程池 自定义任务对象 public class MyRunnable implements Runnable{private int id;public MyRunnable(int id) {this.id id;}Overridepublic void run() {String name Thread.currentThread().getName();System.out.println(&quo…

DWG转PDF字体研究记录

1.前言 最近需要对PDF中的符合业务规则的文字进行提取&#xff0c;发现有些文字不是文字信息形式存储&#xff0c;而是polyline形式表达&#xff0c;意味着仅仅有形体上的表达&#xff0c;丢失了原本的文字信息。 经过沟通得知&#xff0c;这些PDF是AutoCAD软件导出的&#xf…

Linux 特殊变量 $?

一. 说明 在 Linux 和其他类 Unix 系统中&#xff0c;$? 是一个特殊的变量&#xff0c;用于获取上一个命令的退出状态码。 退出状态码是一个整数值&#xff0c;通常用来表示命令的执行结果。 ⏹退出状态码的含义 0&#xff1a;命令成功执行。0以外的数字&#xff1a;命令执…

STM32 串口通讯

使用STM32的串口通讯&#xff0c;接收串口助手的数据&#xff0c;并且将接收到的数据返回串口&#xff0c;重定义printf功能。 配置引脚信息 由于每次新建工程都需要配置信息&#xff0c;比较麻烦&#xff0c;好在STM32CubeIDE提供了导入.ioc文件的功能&#xff0c;可以帮我们…

华为Mate 70系列,将首发搭载纯血鸿蒙正式版,第四季度登场

ChatGPT狂飙160天&#xff0c;世界已经不是之前的样子。 更多资源欢迎关注 6月22日消息&#xff0c;华为在HDC 2024上已经宣布&#xff0c;HarmonyOS NEXT开启开发者先锋用户Beta测试。 首批覆盖Mate 60系列、Mate X5系列、MatePad Pro 13.2英寸。 根据官方公布的时间表&…

Sublime Text for Mac v4.0 【注册汉化版】代码编辑器(保姆级教程,简单易懂,轻松上手)

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、Sublime Text 安装出现“软件已损坏&#xff0c;无法打开。要移到废纸篓”问题&#xff0c;解决办法&#xff1a; 2、汉化补丁安装3、输入注册码4、查询使用期限 安装完成&#xff01;&#xff01;&#xff01; 效果 一、下…

【牛客深信服总结】

1.反转链表 2.协议 交换机路由器 3.手写代码&#xff0c;一个二叉树&#xff0c;从根节点到叶子结点算一条路径&#xff0c;打印出所有路径。 4.一些数据结构相关的问题&#xff0c;包括栈和队列的应用&#xff0c;链表和数组的区别&#xff0c;最大堆和最小堆&#xff0c;动态…

OpenCV机器学习-人脸识别

一 基本概念 1 计算机视觉与机器学习的关系 计算机视觉是机器学习的一种应用&#xff0c;而且是最有价的应用。 2 人脸识别 哈尔(haar)级联方法 Harr是专门为解决人脸识别而推出的&#xff1b; 在深度学习还不流行时&#xff0c;Harr已可以商用&#xff1b; 深度学习方法&am…

示例:WPF中如何绑定ContextMenu和Menu

一、目的&#xff1a;开发过程中&#xff0c;有些模块的右键ContextMenu菜单是需要动态显示的&#xff0c;既是根据不同条件显示不同的菜单&#xff0c;很多是通过代码去生成ContextMenu的MenuItem&#xff0c;本文介绍通过绑定的方式去加载ContextMenu&#xff0c;Menu菜单栏的…

【操作系统】期末复习,一篇就够了!【全面】

并发是指多个事件在同一时间间隔内发生 并行是指多个事件在同一时刻发生 设计实时操作系统时&#xff0c;首先应该考虑的是&#xff08; &#xff09; B、实时性和可靠性 .单道批处理系统的主要缺点是&#xff08; &#xff09; A、CPU利用率不高 批处理系统的主要缺点是&…

家政预约小程序14权限配置

目录 1 创建用户2 创建角色3 启用登录4 实现退出总结 我们现在小程序端的功能基本开发好了&#xff0c;小程序开发好之后需要给运营人员提供管理后台&#xff0c;要分配账号、配置权限&#xff0c;我们本篇就介绍一下权限如何分配。 1 创建用户 在微搭中&#xff0c;用户分为内…

简单了解ESD模型与TLP曲线

上文讲了ESD和EOS的区别&#xff0c;说实话远不止那些。今日再稍加深入的介绍ESD。 一 ESD原理 ESD-Electro Static Discharge静电放电&#xff0c;具有不同静电电位的物体互相靠近或者直接接触引起的电荷转移。正常情况下&#xff0c;物体内部的正负电荷是相等的&#xff0c…

RMDA通信1:通信过程和优势,以太网socket为何用户空间拷贝到内核空间

视频分享&#xff1a; 1.1 RDMA基本原理和优势&#xff0c;以太网socket通信为什么要用户空间拷贝到内核空间_哔哩哔哩_bilibili 一、以太网socket通信 1.1 以太网socket通信过程 1、发送端发起一次通信操作&#xff0c;数据由用户空间拷贝到内核空间。拷贝由CPU完成&#x…