复杂网络K-Shell算法及其Python实现
2017-12-18 11:03
2216 查看
The rest of the world may follow the rules,but i must follow my heart!
随心所欲即使其他人随波逐流。
删边之后节点的度小于Ks值如何处理?
如果根据算法思想那么算法中存在一定的问题,本人依照依照自己的理解的写的实现代码,若有错误请指正,感谢您的不吝赐教!
随心所欲即使其他人随波逐流。
K-Shell算法
基本思想
K-shell 方法递归地剥离网络中度数小于或等于 k 的节点,具体划分过程如下: 假设网络中不存在度数为 0 的孤立节点。从度指标的角度分析,度数为 1的节点是网络中最不重要的节点,因此首先将度数为 1 的节点及其连边从网络中删除。删除操作进行之后的网络中会出现新的度数为 1 的节点,接着将这些新出现的度数为 1 的节点及其连边删除。重复上述操作,直到网络中不再新出现度数为 1的节点为止。此时所有被删除的节点构成第一层,即 1-shell,节点的 Ks 值等于 1。剩下的网络中,每个节点的度数至少为2。继续重复上述删除操作,得到 Ks 值等于 2 的第二层,即 2-shell。依此类推,直到网络中所有的节点都被赋予 Ks 值。Python实现
# -*- coding: UTF-8 -*- """ Created on 17-12-17 @summary: KShell算法节点重要性度量 @author: dreamhome """ from get_graph import read_graph_from_file def kshell(graph): """ 根据Kshell算法计算节点的重要性 :param graph: 图 :return: importance_dict{ks:[nodes]} """ importance_dict = {} ks = 1 while graph.nodes(): # 暂存度为ks的顶点 temp = [] node_degrees_dict = graph.degree() # 每次删除度值最小的节点而不能删除度为ks的节点否则产生死循环。这也是这个算法存在的问题。 kks = min(node_degrees_dict.values()) while True: for k, v in node_degrees_dict.items(): if v == kks: temp.append(k) graph.remove_node(k) node_degrees_dict = graph.degree() if kks not in node_degrees_dict.values(): break importance_dict[ks] = temp ks += 1 return importance_dict if __name__ == "__main__": # graph = nx.Graph() # graph.add_edges_from( # [(1, 4), (2, 4), (3, 4), (4, 5), (5, 6), (5, 7), (3, 5), (6, 7)]) # print kshell(graph) path = "/home/dreamhome/network-datasets/karate/karate.paj" graph = read_graph_from_file(path) print kshell(graph)
算法中存在的问题
删除最后剩下孤立点如何解决?删边之后节点的度小于Ks值如何处理?
如果根据算法思想那么算法中存在一定的问题,本人依照依照自己的理解的写的实现代码,若有错误请指正,感谢您的不吝赐教!
相关文章推荐
- 高斯判别分析算法及其python实现
- [转] Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版
- KNN及其改进算法的python实现
- 6.2神经网络算法实现--python机器学习
- kmenas及其改进算法(python和matlab实现)
- 基于Levenberg-Marquardt训练算法的BP网络Python实现
- 常用距离算法和相关系数及其Python实现
- python实现简单神经网络算法
- 字符串匹配的KMP算法和朴素算法,及其python实现
- python复杂网络库networkx:算法
- DBscan算法及其Python实现
- 基于Levenberg-Marquardt训练算法的BP网络Python实现
- Twitter的分布式自增ID算法Snowflake实现分析及其Java、Php和Python版
- python实现简单神经网络算法
- 基于Levenberg-Marquardt训练算法的BP网络Python实现
- [置顶] KNN及其改进算法的python实现
- python复杂网络库networkx:算法
- 机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用
- SMOTE算法及其python实现
- 高斯判别分析算法及其python实现