Python鲁汶意外莱顿复杂图拓扑分解算法

🎯要点

🎯算法池化和最佳分区搜索:🖊网格搜索 | 🖊发现算法池 | 🖊返回指定图的最佳划分 | 🖊返回指定图的最佳分区 | 🎯适应度和聚类比较功能:🖊图的划分 | 🖊节点度 | 🖊给定算法检测到社群总数 | 🖊图密度 | 🖊社群顶点的度数之和 | 🖊解之间的预期一致 | 🖊联合熵 | 🖊平均内部度、所有可能的节点对的平均路径长度 | 🖊节点指向社群外的边平均比例 | 🖊现有边距离社群比例 | 社群内部密度 | 🖊切割比率的标准化变体 | 🖊边超几何分布随机出现的统计方法 | 🖊兰德指数预测聚类之间的相似性度量 | 分区之间最佳匹配的平均 F1 分数 | 归一化互信息

📜图算法用例

📜Python群体趋向性潜关联有向无向多图层算法

📜Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

📜MATLAB和Python零模型社会生物生成式结构化图

📜Python莫兰生死抑制放大进化图

📜Python种群邻接矩阵彗星风筝进化图算法

📜Python和C++骨髓细胞进化解析数学模型

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python和MATLAB异构网络算法

异构信息网络是一种网络结构,其对象可以假设不同的对象类型,对象之间的链接可以表示对象之间的不同类型的关系。此网无处不在,用于对许多不同类型的现实世界数据进行建模。例如,社交软件开放图将用户、帖子、事件和页面建模为四种不同类型的对象。用户可以发布帖子、参加活动或喜欢页面,这说明了将用户对象与帖子相关联的三种不同类型的连接。

此网络数据分析一直是一个活跃的研究领域。作为机器学习和数据挖掘的一项基本任务,聚类分析在此网络中找到了有趣的应用。例如,根据社交软件用户的兴趣对其进行聚类,可以实现有效的目标营销和病毒式营销。

谱聚类将聚类转化为图分割问题,该问题优化衡量分割质量的某个标准,例如正则化切割。通常,给定一组对象 X = { x 1 , x 2 , … , x n } X=\left\{x_1, x_2, \ldots, x_n\right\} X={x1,x2,,xn},标准谱聚类方法首先构造一个无向图 G = ( X , S ) G=(X, S) G=(X,S),其中 X X X 表示顶点集, S S S 是一个矩阵, S i j S_{i j} Sij 度量对象 x i x_i xi x j x_j xj 之间的相似性。然后,计算拉普拉斯矩阵 L S L_S LS,在此基础上执行特征分解以获得与 k k k 个最小特征值相对应的 k k k 个特征向量,其中 k k k 是所需的聚类数量。这些特征向量被用作对象的新特征空间。最后,应用后处理步骤,例如 k k k 均值和光谱旋转将对象划分为 k k k 个聚类。

异构信息网络:

B1
B2
B3
R1
R2
R3
R4
U1
U2
K1
K2

T = { T 1 , … , T m } T =\left\{T_1, \ldots, T_m\right\} T={T1,,Tm} 为一组 m m m 对象类型。对于每种类型 T i T_i Ti,令 X i X _i Xi 为类型 T i T_i Ti 的对象集。 异构信息网络是一个图 G = ( V , E ) G =( V , E ) G=(V,E),其中 V = ⋃ i = 1 m X i V =\bigcup_{i=1}^m X _i V=i=1mXi 是一组节点, E E E 是一组链接,每个链接代表一个二进制 V V V 中两个对象之间的关系。

它的网络模式:

在这里插入图片描述

网络模式是异构信息网络 G = ( V , E ) G =( V , E ) G=(V,E) 的元模板。令 (1) ϕ : V → T \phi: V \rightarrow T ϕ:VT 为对象类型映射,将 V V V 中的对象映射为其类型,(2) ψ : E → R \psi: E \rightarrow R ψ:ER 为链接关系映射将 E E E 中的链接映射到一组关系 R R R 中的关系。异构信息网络 G G G 的网络模式用 T G = ( T , R ) T_{ G }=( T , R ) TG=(T,R) 表示,显示了不同类型的对象如何通过 R R R 中的关系进行关联。使用示意图来表示 T G T_{G} TG,其中 T T T R R R分别为节点集和边集。具体来说,示意图中存在一条边 ( T i , T j ) \left(T_i, T_j\right) (Ti,Tj) ,前提是 R R R 中存在将 T i T_i Ti 类型的对象与 T j T_j Tj 类型的对象相关联的关系。

算法

谱聚类的关键步骤是构建高质量的相似度矩阵 S S S。对于异构信息网络,元路径已被有效地用于测量对象相似性。例如,给定元路径 P P P,PathSim测量两个对象 x u x_u xu x v x_v xv 之间的相似度。 P P P 通过计算连接两个对象的 P P P 的路径实例的数量。具体来说,我们有,
S P ( x u , x v ) = 2 × ∣ { p x u ⇝ x v : p x u ⇝ x v ⊢ P } ∣ ∣ { p x u ⇝ x u : p x u → x u ⊢ P } ∣ + ∣ { p x v ⇝ x v : p x v ⇝ x v ⊢ P } ∣ . S_{ P }\left(x_u, x_v\right)=\frac{2 \times\left|\left\{p_{x_u \rightsquigarrow x_v}: p_{x_u \rightsquigarrow x_v} \vdash P \right\}\right|}{\left|\left\{p_{x_u \rightsquigarrow x_u}: p_{x_u \rightarrow x_u} \vdash P \right\}\right|+\left|\left\{p_{x_v \rightsquigarrow x_v}: p_{x_v \rightsquigarrow x_v} \vdash P \right\}\right|} . SP(xu,xv)={pxuxu:pxuxuP}+{pxvxv:pxvxvP}2×{pxuxv:pxuxvP}.
给定一组元路径 P S P S PS,每个元路径 P i ∈ P S P _i \in P S PiPS 根据上式导出相似性矩阵 S P i S_{ P _i} SPi。我们构造一个矩阵 W W W 作为以下各项的加权和:矩阵:
W = ∑ i = 1 ∣ P S ∣ λ i S P i . W=\sum_{i=1}^{| P S |} \lambda_i S_{ P _i} . W=i=1PSλiSPi.

优化

由于约束 rank ⁡ ( L S ) = n − k \operatorname{rank}\left(L_S\right)=n-k rank(LS)=nk,优化问题是非凸的。因此很难直接优化问题。我们将原问题转化为:
min ⁡ ∥ S − ∑ i = 1 ∣ P S ∣ λ i S P i ∥ F 2 + α ∥ S ∥ F 2 + β ∥ λ ∥ 2 2 + 2 γ ∑ i = 1 k σ i ( L S ) , s.t.  ∑ j = 1 n S i j = 1 , S i j ≥ 0 , ∑ i = 1 ∣ P S ∣ λ i = 1 , λ i ≥ 0 , \begin{aligned} & \min \left\|S-\sum_{i=1}^{| P S |} \lambda_i S_{ P _i}\right\|_F^2+\alpha\|S\|_F^2+\beta\| \lambda \|_2^2+2 \gamma \sum_{i=1}^k \sigma_i\left(L_S\right), \\ & \text { s.t. } \sum_{j=1}^n S_{i j}=1, S_{i j} \geq 0, \sum_{i=1}^{| P S |} \lambda_i=1, \lambda_i \geq 0, \end{aligned} min Si=1PSλiSPi F2+αSF2+βλ22+2γi=1kσi(LS), s.t. j=1nSij=1,Sij0,i=1PSλi=1,λi0,
其中 σ i ( L S ) \sigma_i\left(L_S\right) σi(LS)表示 L S L_S LS的第 i i i个最小特征值。由于 L S L_S LS是半定的, σ i ( L S ) ≥ 0 \sigma_i\left(L_S\right)\geq 0 σi(LS)0。通过设置较大的 γ \gamma γ 值,我们将 ∑ i = 1 k σ i ( L S ) \sum_{i=1}^k \sigma_i\left(L_S\right) i=1kσi(LS) 强制为零,以保证 rank ⁡ ( L S ) ) = n − k \operatorname{rank}\left(L_S\right) )=n-k rank(LS))=nk。根据凯-范定理,我们有,
∑ i = 1 k σ i ( L S ) = min ⁡ F ∈ R n × k , F T F = I tr ⁡ ( F T L S F ) \sum_{i=1}^k \sigma_i\left(L_S\right)=\min _{F \in R ^{n \times k}, F^T F=I} \operatorname{tr}\left(F^T L_S F\right) i=1kσi(LS)=FRn×k,FTF=Imintr(FTLSF)
其中 tr ⁡ ( ⋅ ) \operatorname{tr}(\cdot) tr() 是跟踪运算符。因此优化问题等价于:
min ⁡ ∥ S − ∑ i = 1 ∣ P S ∣ λ i S P i ∥ F 2 + α ∥ S ∥ F 2 + β ∥ λ ∥ 2 2 + 2 γ tr ⁡ ( F T L S F ) , s.t.  ∑ j = 1 n S i j = 1 , S i j ≥ 0 , ∑ i = 1 ∣ P S ∣ λ i = 1 , λ i ≥ 0 , F ∈ R n × k , F T F = I , \begin{aligned} & \min \left\|S-\sum_{i=1}^{| P S |} \lambda_i S_{ P _i}\right\|_F^2+\alpha\|S\|_F^2+\beta\| \lambda \|_2^2+2 \gamma \operatorname{tr}\left(F^T L_S F\right), \\ & \text { s.t. } \sum_{j=1}^n S_{i j}=1, S_{i j} \geq 0, \sum_{i=1}^{| P S |} \lambda_i=1, \lambda_i \geq 0, F \in R ^{n \times k}, F^T F=I, \end{aligned} min Si=1PSλiSPi F2+αSF2+βλ22+2γtr(FTLSF), s.t. j=1nSij=1,Sij0,i=1PSλi=1,λi0,FRn×k,FTF=I,
Python伪代码实现算法:

from sklearn.cluster import KMeans
import numpy as np
from scipy.optimize import minimizeclass alg:def __init__(self, similarity_matrices, num_clusters, random_seed=0):self.num_clusters = num_clustersself.random_seed = random_seedself.num_nodes = Noneself.similarity_matrices = []self.metapath_index = {}self.alpha = Noneself.beta = Noneself.gamma = Nonefor index, (metapath, matrix) in enumerate(similarity_matrices.items()):if self.num_nodes is None:self.num_nodes = matrix.shape[0]if matrix.shape != (self.num_nodes, self.num_nodes):raise ValueError('Invalid shape of similarity matrix.')row_normalized_matrix = matrix/matrix.sum(axis=1, keepdims=True)self.similarity_matrices.append(row_normalized_matrix)self.metapath_index[metapath] = indexself.similarity_matrices = np.array(self.similarity_matrices)self.num_metapaths = len(similarity_matrices)def run(self, verbose=False, cluster_using='similarity'):if cluster_using not in ['similarity', 'laplacian']:raise ValueError('Invalid option for parameter \'cluster_using\'.')similarity_matrix, metapath_weights = self.optimize(verbose=verbose)if cluster_using == 'similarity':labels = self.cluster(similarity_matrix)elif cluster_using == 'laplacian':laplacian = normalized_laplacian(similarity_matrix)labels = self.cluster(eigenvectors(laplacian, num=self.num_clusters))metapath_weights_dict = {metapath: metapath_weights[index] for metapath, index in self.metapath_index.items()}return labels, similarity_matrix, metapath_weights_dictdef cluster(self, feature_matrix):return KMeans(self.num_clusters, n_init=10, random_state=self.random_seed).fit_predict(feature_matrix)def optimize(self, num_iterations=20, alpha=0.5, beta=10, gamma=0.01, verbose=False):self.alpha = alphaself.beta = betaself.gamma = gammalambdas = np.ones(self.num_metapaths)/self.num_metapathsW = np.tensordot(lambdas, self.similarity_matrices, axes=[[0], [0]])S = Wfor iteration in range(num_iterations):if verbose:loss = np.trace(np.matmul((S - W).T, (S - W))) loss += self.alpha * np.trace(np.matmul(S.T, S))loss += self.beta * np.dot(lambdas, lambdas)loss += self.gamma * np.sum(eigenvalues(normalized_laplacian(S), num=self.num_clusters))print('Iteration %d: Loss = %0.3f' % (iteration, loss))F = self.optimize_F(S)S = self.optimize_S(W, F)lambdas = self.optimize_lambdas(S, lambdas)W = np.tensordot(lambdas, self.similarity_matrices, axes=[[0], [0]])return S, lambdasdef optimize_F(self, S):LS = normalized_laplacian(S)    return eigenvectors(LS, num=self.num_clusters)def optimize_S(self, W, F):Q = distance_matrix(F, metric='euclidean')P = (2*W - self.gamma*Q)/(2 + 2*self.alpha)S = np.zeros((self.num_nodes, self.num_nodes)) for index in range(S.shape[0]):S[index] = best_simplex_projection(P[index])return Sdef optimize_lambdas(self, S, init_lambdas):def objective(lambdas):W = np.tensordot(lambdas, self.similarity_matrices, axes=[[0], [0]])value = np.trace(np.matmul(W.T, W))value -= 2 * np.trace(np.matmul(S.T, W))value += self.beta * np.dot(lambdas, lambdas)return valuedef constraints():def sum_one(lambdas):return np.sum(lambdas) - 1return  {'type': 'eq','fun': sum_one,}def bounds(init_lambdas):return [(0, 1) for init_lambda in init_lambdas]return minimize(objective, init_lambdas, method='SLSQP', constraints=constraints(), bounds=bounds(init_lambdas)).x

MATLAB伪代码算法实现:

function [y, S, evs, A] = alg(mp_matrix, c, true_cluster)NITER = 20;
zr = 10e-11;alpha = 0.5; 
beta = 10; 
gamma = 0.01; P = size(mp_matrix,1);
n = size(mp_matrix,2);
lambda = ones(P,1)./P;eps = 1e-10;
A0 = zeros(n,n);
for p = 1:PA0 = A0 + lambda(p) * squeeze(mp_matrix(p,:,:));
end;A0 = A0-diag(diag(A0));
A10 = (A0+A0')/2;
D10 = diag(sum(A10));
L0 = D10 - A10;[F0, ~, evs]=eig1(L0, n, 0);
F = F0(:,1:c);
[pred] = postprocess(F,c,true_cluster);for iter = 1:NITERdist = L2_distance_1(F',F');S = zeros(n);for i=1:na0 = A0(i,:);idxa0 = 1:n;ai = a0(idxa0);di = dist(i,idxa0);ad = (ai-0.5*gamma*di)/(1+alpha); S(i,idxa0) = EProjSimplex_new(ad);end;A = S;A = (A+A')/2;D = diag(sum(A));L = D-A;F_old = F;[F, ~, ev]=eig1(L, c, 0);[pred] = postprocess(F,c,true_cluster);evs(:,iter+1) = ev;fn1 = sum(ev(1:c));fn2 = sum(ev(1:c+1));lambda_old = lambda;if fn1 > zrgamma = 2*gamma;lambda =  optimizeLambda(mp_matrix, S, beta); % optimize lambdaelseif fn2 < zrgamma = gamma/2;  F = F_old; lambda = lambda_old;elsebreak;end;A0 = zeros(n,n);for p = 1:PA0 = A0 + lambda(p) * squeeze(mp_matrix(p,:,:));end;end;[clusternum, y]=graphconncomp(sparse(A)); y = y';
nmi = calculateNMI(y,true_cluster);
purity = eval_acc_purity(true_cluster,y);
ri = eval_rand(true_cluster,y);fprintf('Final NMI is %f\n',nmi);
fprintf('Final purity is %f\n',purity);
fprintf('Final rand is %f\n',ri);if clusternum ~= csprintf('Can not find the correct cluster number: %d', c)
end;

👉参阅、更新:计算思维 | 亚图跨际

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

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

相关文章

Python3网络爬虫开发实战(1)爬虫基础

一、URL 基础 URL也就是网络资源地址&#xff0c;其满足如下格式规范 scheme://[username:password]hostname[:port][/path][;parameters][?query][#fragment] scheme&#xff1a;协议&#xff0c;常用的协议有 Http&#xff0c;https&#xff0c;ftp等等&#xff1b;usern…

构建高效园区导览系统:基于3DGIS与物联网技术的实现方案

园区导航的挑战与机遇 在现代化的大型园区中&#xff0c;随着面积的不断扩张和布局的日益复杂&#xff0c;传统的纸质地图已难以满足日益增长的导航需求。每栋楼、每层楼都有着不同的办公室&#xff0c;不同的业务。这种低效的寻路过程不仅影响了客户的来访体验&#xff0c;也…

Flink时间和窗口

目录 时间语义 水位线&#xff08;Watermarks&#xff09; 并行流中的水位线 窗口 滚动窗口—Tumbling Windows 滑动窗口—Sliding Windows 会话窗口—Session Windows 全局窗口—Global Windows 例子 时间语义 如图所示&#xff0c;由事件生成器&#xff08;Event Pr…

LeetCode - #103 二叉树的锯齿形层序遍历

文章目录 前言1. 描述2. 示例3. 答案关于我们 前言 我们社区陆续会将顾毅&#xff08;Netflix 增长黑客&#xff0c;《iOS 面试之道》作者&#xff0c;ACE 职业健身教练。&#xff09;的 Swift 算法题题解整理为文字版以方便大家学习与阅读。 LeetCode 算法到目前我们已经更新…

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid&#xff0c;使用中发现唯一建冲突&#xff0c;生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…

饥荒dst联机服务器搭建基于Ubuntu

目录 一、服务器配置选择 二、项目 1、下载到服务器 2、解压 3、环境 4、启动面板 一、服务器配置选择 首先服务器配置需要2核心4G&#xff0c;4G内存森林加洞穴大概就占75% 之后进行服务器端口的开放&#xff1a; tcp:8082 tcp:8080 UDP:10888 UDP:10998 UDP:10999 共…

前端:Vue学习 - 购物车项目

前端&#xff1a;Vue学习 - 购物车项目 1. json-server&#xff0c;生成后端接口2. 购物车项目 - 实现效果3. 参考代码 - Vuex 1. json-server&#xff0c;生成后端接口 全局安装json-server&#xff0c;json-server官网为&#xff1a;json-server npm install json-server -…

基于STM32瑞士军刀--【FreeRTOS开发】学习笔记(一)|| RISC / 底层代码执行步骤 / 汇编指令

本篇文章基于韦东山老师讲课笔记和自己理解编写。 RISC ARM芯片属于精简指令集计算机(RISC&#xff1a;Reduced Instruction Set Computing)&#xff0c;它所用的指令比较简单&#xff0c;有如下特点&#xff1a; ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 …

CasaOS设备使用Docker安装SyncThing文件同步神器并实现远程管理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

加密软件有什么用?五款电脑文件加密软件推荐

加密软件对于个人和企业来说至关重要&#xff0c;尤其是在2024年这样一个高度数字化的时代&#xff0c;数据安全变得尤为重要。 数据保护&#xff1a;加密软件可以保护敏感信息不被未经授权的人访问。这包括个人数据、财务记录、健康信息、企业机密等。 防泄漏&#xff1a;防…

Python 全栈体系【三阶】(三)

第一章 Django 七、静态文件 1. 概述 静态文件是指在WEB应用中的图像文件、CSS文件、Javascript文件。 2. 静态文件的配置 settings.py中关于静态文件的配置如下&#xff1a; STATICFILES_DIRS [BASE_DIR , static, ]STATIC_URL /static/其中&#xff1a; STATICFILES…

java面试题,有synchronized锁,threadlocal、数据可以设置默认值、把redis中的json转为对象

有面试题&#xff0c;有synchronized锁&#xff0c;threadlocal 一、面试题小记二、加锁synchronized1. 先看代码2. synchronized 讲解2.1. 同步代码块2.2. 同步方法2.3. 锁的选择和影响2.4. 注意事项2.5 锁的操作&#xff0c;手动释放锁&#xff0c;显式地获取锁&#xff08;属…

【llama3.1】ollama的使用--本地部署使用llama3.1模型

快速入门 安装完成ollama后,在命令行窗口输入 ollama run llama3 上图表示 Ollama 正在下载 llama3 任务所需的资源文件,并显示了当前的下载进度、速度和预计剩余时间。这是 Ollama 在准备运行 llama3 任务之前所需的步骤。 上面的步骤完成后,就可以在本地进行聊天了,…

Golang | Leetcode Golang题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; func missingNumber(nums []int) int {n : len(nums)total : n * (n 1) / 2arrSum : 0for _, num : range nums {arrSum num}return total - arrSum }

Xlua原理 二

一已经介绍了初步的lua与C#通信的原理&#xff0c;和xlua的LuaEnv的初始化内容。 这边介绍下Wrap文件。 一.Wrap介绍 导入xlua后可以看到会多出上图菜单。 点击后生成一堆wrap文件&#xff0c;这些文件是lua调用C#时进行映射查找用的中间代码。这样就不需要去反射调用节约性…

Vue中的diff算法

文章目录 diff算法是什么比较方式源码分析patchpatchVnodeupdateChildren小结Vue3中diff算法优化diff算法是什么 diff算法是一种通过同层的树节点进行比较的高效算法 其有两个特点: 比较只会在同层级进行,不会跨层级比较在dff比较的过程中,循环从两边向中间比较(首位交叉…

Linux系统下安装MySQL

前言&#xff1a; 本篇教程是使用Centos8来进行安装部署&#xff0c;如果使用的Linux系统发行版不同安装部署过程中可能会有差异&#xff0c;相同环境下可以跟着操作流程进行部署。本篇文章的主要目的是为了学习分享使用如有疑问欢迎提出并共同讨论。 1、安装前的准备工作 移除…

sql的执行流程

执行过程分成两层&#xff0c;一层是server层&#xff0c;主要进行连接服务&#xff0c;和分析语句&#xff0c;执行sql 具体流程是 首先与用户通过连接器建立连接&#xff0c;然后将sql查询语句在查询缓存中查找&#xff0c;如果查找处理过相同的语句将&#xff0c;直接返回数…

用uniapp 及socket.io做一个简单聊天app 2

在这里只有群聊&#xff0c;二个好友聊天&#xff0c;可以认为是建了一个二人的群聊。 const express require(express); const http require(http); const socketIo require(socket.io); const cors require(cors); // 引入 cors 中间件const app express(); const serv…

Nginx 如何处理请求的流量削峰?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 Nginx 如何处理请求的流量削峰&#xff1f;一、什么是流量削峰二、Nginx 实现流量削峰的基本原理&#xff08;一&#xff09;反向代理与负载均衡&#xff08;二&…