加入收藏 | 设为首页 | 会员中心 | 我要投稿 南平站长网 (https://www.0599zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 建站资源 > 经验 > 正文

PageRank、最小生成树:ML开发者应该了解的五种图算法

发布时间:2019-09-10 04:57:27 所属栏目:经验 来源:佚名
导读:副标题#e# 在互联世界中,用户不能被视为独立的实体。他们之间存在一定的关系,我们有时希望在构建机器学习模型时考虑到这些关系。 在关系数据库中,我们无法在不同的行(用户)之间利用这种关系,但在图数据库中,这样做非常简单。 在这篇文章中,我们将讨

它是这样的:

  1. pos = nx.spring_layout(fb) 
  2.  
  3. import warnings 
  4.  
  5. warnings.filterwarnings('ignore') 
  6. plt.style.use('fivethirtyeight') 
  7. plt.rcParams['figure.figsize'] = (20, 15) 
  8. plt.axis('off') 
  9. nx.draw_networkx(fb, pos, with_labels = False, node_size = 35) 
  10. plt.show() 

PageRank、最小生成树:ML开发者应该了解的五种图算法

Facebook 用户图

现在我们想要找出具有高影响力的用户。直观地说,Pagerank 算法会给拥有很多朋友的用户打高分,而这些朋友又拥有很多 Facebook 朋友。

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

利用以下代码可以得到排序的 PageRank 或最具影响力的用户:

  1. import operator 
  2.  
  3. sorted_pagerank = sorted(pagerank.items(), key=operator.itemgetter(1),reverse = True) 
  4. print(sorted_pagerank) 
  5. ------------------------------------------------------ 
  6. [(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),......] 

以上 ID 即为最有影响力的用户。最具影响力用户的子图如下所示:

  1. first_degree_connected_nodes = list(fb.neighbors(3437)) 
  2. second_degree_connected_nodes = [] 
  3.  
  4. for x in first_degree_connected_nodes: 
  5.     second_degree_connected_nodes+=list(fb.neighbors(x)) 
  6.  
  7. second_degree_connected_nodes.remove(3437) 
  8. second_degree_connected_nodes = list(set(second_degree_connected_nodes)) 
  9. subgraph_3437 = nx.subgraph(fb,first_degree_connected_nodes+second_degree_connected_nodes) 
  10.  
  11. pos = nx.spring_layout(subgraph_3437) 
  12. node_color = ['yellow' if v == 3437 else 'red' for v in subgraph_3437] 
  13. node_size =  [1000 if v == 3437 else 35 for v in subgraph_3437] 
  14.  
  15. plt.style.use('fivethirtyeight') 
  16. plt.rcParams['figure.figsize'] = (20, 15) 
  17. plt.axis('off') 
  18. nx.draw_networkx(subgraph_3437, pos, with_labels = False, node_color=node_color,node_size=node_size ) 
  19. plt.show() 

PageRank、最小生成树:ML开发者应该了解的五种图算法

黄色为最具影响力用户

中心性度量

你可以将许多中心性度量用作机器学习模型的特征,这里只谈其中的两个。

其他度量链接:https://networkx.github.io/documentation/networkx-1.10/reference/algorithms.centrality.html#current-flow-closeness。

介数中心性:不仅拥有众多朋友的用户很重要,将一个地理位置连接到另一个位置的用户也很重要,因为这样可以让用户看到不同地点的内容。

介数中心性量化了一个特定节点在其他两个节点之间最短路径中出现的次数。

点度中心性:它只是节点的连接数。

代码

(编辑:南平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读