該章節涉及到知識圖譜的知識,我們先說幾個概念
1.節點和邊
節點就是現實世界存在的實體,邊就是實體和實體之間的關系
2.權重
權重通常用與衡量關系的強弱,權重越大,比如說用戶A給用戶B打了15個電話,則權重為15
3.有向圖無向圖
根據邊是否有方向,分為有向圖和無向圖,比如說用戶A給用戶B打了15個電話就是有向圖,但是A和B是同事就是無向圖了。
4.中心度和相似性
中心度來衡量網絡中每一個節點的活躍程度,其中衡量中心度有多重方式,下面介紹幾種表示方法
(1)度:節點的度是指與該節點相連的邊的個數,節點的度越大,說明該節點在該網絡中越活躍,使groupby和count或者nunique()結合使用可以計算度,也可以使用networkx.degree()計算
(2)Eigenvector中心度:只是使用度就是中心度,乜有考慮到鄰接節點的信息,Eigenvector的設計思想是一個節點的活躍並不只體現他有非常大的度,還體現與他相連的節點也有非常多的度。
(3)Pagerank
(4)Bbtweennss
Jaccard相似度
5.節點分類
要對節點進行分類預測,首先要找到從網絡中抽取特征的方法,即通過特殊的表達手段,將網絡中的節點空間關系抽象為一個向量
(1)朴素節點分類
朴素節點分類思想非常簡單,只需要根據節點與其他節點是否相連,進行one-hot編碼后,排列成列向量,和標簽一起帶人分類器進行訓練

節點A的向量 表示為[0,1,0,0,1]
因為A和B、E向量,因此[A,B,C,D,E]只有B和E的位置是1,其余都是0
(2)鄰節點加權投票
在知識圖譜中,通常認為,用戶 的信息會由邊進行傳播並不斷衰減,而朴素節點分類中,沒有考慮到節點之間的相互作用,一般來說相連的用戶可能具有相同的標簽,比如一個用戶被打上欺詐標簽,那么他的一度聯系人會轉變成欺詐用戶的概率會大大提高,這種情況下,可以使用一種叫共生節點分類的半監督學習方法對節點進行分類。
鄰節點加權投票(WVRN)是一種典型的共生節點分類法,每一個無標簽節點 i 的標簽由其鄰居 N(i)進行加權投票得到,公式到時再補上
權重就體現在節點 i 的鄰居節點標簽的概率上,也就是說,鄰居中對自己標簽最有信息的節點,對應節點 i 的貢獻也會越大,從而可以根據網絡中部分有標簽樣本的標簽,迭代得到其余無標簽樣本的標簽,最終,網絡中的每個節點的標簽概率會收斂到一個穩定的值。
(3)一致性標簽傳播
根據鄰居節點概率加權投票的方式,雖然考慮到了節點信息的流轉,但是每一次更新的時候都沒有將自身的信息考慮進去,簡單來說,一個節點在經歷一次更新時,相比自身原來的標簽不應該有太大的改變。如果想把每個節點自身的信息考慮進去,可以使用另一種共生節點分類的算法,一致性標簽傳播(CLPM),一致性標簽傳播也是一種半監督的學習方法,可以根據網絡中有部分標簽樣本的標簽,迭代得到其余無標簽的樣本的標簽。
6.社區發現算法
對於團伙欺詐檢測,主要有2類發現算法:
(1)社區檢測:通過對固定的網絡社區進行划分,從而得到一個個團簇結構;
(2)社區搜索:首先給定一個網絡社區和其中的某個節點A,然后從節點A出發尋找與A有關的社區;
GN算法:Girvan-Newman算法是最經典的社區發現算法之一,基本思想是,如果去除社群之間連接的邊,留下的就是社群。該算法認為,2個社群之間的點的最短路徑總是要通過社群間的連接邊,因此中心度越大的邊,越可能是不同社群的連接邊,所以只需要不斷將中心度大的邊去掉,就可以得到獨立的社群。
算法步驟如下:
(1)計算所有邊的邊中心度;
(2)將邊中心度最高的邊去掉;
(3)重新計算被去掉的邊影響的邊的邊中心度;
(4)重新第2和第3步,直至不連通的社群個數達到預想值;
import networkx as nx from networkx.algorithms import community import itertools G = nx.karate_club_graph() nx.draw(G,with_labels=True, edge_color='grey', node_color='pink', node_size = 500, font_size = 40, pos=nx.spring_layout(G,k=0.2)) comp = community.girvan_newman(G) # 令社區個數為4,這樣會依次得到K=2,K=3,K=4時候的划分結果 k = 4 limited = itertools.takewhile(lambda c: len(c) <= k, comp) for communities in limited: print(tuple(sorted(c) for c in communities))
Louvain算法
在實際使用中,GN算法雖然准確率很高,但是計算量很大,時間復雜度也高,因此再推出Louvain算法