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

news2024/12/27 9:34:35

🎯要点

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

class alg:
    def __init__(self, similarity_matrices, num_clusters, random_seed=0):
        
        self.num_clusters = num_clusters
        self.random_seed = random_seed
        self.num_nodes = None
        self.similarity_matrices = []
        self.metapath_index = {}
        self.alpha = None
        self.beta = None
        self.gamma = None

        for 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] = index

        self.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_dict
    
    
    def 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 = alpha
        self.beta = beta
        self.gamma = gamma
        lambdas = np.ones(self.num_metapaths)/self.num_metapaths
        W = np.tensordot(lambdas, self.similarity_matrices, axes=[[0], [0]])
        S = W

        for 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, lambdas

    def 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 S

    def 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 value
    
        def constraints():
            def sum_one(lambdas):
                return np.sum(lambdas) - 1

            return  {
                '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:P
    A0 = 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:NITER
    dist = L2_distance_1(F',F');
    S = zeros(n);
    for i=1:n
        a0 = 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 > zr
        gamma = 2*gamma;
        lambda =  optimizeLambda(mp_matrix, S, beta); % optimize lambda
    elseif fn2 < zr
        gamma = gamma/2;  F = F_old; lambda = lambda_old;
    else
        break;
    end;
    
    A0 = zeros(n,n);
    for p = 1:P
        A0 = 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 ~= c
    sprintf('Can not find the correct cluster number: %d', c)
end;

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

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

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

相关文章

django电商用户消费数据分析系统-计算机毕业设计源码20891

摘 要 随着电子商务的快速发展&#xff0c;电商平台积累了大量的用户消费数据。为了更好地理解用户行为、优化商品结构和提升用户体验&#xff0c;本文设计并实现了一个基于Django框架的电商用户消费数据分析系统。 该系统包含后台首页、系统用户&#xff08;管理员&#xf…

探索 GPT-4o mini:成本效益与创新的双重驱动

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

elk日志索引被锁blocks,日志无法写入

现象&#xff1a; kafka积压&#xff0c;logstash无法将日志写入到es logstash报错&#xff1a; [logstash.outputs.elasticsearch][main][] Retrying failed action {:status>403 :error>{“type”>“cluster_block_exception”, “reason”>“index [] blocked …

“微软蓝屏”全球宕机,敲响基础软件自主可控警钟

上周五&#xff0c;“微软蓝屏”“感谢微软 喜提假期”等词条冲上热搜&#xff0c;全球百万打工人受此影响&#xff0c;共同见证这一历史性事件。据微软方面发布消息称&#xff0c;旗下Microsoft 365系列服务出现访问中断。随后在全球范围内&#xff0c;包括企业、政府、个人在…

Spring Boot集成starrocks快速入门Demo

1.什么是starrocks&#xff1f; StarRocks 是新一代极速全场景 MPP (Massively Parallel Processing) 数据库。StarRocks 的愿景是能够让用户的数据分析变得更加简单和敏捷。用户无需经过复杂的预处理&#xff0c;就可以用 StarRocks 来支持多种数据分析场景的极速分析。 Star…

矩阵分析——线性积分方程组的矩阵解法研究

矩阵分析——线性积分方程组的矩阵解法研究 前言线性积分方程组的矩阵解法研究 前言 “矩阵分析”是一门选修课&#xff0c;当时选这门课程的原因是想着图像处理就涉及到很多矩阵运算。但没想到的是这门课程吧虽然是选修&#xff0c;最后的结课要求是让我们写一篇“论文”&…

第19讲EtherNet/IP网络基础

EtherNet/IP网络知识 一、EtherNet/IP概述 二、EtherNet/IP网络的定位 1、最上层-信息层:主要进行上位机网络信号交互或者控制层信号的传递。 比较常见的话是工控机或者说PLC,就像大脑对信息进行发送的这样一个控制。 EtherNet/IP网络属于最高层——信息层,主要负责信号的…

vue3中父子组件通讯

在子组件HelloWorld.vue中&#xff1a; <template><div class"hello">111111</div></template><script lang"ts"> import { Options, Vue } from vue-class-component;Options({props: {msg: String} }) export default cl…

多路复用IO、TCP并发模型

时分复用 CPU单核在同一时刻只能做一件事情&#xff0c;一种解决办法是对CPU进行时分复用(多个事件流将CPU切割成多个时间片&#xff0c;不同事件流的时间片交替进行)。在计算机系统中&#xff0c;我们用线程或者进程来表示一条执行流&#xff0c;通过不同的线程或进程在操作系…

群辉NAS利用AList搭建混合云盘①套件安装及百度云盘挂载

目录 一、群辉NAS准备 二、远程访问 三、安装套件 四、挂载公有云盘 1、挂载百度网盘 ……(未完待续) 公有云盘是由云服务提供商运营,向广大用户提供数据存储和文件共享服务的一种在线存储解决方案。 其优点包括: 1. 方便易用:用户可以通过互联网随时随地访问自己存…

Java企业微信服务商代开发获取AccessToken示例

这里主要针对的是企业微信服务商代开发模式 文档地址 可以看到里面大致有三种token&#xff0c;一个是服务商的token&#xff0c;一个是企业授权token&#xff0c;还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret &#xff0c;这个可…

等保定级指南(PPT原件)

新版网络安全等级保护定级指南网络安全等级保护工作的作用对象&#xff0c;主要包括基础信息网络、工业控制系统、云计算平台、物联网、使用移动互联技术的网络和大数据等。 软件全套精华资料包清单部分文件列表&#xff1a; 工作安排任务书&#xff0c;可行性分析报告&#xf…

前端自动化测试(一):揭秘自动化测试秘诀

目录 [TOC](目录)前言自动化测试 VS 手动测试测试分类何为单元测试单元测试的优缺点优点缺点 测试案例测试代码 测试函数的封装实现 expect 方法实现 test 函数结语 正文开始 &#xff0c; 如果觉得文章对您有帮助&#xff0c;请帮我三连订阅&#xff0c;谢谢&#x1f496;&…

7月投稿警惕!6本On Hold期刊被数据库剔除!

本周投稿推荐 SCI&EI • 1区计算机类&#xff0c;3.5-4.0&#xff08;1个月录用&#xff09; • CCF推荐&#xff0c;1区-Top&#xff08;3天初审&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; 知网&#xff08;CNKI&#xff09;、谷歌学术 •…

nginx的配置和使用

一、nginx支持win和linux版本的下载&#xff0c;选择合适的版本进行安装 二、配置文件注解 重点的几个参数进行注释&#xff1a; 1、listen 要监听的服务的端口&#xff0c;符合这个端口的才会被监听 server_name要监听的服务地址&#xff0c;可能是ip,也可能是域名&#xf…

流量书单,互联网营销必读

《流量池》杨飞 《增长黑客》肖恩埃利斯(Sean Ellis)、摩根布朗(Morgan Brown) 《增长五线》王赛 《参与感》黎万强 《场景革命》吴声 《网络营销实战密码》昝辉 《网络营销推广实战宝典》江礼坤 《超级IP&#xff0c;互联网新物种方法论》吴声 《周鸿祎自述&#xff0…

Golden Software Surfer v25 解锁版下载与安装教程 (三维绘图软件)

前言 Golden Software Surfer 是一款三维绘图软件&#xff0c;具备强大的插值功能和绘制图件能力&#xff0c;可用来处理XYZ数据&#xff0c;轻松绘制专业三维图。该软件有着很直观的用户界面&#xff0c;尽管不支持中文&#xff0c;但是很用户在熟悉流程以后依然能够轻松学会…

《计算机网络》(学习笔记)

目录 一、计算机网络体系结构 1.1 计算机网络概述 1.1.1 计算机网络的概念 1.1.2 计算机网络的组成 1.1.3 计算机网络的功能 1.1.4 电流交换、报文交换和分组交换 1.1.5 计算机网络的分类 1.1.6 计算机网络的性能指标 1.2 计算机网络体系结构与参考模型 1.2.1 计算机…

SpringCloud Nacos的配置与使用

Spring Cloud Nacos的配置与使用 文章目录 Spring Cloud Nacos的配置与使用1. 简单介绍2. 环境搭建3. 服务注册/服务发现4. Nacos 负载均衡4.1 服务下线4.2 权重配置4.3 同集群优先访问 5. Nacos 健康检查5.1 两种健康检查机制5.2 服务实例类型 6.Nacos 环境隔离6.1 创建namesp…

QT开发笔记:常用控件

常用控件&#xff1a; 站在巨人的肩膀上&#xff0c;Qt中已经提供了大量的内置控件&#xff08;按钮、文本框、单选按钮、复选按钮、下拉框&#xff09; 可直接学习其特性使用方法使用。 控件 Widget 界面上的各种元素&#xff0c;各种部分的统称。 HTML 包含很多标签&#…