算法图解python,python常见算法库

首页 > 经验 > 作者:YD1662022-11-03 06:03:01

现在,我们想要找到具有高影响力的用户。直观上来讲,Pagerank 会给拥有很多朋友的用户提供更高的分数,而这些用户的朋友反过来会拥有很多朋友。

pageranks = nx.pagerank(fb) print(pageranks) ------------------------------------------------------ {0: 0.006289602618466542, 1: 0.00023590202311540972, 2: 0.00020310565091694562, 3: 0.00022552359869430617, 4: 0.00023849264701222462, ........}

使用如下代码,我们可以获取排序后 PageRank 值,或者最具有影响力的用户:

import operator sorted_pagerank = sorted(pagerank.items(), key=operator.itemgetter(1),reverse = True) print(sorted_pagerank) ------------------------------------------------------ [(3437, 0.007614586844749603), (107, 0.006936420955866114), (1684, 0.0063671621383068295), (0, 0.006289602618466542), (1912, 0.0038769716008844974), (348, 0.0023480969727805783), (686, 0.0022193592598000193), (3980, 0.002170323579009993), (414, 0.0018002990470702262), (698, 0.0013171153138368807), (483, 0.0012974283300616082), (3830, 0.0011844348977671688), (376, 0.0009014073664792464), (2047, 0.000841029154597401), (56, 0.0008039024292749443), (25, 0.000800412660519768), (828, 0.0007886905420662135), (322, 0.0007867992190291396),......]

将含有最具影响力用户的子图进行可视化:

first_degree_connected_nodes = list(fb.neighbors(3437)) second_degree_connected_nodes = [] for x in first_degree_connected_nodes: second_degree_connected_nodes =list(fb.neighbors(x)) second_degree_connected_nodes.remove(3437) second_degree_connected_nodes = list(set(second_degree_connected_nodes)) subgraph_3437 = nx.subgraph(fb,first_degree_connected_nodes second_degree_connected_nodes) pos = nx.spring_layout(subgraph_3437) node_color = ['yellow' if v == 3437 else 'red' for v in subgraph_3437] node_size = [1000 if v == 3437 else 35 for v in subgraph_3437] plt.style.use('fivethirtyeight') plt.rcParams['figure.figsize'] = (20, 15) plt.axis('off') nx.draw_networkx(subgraph_3437, pos, with_labels = False, node_color=node_color,node_size=node_size ) plt.show()

算法图解python,python常见算法库(9)

黄色的节点代表最具影响力的用户

应用

Pagerank 可以估算任何网络中节点的重要性。

5、中心性度量

一些中心性度量的指标可以作为机器学习模型的特征,我们主要介绍其中的两个指标

代码

使用下面的代码可以计算子图的介数中心性:

pos = nx.spring_layout(subgraph_3437) betweennessCentrality = nx.betweenness_centrality(subgraph_3437,normalized=True, endpoints=True) node_size = [v * 10000 for v in betweennessCentrality.values()] plt.figure(figsize=(20,20)) nx.draw_networkx(subgraph_3437, pos=pos, with_labels=False, node_size=node_size ) plt.axis('off')

算法图解python,python常见算法库(10)

如上图所示,节点的尺寸大小和介数中心性的大小成正比。具有较高介数中心性的节点被认为是信息的传递者,移除任意高介数中心性的节点将会撕裂网络,将完整的图打碎成几个互不连通的子图。

应用

中心性度量的指标可以作为机器学习模型的特征。

总结

在这篇文章中,我们介绍了了一些最有影响力的图算法。随着社交数据的出现,图网络分析可以帮助我们改进模型和创造价值,甚至更多地了解这个世界。

,
上一页123末页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.