圖神經網路
圖與節點的基本
圖直徑:
圖中所有的兩兩節點他們的最短路徑的最大值。·
節點的度中心性:
公式Ndegree/(n-1) 也就是該節點的度/(全部的節點-1)
節點的特徵向量中心性Eigenvector Centrality:
如果一個節點連線的度越多,其特徵向量中心性越大。
中介中心性Betweenness Centrality :
經過該節點的最短路徑/其餘兩兩節點的最短路徑。
先來看曹操的betweenness的計算,分子的第一項:蔡文姬出發到甄姬的最短路徑沒有經過曹操,所以為0,假設蔡文姬出發去周瑜的最短路徑經過曹操所以為1,從蔡文姬出發去夏侯惇的最短路徑經過曹操所以為1,從蔡文姬出發前往典韋的最短路徑有兩條(都是要經過一個人才到)裡面有一條是經過曹操的所以其為0.5,所以分子的第一項為(0+1+1+0.5)。分子的第二項:從甄姬出發到蔡文姬的最短路徑不經過曹操所以為0,從甄姬出發到典韋的最短路徑不經過曹操所以為0,從甄姬出發到周瑜的最短路徑經過曹操所以其為1,從甄姬出發到夏侯惇的最短路徑經過曹操,所以其為1,所以分子的第二項為(0+0+1+1)。後面的也是同樣來類推。來看分母,先是蔡文姬去除了曹操以外的所有人總共有4條最短路徑,除了曹操之外總共有5個人,所以分母為5*4
連線中心性closeness
計算曹操的closeness:分子是全部節點的個數-1,任意兩個節點之間的距離為1,曹操到任意的其他5個人的距離均是為1,所以分母為5。
再計算甄姬的closeness:分子是全部節點的個數-1,甄姬到曹操和蔡文姬的最短路徑是1,而到典韋,夏侯惇,周瑜都需要經過曹操,所以最短距離是2。
網頁排序演算法pageRank
如果一個網頁被很多其他網頁所連結,那麼說明他受到普遍的承認和信賴,那麼他的排名就高。PR值越高說明該網頁越受歡迎(越重要
假設一個由只有4個頁面組成的集合:A,B,C和D。如果所有頁面都只鏈向A,那麼A的PR(PageRank)值將是B,C及D的和。
換句話說,根據鏈出總數平分一個頁面的PR值。
使用networkx進行計算
import numpy as np import pandas as pd import networkx as nx edges = pd.DataFrame() #使用pd構造dataframe edges["sources"] = [1,1,2,2,3,3,4,4,5,5] #構造源節點列表 edges["targets"] = [2,4,5,3,1,2,5,1,3,4] #構造目標節點列 edges["weights"] = [1,1,1,1,1,1,1,1,1,1] #構造邊的權重列#使用pandas來生成圖,比如從1出發到2,權重是1,從1出發到4權重也是1 Graph = nx.from_pandas_edgelist(edges,source="sources",target="targets",edge_attr="weights") print(nx.degree(Graph)) #列印每一個節點的度 print(list(nx.connected_components(Graph))) #列印連通的成分 print(nx.diameter(Graph)) #列印圖直徑,圖上的任意兩個相鄰的點之間的路徑的最大值為圖直徑 print(nx.degree_centrality(Graph)) #列印度中心性 print(nx.eigenvector_centrality(Graph)) #列印特徵向量中心性 print(nx.betweenness_centrality(Graph)) #betweenness_centrality print(nx.closeness_centrality(Graph)) #closeness_centrality print(nx.pagerank(Graph)) #pagerank print(nx.hits(Graph)) #hits