- Pojęcie macierzy kolumnowo stochastycznej.
- Struktura sieci WWW:
- Macierz Google:
$$
G_{\alpha} = \alpha\left(M + \frac1n e_A^T \cdot e\right) + \frac1n (1-\alpha)e^T\cdot e
$$
gdzie $e=(1,1\ldots,1)$ oraz $e_A=(\delta_i)_{i=1,\ldots,n}$, gdzie $\delta_i=1$ jeśli wierzchołek $i$ jest "dangling node", oraz $\delta_i=0$ w przypadku przeciwnym oraz $0 \lt \alpha\lt 1$ (Google podobno stosuje $\alpha = 0.85$).
Źródło: Deeper Inside PageRank, Amy N. Langville and Carl D. Meyer
- Tw. Niech $\lambda_1,\ldots\lambda_n$ będą wartościami własnymi macierzy $G\alpha$ uporządkowanymi tak aby $|\lambda_1| \geq |\lambda_2| \geq \ldots$. Wtedy
- $\lambda_1 = 1$ oraz $\lambda_2\leq \alpha$
- Jeśli graf na conajmniej dwie silne spójne składowe, to $\lambda_2 = \alpha$
Zródło: The Second Eigenvalue of the Google Matrix, Taher H. Haveliwala and Sepandar D. Kamvar
- PageRank: taki wektor $x = (x_1,\ldots,x_n)^T$, że $\sum_{i}x_1=1$, $(\forall i)(x_i\geq 0)$ oraz
$$
G_\alpha \circ x = x ~.
$$
- Rozpisanie wzoru na rozkład stacjonarny:
$$
x_i = \alpha \sum_{j} m_{ij}x_j + \alpha \frac{E_S}{n} + \frac{1-\alpha}{n}
$$
gdzie $E_S = \sum_{i\in S}x_i$ zaś $S$ jest zbiorem "dangling nodes".
- Metoda potęgowa wyznaczania PageRank: zaczynami od jakiegoś wektora probabilistycznego $X_0$ (np. $X_0=(\frac1n,\ldots,\frac1n)$), następnie iteracyjnie obliczmy $X_{n+1} = G_\alpha \circ X_n$.
Z tego powodu, że $\lambda_2\leq \alpha \lt 1$ jest to proces zbieżny. Na następnym wykładzie omówimy sobie jak to możemy stosunkowo efektywnie zrobić.
- Kod Mathematica do jednoczesnego wyznaczania i wyświetlania PageRank:
HLG[G_,wsp_:1.0]:= Block[{rG},
rG=PageRankCentrality[G,0.85];
HighlightGraph[G,
VertexList[G],
VertexSize-> Thread[VertexList[G]->wsp*rG],
VertexLabels->Placed["Name",Tooltip]
]
]
Przykład konstrukcji grafu:
STAR = Join[
Table[ToString[i] -> "a", {i, 0, 9}],
Table[ToString[i] -> ToString[Mod[i + 1, 10]], {i, 0, 9}]
];
- Bardzo prosty (tylko dla testów) spider:
Spider[url_, dom_, k_] := Block[{G},
IsCorrect[s_] := StringQ[s] && StringStartsQ[s, dom];
G = NestGraph[
Select[Import[#, "Hyperlinks"], IsCorrect[#] &] &, url, k
];
Subgraph[G, Select[VertexList[G], StringQ[#] &],
VertexLabels -> Placed["Name", Tooltip], DirectedEdges -> True]
]
oraz przykład jego użycia:
MGB = Spider["http://cs.pwr.edu.pl/gebala/", "http://cs.pwr.edu.pl/gebala/", 3]