0Pricing
Learn AI with Python · レッスン

機械学習のためのグラフ理論

ノード、エッジ、隣接行列、グラフの種類、グラフ特徴量、ソーシャルネットワークの表現について学習します。

「機械学習のためのグラフ理論」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

グラフとは

グラフは、エンティティとそれらの間の関係をモデル化します。形式的には、グラフは G = (V, E) と表されます。ここでVは頂点(ノード)の集合、Eはノードのペアを接続する辺の集合です。現実の多くのシステムは、自然にグラフとして表現できます。

ノードと辺

各ノードはエンティティ(ユーザー、原子、Webページなど)を表します。各辺は関係(友人関係、化学結合、ハイパーリンクなど)を表します。グラフ機械学習では、孤立したサンプルだけでなく、この接続構造から学習します。

隣接行列

隣接行列 Aは、どのノード同士が接続されているかを表します。n個のノードがある場合、Aは n×n 行列です。辺がノード iとノード jを接続している場合は A[i][j] = 1、そうでなければ0です。

import numpy as np

# Triangle: 0-1, 1-2, 0-2
A = np.array([
    [0, 1, 1],
    [1, 0, 1],
    [1, 1, 0],
])

ノード特徴量 X

構造だけでなく、通常は各ノードが特徴量ベクトルを持ちます。これらを縦に並べると、形状が (num_nodes, num_features) の特徴量行列 X になります。ソーシャルグラフの場合、1行にユーザーの年齢、投稿数、アカウントの利用期間などを格納できます。

X = np.array([
    [25, 120, 3.0],   # node 0
    [31,  45, 5.5],   # node 1
    [22, 300, 1.2],   # node 2
])

次数行列

ノードの次数とは、そのノードに接続された辺の数です。次数行列 Dは対角行列で、各対角成分は対応するノードの次数に等しくなります。これはグラフラプラシアンの基本要素です。

D = np.diag(A.sum(axis=1))
# Each diagonal entry = number of neighbors

グラフラプラシアン

グラフラプラシアンは L = D - A と定義されます。接続されたノード間で値がどのように異なるかを表し、スペクトルグラフ理論や多くのGNNの定式化で中心的な役割を果たします。

L = D - A
print(L)

ラプラシアンが重要な理由

ラプラシアンの固有値と固有ベクトルから、連結性、クラスタ、平滑性といったグラフ全体の構造を読み取れます。グラフ畳み込みはラプラシアンから導出されることが多いため、L = D - A を理解することはGNNを理解するうえで重要です。

有向グラフと無向グラフ

無向グラフでは辺に方向がありません(友人関係など)。そのため、Aは対称行列になります。有向グラフでは辺が一方向を指すため(フォロー関係や引用など)、Aは非対称になる場合があります。つまり、A[i][j] と A[j][i] は異なることがあります。

# Directed: 0 -> 1 but not 1 -> 0
A_dir = np.array([
    [0, 1, 0],
    [0, 0, 1],
    [0, 0, 0],
])

重み付きグラフ

辺には、強さや距離を表す重みを持たせることができます。この場合、隣接行列の成分は0/1だけでなく実数になります。道路ネットワークでは移動時間、類似度グラフではコサイン類似度を辺の重みにできます。

辺を効率的に表現する

大規模な疎グラフでは、隣接行列の大部分の成分が0になるため、メモリを無駄に使用します。そこで機械学習フレームワークでは、辺をエッジリスト(COO形式)として保存します。これは各辺の始点と終点を示す2つの配列です。PyTorch Geometricでは、これを edge_index と呼びます。

# Triangle edges as edge_index [2, num_edges]
edge_index = [
    [0, 0, 1],   # sources
    [1, 2, 2],   # targets
]

グラフ機械学習の応用

グラフはさまざまな分野に登場します。

  • ソーシャル:友人推薦、コミュニティ検出
  • 分子:分子の特性予測(原子 = ノード、結合 = 辺)
  • 知識グラフ:エンティティと関係に基づくリンク予測
  • Web/引用:ランキングと分類

クイックチェック

グラフ理論に関する知識を確認しましょう。

まとめ

機械学習に必要なグラフ理論の基礎を学びました。

  • グラフは、ノードと辺からなる G = (V, E) で表されます
  • 隣接行列 Aは接続関係を表し、Xはノードの特徴量を保持します
  • グラフラプラシアンは L = D - A です
  • グラフには、有向/無向、重み付き/重みなしのものがあります
  • 応用分野は、ソーシャルグラフ、分子グラフ、知識グラフなど多岐にわたります

よくある質問

「機械学習のためのグラフ理論」レッスンは無料ですか?

はい。「機械学習のためのグラフ理論」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「機械学習のためのグラフ理論」で何を学びますか?

ノード、エッジ、隣接行列、グラフの種類、グラフ特徴量、ソーシャルネットワークの表現について学習します。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「機械学習のためのグラフ理論」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 機械学習のためのグラフ理論
  2. グラフ畳み込みネットワーク(GCN)
  3. GNNによるノード分類
  4. リンク予測とグラフ分類
← Learn AI with Pythonに戻る