Node2Vec に基づいて Python でノードの分類と視覚化を実装する方法
はじめに
Node2vec は、ノード分類、コミュニティ検出、接続予測などのタスクに使用できるグラフ埋め込みの方法です。
実装プロセス
データセットの読み込み
まず、必要な Python ライブラリを読み込み、次のコードを実行して Cora データセットを読み込みます:
import networkx as nx import numpy as np import pandas as pd import matplotlib.pyplot as plt %matplotlib inline from sklearn.manifold import TSNE from node2vec import Node2Vec # 加载Cora数据集 cora = pd.read_csv('cora/cora.content', sep='\t', header=None) cited_in = pd.read_csv('cora/cora.cites', sep='\t', header=None, names=['target', 'source']) nodes, features = cora.iloc[:, :-1], cora.iloc[:, -1]
このうち、cora.content
には、合計 2708 個のノードと 1433 個の特徴を含むすべてのノード特徴情報が含まれており、cora.cites
には、引用マッピングを通じて各ノードのノードが作成されます。それらの間の 5429 有向エッジ関係。次に、ノードの特徴と参照情報をマージして、グラフ構造を構築する必要があります。
# 定义函数:构造基于Cora数据集的图结构 def create_graph(nodes, features, cited_in): nodes.index = nodes.index.map(str) graph = nx.from_pandas_edgelist(cited_in, source='source', target='target') for index, row in nodes.iterrows(): node_id = str(row[0]) features = row.drop(labels=[0]) node_attrs = {f'attr_{i}': float(x) for i, x in enumerate(features)} if graph.has_node(node_id) == True: temp = graph.nodes[node_id] temp.update(node_attrs) graph.add_nodes_from([(node_id, temp)]) else: graph.add_nodes_from([(node_id, node_attrs)]) return graph # 构建图 graph = create_graph(nodes, features, cited_in)
この関数は、cora.content
のノード特徴を cora.cites
の有向辺と統合し、グラフ上でそれらにラベルを付けます。これで、アイデアを視覚化できるグラフィカル ビューが構築されました。
Node2vec を使用したデータの埋め込み
ノード特徴分類を実行するには、ネットワークから情報を抽出し、それを入力として分類器に渡す必要があります。 1 つの例は、ノード 2 ベクトル法を使用して、各ノードが少なくとも 1 つの次元を持つように、抽出された情報をベクトル表現に変換することです。
開始ノードからターゲット ノードまでサンプルをランダムに移動することにより、Node2Vec モデルは各ノードを表すベクトルを学習します。ノード 2Vec モデルは、ランダム ウォーク中のノード間の遷移確率を定義します。
node2vec ライブラリを使用してグラフの埋め込み表現を生成し、ノード分類にニューラル ネットワークを使用します。
# 定义函数:创建基于Cora数据集的嵌入 def create_embeddings(graph): # 初始化node2vec实例,指定相关超参数 n2v = Node2Vec(graph, dimensions=64, walk_length=30, num_walks=200, p=1, q=1, weight_key='attr_weight') # 基于指定参数训练得到嵌入向量表达式 model = n2v.fit(window=10, min_count=1, batch_words=4) # 获得所有图中节点的嵌入向量 embeddings = pd.DataFrame(model.wv.vectors) ids = list(map(str, model.wv.index2word)) # 将原有的特征和id与新获取到的嵌入向量按行合并 lookup_table = nodes.set_index(0).join(embeddings.set_index(embeddings.index)) return np.array(lookup_table.dropna().iloc[:, -64:]), np.array(list(range(1, lookup_table.shape[0] + 1))) # 创建嵌入向量 cora_embeddings, cora_labels = create_embeddings(graph)
上記のコードにより、各ノードの 64 次元のノード埋め込み式を取得できます。
分類器のトレーニング
次に、埋め込みに基づいて正確なノード分類操作を実行するために、いくつかの分類器を指定し、Cora データセット上でそれらをトレーニングします。
from sklearn import svm, model_selection, metrics # 使用支持向量机作为示范的分类器 svm_model = svm.SVC(kernel='rbf', C=1, gamma=0.01) # 进行交叉验证和分类训练 scores = model_selection.cross_val_score( svm_model, cora_embeddings, cora_labels, cv=5) print(scores.mean())
より良いパフォーマンスを得るには、サポート ベクター マシンを分類器として使用するときに、関連するパラメーター調整操作も実行する必要があります。ここでは、5 分割交差検証法を使用してパフォーマンスを評価します。
可視化されたノードの埋め込み
理解を深めていくためには、人間が理解するのが難しい 64 次元の特徴表現の次元を削減して可視化する必要があります。 t-SNE は、高次元データの複雑さを軽減するために特別に設計された手法であり、ここでもそれを使用します。類似したノードが密集した 2 次元グラフを生成します。このグラフは、2 つの要素のみを含む確率分布ベクトルを出力することで実現されます。
# 定义函数:可视化Nodes2Vec的结果 def visualize_results(embeddings, labels): # 使用t-SNE对数据进行降维并绘图 tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300) tsne_results = tsne.fit_transform(embeddings) plt.figure(figsize=(10, 5)) plt.scatter(tsne_results[:,0], tsne_results[:,1], c=labels) plt.colorbar() plt.show() # 可视化结果 visualize_results(cora_embeddings, cora_labels)
Node2Vec によって生成された埋め込みベクトルは t-SNE に入力されます。t-SNE は 64 次元のベクトル表現の次元を削減し、matplotlib を使用して視覚化できる 2 次元の散布図を出力します。図書館。最も関連性の高いノードが緊密にクラスタ化されているかどうかは、グラフィカル インターフェイスで確認できます。
以上がNode2Vec に基づいて Python でノードの分類と視覚化を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Golangは、パフォーマンスとスケーラビリティの点でPythonよりも優れています。 1)Golangのコンピレーションタイプの特性と効率的な並行性モデルにより、高い並行性シナリオでうまく機能します。 2)Pythonは解釈された言語として、ゆっくりと実行されますが、Cythonなどのツールを介してパフォーマンスを最適化できます。

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。
