yamamoto-yuta / yamamoto-yuta.github.io

https://yamamoto-yuta.github.io/
0 stars 0 forks source link

PageRankメモ #30

Open yamamoto-yuta opened 10 months ago

yamamoto-yuta commented 10 months ago
# 必要に合わせてコメントアウトを外して記載してください

# 記事の説明文(無い場合は本文先頭200文字を使用)
#ogp_description:

# サムネイル画像のテーマ -> 'default' or 'upload'
thumbnail_theme: default

# サムネイル画像の背景画像(1280x670px推奨, なくてもOK)
#thumbnail_image_url: 

# 予約投稿の日時(無い場合は現在時刻を使用)
#posted_at: YYYY-MM-DD hh:mm

※ この記事は、私が2020/03/03に書いたメモを転記したものです。


PageRankとは?

直感的な理解

  1. Webページの中からランダムにページを1つ決める
  2. そのページに貼られているリンクからランダムにページを遷移していく
  3. ページ遷移を繰り返して、最終的にどのページを開いている確率が高いか?

計算方法

1. 各ページのリンク関係から遷移確率行列Pを作成

例えば,各ページのリンク関係が↓みたいな場合,

image.png (27.4 kB)

$P$ は↓になる

$$ P = \left( \begin{array}{ccc} 0 & 0 & 1/2 & 1/2 & 0 \ 1/2 & 0 & 0 & 1/2 & 0 \ 1/2 & 0 & 0 & 0 & 1/2 \ 1/4 & 1/4 & 1/4 & 0 & 1/4 \ 1/2 & 1/2 & 0 & 0 & 0 \end{array} \right) $$

2. 遷移確率行列の固有値と固有ベクトルを計算する

2.1. なぜ固有値と固有ベクトルを計算するのか?

$t$ 回遷移した時にページ $i$ を開いている確率を $x_{t_i}$ として,各ページでの確率をベクトル $\vec{x_t}$ を用いて次のようにまとめる.

$$ \vec{xt} = \left( \begin{array}{ccc} x{t1} & x{t2} & \cdots & x{t_i} & \cdots \end{array} \right) $$

したがって,t+1回目の遷移は次のように表せる.

$$ \vec{x_{t+1}} = \vec{x_t} P $$

このようにして何回も遷移を繰り返していくと$\vec{x_t}$は一定に収束する.つまり,

$$ \vec{x_t} = \vec{x_t} P $$

となる.

2.2. 固有値と固有ベクトルを計算する

行列 $P$ の固有値 $\lambda$ ,固有ベクト $\vec{x}$ は次のような関係にある.

$$ \vec{x} P = \lambda \vec{x} $$

したがって,固有値 $\lambda = 1$ に対応する固有ベクトルがPageRankとなる(※ PageRankは確率なので後で正規化する必要あり).

補足

↑で説明した計算方法は最もシンプルなものであり,実際にはもう少し改良がなされている.以下にその改良をいくつか挙げる.

改良1 ランダムジャンプ

↓のようなネットワークグラフだと②と④で閉ループが形成されていて,まともにPageRankが計算できない.そのため,一定確率でリンクされていないページへジャンプするようになっている.

image.png (13.7 kB)

改良2 カテゴリの概念

実際のネットサーフィンでは同じカテゴリのページ間の方が,違うカテゴリのページ間より遷移する可能性が高いと考えられる(例:サッカーのページを開いている人が次に開くページは,同じスポーツカテゴリである野球のページの方が,全く異なるカテゴリである手芸のページより可能性が高い).

参考文献