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