基于改进的k-shell方法识别复杂网络中有影响力的重要节点

基于改进的k-shell方法识别复杂网络中有影响力的重要节点

K-Shell是一种有效的识别有影响的分散体的方法。 然而,K-Shell忽略了关于节点拓扑位置的信息。 本文提出了一种改进的算法基于K-Shell和节点信息熵IKS,从较高的壳层和较低的壳层中识别有影响的扩散器。
github代码地址:https://github.com/wozhendeluanle/IKS(个人实现,不喜勿喷)

1、背景知识

G ( V , E ) G(V,E) G(V,E)是一个无权无向图, N = ∣ V ∣ , M = ∣ E ∣ N=|V|,M=|E| N=V,M=E分别表示节点和边的数目。 A = ( a i j ) n ∗ n A=(a_{ij})_{n*n} A=(aij)nn为图G的邻接矩阵, Γ ( v ) \Gamma(v) Γ(v)表示节点v的邻居集合。

1.1 度中心性

在这里插入图片描述

1.2 K-Shell

K-Shell分解算法通过将节点分解到不同的shell中来量化节点的重要性。 该算法首先去除1度节点,迭代进行,直到网络中没有1度节点。所有已删除的节点和边缘都创建1壳。 反复执行这个过程,我们可以得到2壳,3壳…等等。 最后,每个节点将属于一个特定的壳,壳中所有节点具有相同的核心值。因此,同一外壳内的节点被认为具有相同的重要性和相同的扩展能力。 它忽略了删除的节点和边缘的所有信息,因此,得到的结果不适合于某些现实世界的网络。

1.3 混合度分解法

混合度分解法的提出是为了提高K_Shell的精确度。假设 k m ( v ) k_m(v) km(v)表示节点的混合度, 值 k m k_m km越大,节点对网络的影响越大。节点v的混合度定义为:
在这里插入图片描述
其中 λ ∈ [ 0 , 1 ] \lambda \in[0,1] λ[0,1]是一个可调节参数。 k r , k e k_r,k_e kr,ke分别是剩余度和耗尽度。当 λ = 1 \lambda=1 λ=1时该方法与MDD方法一致, λ = 0 \lambda=0 λ=0时与度一致。 网络继续按照新的混合值进行分层,但很难找到最优的参数λ获得更好的结果。
在这里插入图片描述

1.4 改进的k-shell指标

改进的k-shell指标通过考虑从目标节点到网络核心的最短距离,该网络核心被定义为具有最高k-shell值的节点集。拥有相同k-shell数量的节点影响力被定义为:
在这里插入图片描述
其中, k s m a x ks_{max} ksmax是最大的k-shell, S c S_c Sc是拥有最大k-shell因子 k s m a x ks_{max} ksmax的节点集合, d ( v , ω ) d(v,\omega) d(v,ω)是节点 v 和 节 点 ω ∈ S c v和节点\omega \in S_c vωSc的最短距离。 值θ越大,节点离网络核心越远,说明节点的重要性越小。 虽然这种方法能够区分shell的节点,但计算量大。

1.5 NC(Neighborhood coreness)中心性

通过求和所有邻居的k-shell值来估计网络中节点的扩展影响。 一个高NC值表明传播者与位于网络的核心邻居有更多的连接。 节点v的邻域核心度定义为:
在这里插入图片描述
其中 N ( v ) N(v) N(v)是节点 ω \omega ω的邻居集合, k s ( ω ) ks(\omega) ks(ω)是其邻居节点 ω \omega ω的k-shell指数。节点v扩展的NC值 C n c + C_{nc+} Cnc+计算方法如下:
在这里插入图片描述

1.6 加权的邻居中心性

加权的邻居中心性考虑了节点的中心性及其邻居的中心性来生成有影响力的排名列表。
在这里插入图片描述
其中 ψ i \psi_i ψi是一个中心性方法,这里使用k-shell方法。 Γ ( i ) \Gamma(i) Γ(i)是节点i的邻居集合, ω i j 是 边 e i j \omega_{ij}是边e_{ij} ωijeij的扩散重要性, ⟨ ω ⟩ \langle \omega\rangle ω 是所有边缘的平均扩散重要性. 这个方程意味着权重邻域中心性编码节点及其邻居的中心性,且决于链路的扩散重要性。 此外,邻居效应随着其与原点节点之间链路扩散重要性的增加而增大。

1.7 混合核,度和熵(MCDE)

在这里插入图片描述
其中 p i p_i pi是节点v的朋友出现在第i个核的概率:
在这里插入图片描述
即:
在这里插入图片描述
其中 k s ( v ) ks(v) ks(v)是节点v的核数目, k ( v ) k(v) k(v)是节点v链路的数目,
Entropy(V)用于计算节点v朋友在不同核中的分布。

2 提出的方法:改进的k-shell算法(IKS)

假设节点 v i v_i vi度为 k i k_i ki,节点重要性为 I i = k i ∑ j = 1 N k j I_i=\frac{k_i}{\sum_{j=1}^Nk_j} Ii=j=1Nkjki,其中N是图G中的节点数目,节点的信息熵可定义为:
在这里插入图片描述
信息熵越大,则表明该节点越重要。 节点信息熵是网络的无序度量。 如果网络随机连接,则每个节点的节点信息熵相似。 相反,如果网络是无标度的,则有少量的节点是高连接的,大量的节点是低连接的。 每个节点都有不同的节点重要性,节点在 形成熵分布不均匀,因此更重要的节点将具有更大的节点信息熵。 使用以下过程进行IKS方法:
步骤1:根据k壳分解算法将网络分解为k壳;
步骤2:计算节点信息熵EI;
步骤3:排序 每个shell中的节点根据节点信息熵从大到小;
步骤4:对于k-shell值最高的节点,选择节点信息熵最大的节点。 接着选择k-shell值仅次于最高k-shell但是信息熵最大的节点。循环这个过程,直至只剩下1-shell中的节点。到目前为止,第一次迭代完成;
步骤5:重复步骤四直到所有节点都被选择。为了忽视所有选中节点的shell值,当节点的信息熵等于shell值的时候随机选择节点。
这种方法可以解决原来k壳法的缺点。 它根据节点信息熵将网络中的节点划分为不同的壳层。为了避免一些有影响力的传播者相连,出现重叠影响范围的问题,在每个层次节点集中只选择一个节点。 IKS选择影响节点不仅来自较高的shell,因此每个shell中的每个节点都有不同的重要性。

  • 10
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
好的,以下是一段基于 k-shell 算法的 Matlab 代码,实现了对无向有权网络图的节点重要识别: ```matlab function importance = k_shell_algorithm(adjacency_matrix) % 使用 k-shell 算法识别无向有权网络图中的节点重要度 % 计算节点度数 degree = sum(adjacency_matrix, 2); % 根据度数对节点排序 [sorted_degree, sorted_index] = sort(degree, 'descend'); % 计算每个节点所处的 k-shell num_nodes = size(adjacency_matrix, 1); k_shell = zeros(num_nodes, 1); max_degree = max(degree); for k = 1:max_degree % 找到当前度数大于等于 k 的所有节点 k_nodes = find(degree >= k); % 从这些节点中找到一个 k-shell,去掉它们和它们的邻居节点 while ~isempty(k_nodes) k_shell(k_nodes) = k; k_nodes_to_remove = k_nodes(find(degree(k_nodes) == k, 1)); k_shell(k_nodes_to_remove) = k; k_nodes_to_remove = [k_nodes_to_remove; neighbors(adjacency_matrix, k_nodes_to_remove)]; degree(k_nodes_to_remove) = degree(k_nodes_to_remove) - 1; k_nodes = setdiff(k_nodes_to_remove, find(k_shell)); end end % 根据 k-shell节点进行排序 [sorted_k_shell, sorted_k_shell_index] = sort(k_shell, 'descend'); % 计算每个节点重要度 importance = zeros(num_nodes, 1); for i = 1:num_nodes node = sorted_index(i); importance(node) = sum(sorted_k_shell_index(sorted_k_shell >= k_shell(node)) == node) / k_shell(node); end ``` 输入参数 `adjacency_matrix` 是一个二维矩阵,表示无向有权网络图的邻接矩阵,其中第 $i$ 行第 $j$ 列的值是节点 $i$ 和节点 $j$ 之间的权值。 该函数的返回值为一个一维数组 `importance`,表示每个节点重要度,数组中第 $i$ 个元素表示节点 $i$ 的重要度。节点重要度的计算方法是基于 k-shell 算法,它通过计算每个节点所处的 k-shell 和它所处的 k-shell 中的节点数量,来衡量节点重要度。越高的 k-shell 和较少的节点数量,表示该节点重要
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值