近年來基於圖的機器學習有了很大的發展。基於圖的方法在資料科學中的許多常見問題中都有應用,例如連結預測、社群發現、節點分類等。根據如何組織問題和所擁有的數據,有許多解決問題的方法。本文將提供一個基於圖的嵌入演算法的高層次的概述。最後也將介紹如何用Python庫(如node2vec)來在圖上產生各種嵌入。
#基於圖的機器學習
人工智慧有各種分支,從推薦系統、時間序列、自然語言處理、電腦視覺、圖機器學習等。有多種方法可以透過基於圖的機器學習來解決常見問題。包括社群發現、連結預測、節點分類等。
與圖機器學習的一個主要問題是找到一種表示(或編碼)圖結構的方法,以便機器學習模型可以輕鬆地利用它[1]。一般情況下機器學習中解決這個問題需要透過與模型相關聯的結構化表格資料來學習某種表示,這在以前是透過統計測量或核函數來進行的。近年來趨勢已經轉向對圖進行編碼以產生嵌入向量來訓練機器學習模型。
機器學習模型的目標是訓練機器在資料集中大規模學習和模式識別。在處理圖時這一點會被放大,因為圖提供不同而複雜的結構,這是其他形式的資料(如文字、音訊或圖像)所不具備的。基於圖的機器學習可以偵測並解釋重複出現的潛在模式[2]。
我們可能對確定與社交網路上的使用者相關的人口統計資訊感興趣。人口統計資料包括年齡、性別、種族等。像Facebook或Twitter這樣的公司的社交媒體網絡範圍從數百萬-數十億的用戶和數萬億的邊。肯定會有幾個與該網路中使用者的人口統計資訊相關的模式,這些模式不容易透過人類或演算法檢測到,但模型應該能夠學習它們。類似地,我們可能想推薦一對用戶成為朋友,而他們目前還不是朋友。這就為連結預測(基於圖的機器學習的另一個應用)提供了素材。
什麼是圖嵌入?
特徵工程是指處理輸入資料形成一組特徵的常用方法,這些特徵提供了原始資料集的緊湊且有意義的表示。特徵工程階段的結果將作為機器學習模型的輸入。這是在表格結構化資料集的處理時必備的過程,但在處理圖資料時卻是一種難以執行的方法,因為需要找到一種方法來產生與所有圖資料相關聯的合適表示。
有多種方法可以從圖中產生表示結構資訊的特徵。最常見且最直接的方法是從圖中提取統計資料。這可以包括識別度分佈、page rank、centrality metrics、jaccard 分數等。然後透過內核函數將所需屬性合併到模型中,但是核函數的問題是產生結果的相關時間複雜度很高。
最近的研究趨勢已經轉向尋找有意義的圖表示,對圖生成嵌入表示。這些嵌入學習了保持網路原始結構的圖表示。我們可以將其視為旨在將離散圖轉換為連續域的映射函數。一旦學習了函數,就可以將其應用於圖,並且生成的映射可以用作機器學習演算法的特徵集 。
圖嵌入的類型
對圖的分析可以分解為 3 個粒度等級。節點層級、邊緣層級和圖層級(整個圖)。每個層級由產生嵌入向量的不同流程組成,所選過程應取決於正在處理的問題和資料。下面介紹的每個粒度等級的嵌入都有附圖來直觀地彼此不同。
節點嵌入
在節點級別,產生與圖中的每個節點關聯的嵌入向量。這個嵌入向量可以容納圖的表示和結構。本質上說彼此接近的節點也應該有彼此接近的向量。這是流行的節點嵌入模型(如Node2Vec)的基本原則之一。
邊嵌入
在邊緣層中,產生一個與圖中的每條邊相關的嵌入向量。鏈路預測問題是使用邊嵌入的一個常見應用。連結預測是指預測一對節點之間是否有一條邊連接的可能性。這些嵌入可以學習圖提供的邊屬性。例如在一個社交網路圖中,可以有一個多邊圖,其中節點可以根據年齡範圍、性別等用邊連接。表示該邊的相關向量可以學習這些邊屬性。
圖嵌入
圖層級的嵌入並不常見,它們包括產生一個表示每個圖的嵌入向量。例如一個有多個子圖的大圖,每個對應的子圖都有一個表示圖結構的嵌入向量。分類問題是圖嵌入可能有用的常見應用。這些類型的問題將包括將圖表分類到特定類別。
Python實作
使用python程式碼實作我們需要以下的這些函式庫
Pythnotallow=3.9 networkx>=2.5 pandas>=1.2.4 numpy>=1.20.1 node2vec>=0.4.4 karateclub>=1.3.3 matplotlib>=3.3.4
如果您沒有安裝node2vec包,請參考它的文件。安裝karateclub包,也類似
節點嵌入
import random import networkx as nx import matplotlib.pyplot as plt from node2vec import Node2Vec from node2vec.edges import HadamardEmbedder from karateclub import Graph2Vec plt.style.use("seaborn") # generate barbell network G = nx.barbell_graph( m1 = 13, m2 = 7 ) # node embeddings def run_n2v(G, dimensions=64, walk_length=80, num_walks=10, p=1, q=1, window=10): """ Given a graph G, this method will run the Node2Vec algorithm trained with the appropriate parameters passed in. Args: G (Graph) : The network you want to run node2vec on Returns: This method will return a model Example: G = np.barbell_graph(m1=5, m2=3) mdl = run_n2v(G) """ mdl = Node2Vec( G, dimensions=dimensions, walk_length=walk_length, num_walks=num_walks, p=p, q=q ) mdl = mdl.fit(window=window) return mdl mdl = run_n2v(G) # visualize node embeddings x_coord = [mdl.wv.get_vector(str(x))[0] for x in G.nodes()] y_coord = [mdl.wv.get_vector(str(x))[1] for x in G.nodes()] plt.clf() plt.scatter(x_coord, y_coord) plt.xlabel("Dimension 1") plt.ylabel("Dimension 2") plt.title("2 Dimensional Representation of Node2Vec Algorithm on Barbell Network") plt.show()
#上圖是由barbell graph 產生的節點嵌入可視,有許多計算節點嵌入的方法,如node2vec、deep walk、random walks等。這裡使用node2vec。
邊嵌入
edges_embs = HadamardEmbedder( keyed_vectors=mdl.wv ) # visualize embeddings coordinates = [ edges_embs[(str(x[0]), str(x[1]))] for x in G.edges() ] plt.clf() plt.scatter(coordinates[0], coordinates[1]) plt.xlabel("Dimension 1") plt.ylabel("Dimension 2") plt.title("2 Dimensional Representation of Edge Embeddings on Barbell Network") plt.show()
#透過barbell graph查看邊嵌入的視覺化,Hammard Embedder的原始碼可以在這裡找到(https ://github.com/eliorc/node2vec/blob/master/node2vec/edges.py#L91)。
圖嵌入
n_graphs = 10 Graphs = [ nx.fast_gnp_random_graph( n = random.randint(5,15), p = random.uniform(0,1) ) for x in range(n_graphs) ] g_mdl = Graph2Vec(dimensions=2) g_mdl.fit(Graphs) g_emb = g_mdl.get_embedding() x_coord = [vec[0] for vec in g_emb] y_coord = [vec[1] for vec in g_emb] plt.clf() plt.scatter(x_coord, y_coord) plt.xlabel("Dimension 1") plt.ylabel("Dimension 2") plt.title("2 Dimensional Representation of Graph Embeddings on Randomly Generated Networks") plt.show()
#這是一個由隨機產生的圖的圖嵌入可視化,graph2vec演算法的源代碼可以在這裡找到。 (https://karateclub.readthedocs.io/en/latest/_modules/karateclub/graph_embedding/graph2vec.html)
總結
#嵌入是一個將離散圖對應到向量表示的函數。從圖資料中可以產生多種形式的嵌入,節點嵌入、邊嵌入和圖嵌入。所有三種類型的嵌入都提供了一種向量表示,將圖的初始結構和特徵映射到X維的數值。
以上是圖嵌入概述:節點、邊和圖嵌入方法及Python實現的詳細內容。更多資訊請關注PHP中文網其他相關文章!

科學家已經廣泛研究了人類和更簡單的神經網絡(如秀麗隱桿線蟲中的神經網絡),以了解其功能。 但是,出現了一個關鍵問題:我們如何使自己的神經網絡與新穎的AI一起有效地工作

Google的雙子座高級:新的訂閱層即將到來 目前,訪問Gemini Advanced需要$ 19.99/月Google One AI高級計劃。 但是,Android Authority報告暗示了即將發生的變化。 最新的Google P中的代碼

儘管圍繞高級AI功能炒作,但企業AI部署中潛伏的巨大挑戰:數據處理瓶頸。首席執行官慶祝AI的進步時,工程師努力應對緩慢的查詢時間,管道超載,一個

處理文檔不再只是在您的AI項目中打開文件,而是將混亂變成清晰度。諸如PDF,PowerPoints和Word之類的文檔以各種形狀和大小淹沒了我們的工作流程。檢索結構化

利用Google的代理開發套件(ADK)的力量創建具有現實世界功能的智能代理!該教程通過使用ADK來構建對話代理,並支持Gemini和GPT等各種語言模型。 w

摘要: 小型語言模型 (SLM) 專為效率而設計。在資源匱乏、實時性和隱私敏感的環境中,它們比大型語言模型 (LLM) 更勝一籌。 最適合專注型任務,尤其是在領域特異性、控制性和可解釋性比通用知識或創造力更重要的情況下。 SLM 並非 LLMs 的替代品,但在精度、速度和成本效益至關重要時,它們是理想之選。 技術幫助我們用更少的資源取得更多成就。它一直是推動者,而非驅動者。從蒸汽機時代到互聯網泡沫時期,技術的威力在於它幫助我們解決問題的程度。人工智能 (AI) 以及最近的生成式 AI 也不例

利用Google雙子座的力量用於計算機視覺:綜合指南 領先的AI聊天機器人Google Gemini擴展了其功能,超越了對話,以涵蓋強大的計算機視覺功能。 本指南詳細說明瞭如何利用

2025年的AI景觀正在充滿活力,而Google的Gemini 2.0 Flash和Openai的O4-Mini的到來。 這些尖端的車型分開了幾週,具有可比的高級功能和令人印象深刻的基準分數。這個深入的比較


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

WebStorm Mac版
好用的JavaScript開發工具

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具