Metody numeryczne Wydział Elektroniki, Telekomunikacji i

Transkrypt

Metody numeryczne Wydział Elektroniki, Telekomunikacji i
Metody numeryczne
Wydział Elektroniki, Telekomunikacji i Informatyki
Politechnika Gdańska
Projekt nr 2: Zastosowanie eliminacji Gaussa do wyznaczania rankingu stron WWW.
Cel projektu
Celem projektu jest implementacja kodu służącego do rozwiązywania układów równań liniowych
opartego na eliminacji Gaussa (lub faktoryzacji LU), a następnie jego zastosowanie do wyznaczania
rankingu stron WWW za pomocą algorytmu PageRank stosowanego przez wyszukiwarkę Google.
Specyfikacja projektu
Pierwszy moduł programu powinien implementować metodę eliminacji Gaussa lub faktoryzację LU
z częściowym lub całkowitym wyborem elementu podstawowego dla zadanej macierzy kwadratowej
A o rozmiarze N , w celu wyznaczenia rozwiązania układu równań liniowych Ax = b, gdzie b jest
zadanym wektorem prawej strony o rozmiarze n.
Kolejny moduł programu powinien wczytywać z pliku tekstowego topologię grafu określającego linki
pomiędzy stronami WWW. Przykładowe grafy rzeczywistych podsieci WWW należy pobrać z strony
http://snap.stanford.edu/data/index.html. Program powinien wczytywać pliki tekstowe w
formacie stosowanym na stronie snap.stanford.edu.
Korzystając z wczytanych informacji o grafie kolejny moduł programu powinien konstruować macierz sąsiedztwa dla grafu (wzór (7)), a następnie generować macierz układu równań (10) wraz z
odpowiednim wektorem prawej strony (w).
Program powinien wywoływać algorytm eliminacji Gaussa w celu wyznaczenia wektora R, a następnie wyświetlać obliczony ranking stron WWW.
Testowanie programu
W pierwszej kolejności należy przetestować poprawność implementacji metody eliminacji Gaussa
(faktoryzacji LU) dla wybranych przez siebie macierzy symetrycznych i niesymetrycznych. Podczas
testowania należy uwzględnić macierze, które wymagają zastosowania wyboru elementu podstawowego podczas eliminacji (faktoryzacji).
Następnie należy przetestować wyznaczanie rankingu stron WWW dla możliwie małych podsieci,
w tym przykładu grafu na końcu tej instrukcji. Małe grafy można uzyskać wycinając fragmenty
z plików tekstowych znajdujących się na stronie snap.stanford.edu. Program warto przetestować
zarówno dla grafów skierowanych, jak i nieskierowanych.
Algorytm PageRank
W roku 1998 Siergiej Brin i Larry Page opublikowali artykuł ([1]), w którym przedstawili algorytm
do analizy linków o nazwie PageRank. Wkrótce potem Page i Brin założyli Google Inc. – firmę
oferującą internautom nową wyszukiwarkę, której sercem był PageRank, określający które z stron
internetowych spełniających kryteria wprowadzone przez użytkownika mają zostać wyświetlone jako
wyniki wyszukiwania. Algorytm PageRank przypisuję wartość numeryczną każdemu z elementów z
zbioru stron WWW połączonych hiperlinkami, określającą względną ważność danej strony pośród
innych stron. Z matematycznego punktu widzenia, owa waga (czy ranking) przypisana danej stronie
jest prawdopodobieństwem, że internauta który przypadkowo klika na hiperlinki ostatecznie trafi
na tę stronę.
Główna idea algorytmu polega na tym, że wartość PageRank dla danej strony WWW jest określona
przez wartości PageRank wszystkich stron, które na nią wskazują (tj. posiadają do niej hiperlinki).
1
Załóżmy przykładowo, że cała sieć składa się z czterech stron o nazwach A, B, C i D. Niech strona
B ma link do strony A i strony C, strona C ma link do strony A, i strona D posiada linki do stron
A, B i C (por. Rys. 1). W najprostszej wersji PageRank (PR) dla strony A oblicza sie następująco:
P R(A) =
P R(B) P R(C) P R(D)
+
+
,
2
1
3
(1)
tj. ranking strony A równa się sumie rankingów wszystkich stron, które posiadają linki do strony
A, z tym że każdy z tych rankingów jest podzielony przez całkowitą liczbę linków wychodzących z
każdej strony, która równa się 2 dla strony B, 1 – dla strony C i 3 dla strony D.
Rysunek 1: Graf dla zbioru stron WWW połączonych hiperlinkami.
W ogólności wartość PageRank dla strony u oblicza się z wzoru:
P R(u) =
X
v∈Bu
P R(v)
L(v)
(2)
gdzie Bu jest zbiorem wszystkich stron, które posiadają linki do strony u i L(v) jest całkowitą liczbą
linków wychodzących z strony v.
Powyższy prosty wzór oblicza prawdopodobieństwo trafienia na daną stronę WWW, przy założeniu,
że internauta w sposób przypadkowy klika na linki nieskończoną liczbę razy. Jednakże, w rzeczywistości każdy internauta ostatecznie kończy klikanie po pewnej skończonej liczbie kroków. By wziąć
pod uwagę ten efekt do równania (2) wprowadzono współczynnik tłumienia d. Współczynnik ten
określa prawdopodobieństwo, że w danej chwili internauta wykona następne kliknięcie. Badania
wskazują, że ów współczynnik wynosić powinien ok. 0.85. Jeśli uwzględnimy tłumienie, wzór(2)
ulega następującej zmianie:


X P R(pj )
1−d

+d·
P R(pi ) =
N
L(p
)
j
pj ∈M (pi )
(3)
gdzie N jest całkowitą liczbą wszystkich stron WWW. Uwaga: Jeśli jakaś strona p nie posiada
żadnych linków wychodzących, zakładamy, że strona ta posiada linki do wszystkich innych stron.
Oznacza to, że jeśli internauta trafi na stronę nie posiadającą linków wychodzących, wówczas wybiera on jako następną dowolną stronę WWW, wchodzi na tę stronę i kontynuuje klikanie.
Sformułowanie problemu w postaci układu równań liniowych
Zbiór równań (3) dla wszystkich stron może zostać zapisany w postaci macierzowej:



R=


(1 − d)/N
(1 − d)/N
..
.
(1 − d)/N






+d·




l(p1 , p2 ) · · · l(p1 , pN )
l(p2 , p2 ) · · · l(p2 , pN )
..
..
..
.
.
.
l(pN , p1 ) l(pN , p2 ) · · · l(pN , pN )
l(p1 , p1 )
l(p2 , p1 )
..
.
2



·R


(4)
gdzie R = [P R(p1 ), P R(p2 ), . . . , P R(pN )]T jest wektorem zawierającym wartości PageRank dla
wszystkich stron w sieci.
(
l(pi , pj ) =
1/L(pj ) jeli pj ma link do pi
0
w przeciwnym przypadku
(5)
Macierz L = [l(pi , pj )] po prawej stronie równania (4) może być interpretowana jako przeskalowana
macierz sąsiedztwa dla grafu połączeń między stronami WWW, tj.
L=B·Λ
(6)
gdzie B jest macierzą sąsiedztwa:



B=


b(p1 , p2 ) · · · b(p1 , pN )
b(p2 , p2 ) · · · b(p2 , pN )
..
..
..
.
.
.
b(pN , p1 ) b(pN , p2 ) · · · b(pN , pN )
b(p1 , p1 )
b(p2 , p1 )
..
.






(7)
gdzie
(
b(pi , pj ) =
1 jeli pj ma link do pi
0 w przeciwnym przypadku
(8)
oraz Λ jest macierzą diagonalną, z elementami na głównej przekątnej równymi odwrotnościom liczby
linków wychodzących z poszczególnych stron:



Λ=


1/L(p1 )
0
···
0
0
1/L(p2 ) · · ·
0
..
..
..
..
.
.
.
.
0
0
· · · 1/L(pN )






(9)
Stosując powyższe macierze wzór (4) można przekształcić do postaci układu równań liniowych:
(I − dBΛ) R = w
(10)
gdzie I jest macierzą jednostkową o rozmiarze N , a w jest wektorem kolumnowym o rozmiarze N :
w = [(1 − d)/N, (1 − d)/N, . . . , (1 − d)/N ]T
(11)
Niewiadomy wektor R (zawierający ranking stron WWW) można wyznaczyć rozwiązując powyższy
układ równań za pomocą eliminacji Gaussa (ew. faktoryzacji LU).
Uwaga: Jeśli jakaś strona p nie posiada żadnych linków wychodzących, wóczas L(p) = 0 i w macierzy
Λ pojawi się dzielenie przez 0. W celu uniknięcia tego problemu program powinien modyfikować
macierz sąsiedztwa tak by odpowiadała ona grafowi, w którym strona p posiada linki wychodzące
do wszystkich pozostałych stron (z wyjątkiem samej siebie).
Przykład grafu skierowanego:
1
6
2
2
5
3
4
->
->
->
->
->
->
->
6
1
6
5
2
5
5
3
5 -> 6
7 -> 5
8 -> 5
7 -> 6
8 -> 6
9 -> 5
9 -> 6
10 -> 6
10 -> 11
Bibliografia:
1. S. Brin, L. Page, “The Anatomy of a Large-Scale Hypertextual Web Search Engine,” in Proceedings of the 7th international conference on World Wide Web (WWW), Brisbane, Australia,
pp. 107-117, 1998.
2. Wikipedia - PageRank, http://en.wikipedia.org/wiki/Page_rank.
4

Podobne dokumenty