exponenta event banner

Использовать алгоритм PageRank для ранжирования веб-сайтов

В этом примере показано, как использовать алгоритм PageRank для ранжирования коллекции веб-сайтов. Хотя алгоритм PageRank изначально был разработан для ранжирования результатов поисковой системы, он также может быть более широко применен к узлам во многих различных типах графов. Оценка PageRank дает представление об относительной важности каждого узла графа на основе того, как он связан с другими узлами.

Теоретически, оценка PageRank является предельной вероятностью того, что кто-то случайно щелкает ссылки на каждом веб-сайте, попадет на любую конкретную страницу. Таким образом, страницы с высоким баллом являются очень связанными и обнаруживаемыми в сети, и, скорее всего, случайный веб-серфер посетит эту страницу.

Описание алгоритма

На каждом шаге алгоритма PageRank оценка каждой страницы обновляется в соответствии с:

r = (1-P)/n + P*(A'*(r./d) + s/n);

  • r является вектором оценок PageRank.

  • P является скалярным коэффициентом демпфирования (обычно 0,85), который является вероятностью того, что случайный серфер щелкает по ссылке на текущей странице, вместо продолжения на другой случайной странице.

  • A' - транспонирование матрицы смежности графа.

  • d - вектор, содержащий степень отклонения каждого узла графа. d имеет значение 1 для узлов без исходящих краев.

  • n - скалярное число узлов в графе.

  • s - скалярная сумма оценок PageRank для страниц без ссылок.

Другими словами, ранг каждой страницы во многом основан на рангах страниц, которые на нее ссылаются. Термин A'*(r./d) выбирает оценки исходных узлов, которые связаны с каждым узлом на графике, и оценки нормализуются по общему количеству исходящих ссылок этих исходных узлов. Это гарантирует, что сумма баллов PageRank всегда 1. Например, если узел 2 связан с узлами 1, 3 и 4, то он передает 1/3 своего показателя PageRank каждому из этих узлов во время каждой итерации алгоритма.

Создайте график, иллюстрирующий, как каждый узел присваивает оценку PageRank другим узлам на графике.

s = {'a' 'a' 'a' 'b' 'b' 'c' 'd' 'd' 'd'};
t = {'b' 'c' 'd' 'd' 'a' 'b' 'c' 'a' 'b'};
G = digraph(s,t);
labels = {'a/3' 'a/3' 'a/3' 'b/2' 'b/2' 'c' 'd/3' 'd/3' 'd/3'};
p = plot(G,'Layout','layered','EdgeLabel',labels);
highlight(p,[1 1 1],[2 3 4],'EdgeColor','g')
highlight(p,[2 2],[1 4],'EdgeColor','r')
highlight(p,3,2,'EdgeColor','m')
title('PageRank Score Transfer Between Nodes')

Figure contains an axes. The axes with title PageRank Score Transfer Between Nodes contains an object of type graphplot.

centrality содержит опцию для вычисления баллов PageRank.

PageRank с 6 узлами

Создайте и постройте график, содержащий шесть узлов, представляющих фиктивные веб-сайты.

s = [1 1 2 2 3 3 3 4 5];
t = [2 5 3 4 4 5 6 1 1];
names = {'http://www.example.com/alpha', 'http://www.example.com/beta', ...
         'http://www.example.com/gamma', 'http://www.example.com/delta', ...
         'http://www.example.com/epsilon', 'http://www.example.com/zeta'};
G = digraph(s,t,[],names)
G = 
  digraph with properties:

    Edges: [9x1 table]
    Nodes: [6x1 table]

plot(G,'Layout','layered', ...
    'NodeLabel',{'alpha','beta','gamma','delta','epsilon','zeta'})

Figure contains an axes. The axes contains an object of type graphplot.

Вычислите показатель центральности PageRank для этого графика. Используйте следующую вероятность (иначе называемую коэффициентом демпфирования) 0.85.

pr = centrality(G,'pagerank','FollowProbability',0.85)
pr = 6×1

    0.3210
    0.1706
    0.1066
    0.1368
    0.2008
    0.0643

Просмотрите оценки PageRank и сведения о степенях для каждой страницы.

G.Nodes.PageRank = pr;
G.Nodes.InDegree = indegree(G);
G.Nodes.OutDegree = outdegree(G);
G.Nodes
ans=6×4 table
                   Name                   PageRank    InDegree    OutDegree
    __________________________________    ________    ________    _________

    {'http://www.example.com/alpha'  }    0.32098        2            2    
    {'http://www.example.com/beta'   }    0.17057        1            2    
    {'http://www.example.com/gamma'  }    0.10657        1            3    
    {'http://www.example.com/delta'  }    0.13678        2            1    
    {'http://www.example.com/epsilon'}    0.20078        2            1    
    {'http://www.example.com/zeta'   }    0.06432        1            0    

Результаты показывают, что не только количество ссылок на страницы определяет оценку, но и качество. alpha и gamma оба веб-сайта имеют общую степень 4, однако alpha ссылки на оба epsilon и beta, которые также высоко ранжированы. gamma связан только с одной страницей, beta, которая находится в середине списка. Таким образом, alpha оценено выше, чем gamma по алгоритму.

Ранг веб-сайтов на mathworks.com

Загрузить данные в mathworks100.mat и просмотрите матрицу смежности, A. Эти данные были сгенерированы в 2015 году с помощью автоматического обходчика страниц. Обход страницы начался в https://www.mathworks.com и следовали ссылкам на последующие web-страницы до тех пор, пока матрица смежности не содержала информацию о соединениях 100 уникальных web-страниц.

load mathworks100.mat 
spy(A)

Figure contains an axes. The axes contains an object of type line.

Создайте направленный граф с разреженной матрицей смежности, A, используя URL-адреса, содержащиеся в U в виде имен узлов.

G = digraph(A,U)
G = 
  digraph with properties:

    Edges: [632x1 table]
    Nodes: [100x1 table]

Постройте график с помощью компоновки силы.

plot(G,'NodeLabel',{},'NodeColor',[0.93 0.78 0],'Layout','force');
title('Websites linked to https://www.mathworks.com')

Figure contains an axes. The axes with title Websites linked to https://www.mathworks.com contains an object of type graphplot.

Вычислите оценки PageRank для графика, G, используя 200 итераций и коэффициент демпфирования 0.85. Добавьте оценки и сведения о степенях в таблицу узлов графика.

pr = centrality(G,'pagerank','MaxIterations',200,'FollowProbability',0.85);
G.Nodes.PageRank = pr;
G.Nodes.InDegree = indegree(G);
G.Nodes.OutDegree = outdegree(G);

Просмотрите 25 лучших итоговых баллов.

G.Nodes(1:25,:)
ans=25×4 table
                                         Name                                         PageRank    InDegree    OutDegree
    ______________________________________________________________________________    ________    ________    _________

    {'https://www.mathworks.com'                                                 }    0.044342       20          14    
    {'https://ch.mathworks.com'                                                  }    0.043085       20          14    
    {'https://cn.mathworks.com'                                                  }    0.043085       20          14    
    {'https://jp.mathworks.com'                                                  }    0.043085       20          14    
    {'https://kr.mathworks.com'                                                  }    0.043085       20          14    
    {'https://uk.mathworks.com'                                                  }    0.043085       20          14    
    {'https://au.mathworks.com'                                                  }    0.043085       20          14    
    {'https://de.mathworks.com'                                                  }    0.043085       20          14    
    {'https://es.mathworks.com'                                                  }    0.043085       20          14    
    {'https://fr.mathworks.com'                                                  }    0.043085       20          14    
    {'https://in.mathworks.com'                                                  }    0.043085       20          14    
    {'https://it.mathworks.com'                                                  }    0.043085       20          14    
    {'https://nl.mathworks.com'                                                  }    0.043085       20          14    
    {'https://se.mathworks.com'                                                  }    0.043085       20          14    
    {'https://www.mathworks.com/index.html%3Fnocookie%3Dtrue'                    }      0.0015        0           1    
    {'https://www.mathworks.com/company/aboutus/policies_statements/patents.html'}    0.007714        6           6    
      ⋮

Извлеките и постройте подграф, содержащий все узлы, оценка которых больше 0.005. Раскрасьте узлы графика на основе их показателя PageRank.

H = subgraph(G,find(G.Nodes.PageRank > 0.005));
plot(H,'NodeLabel',{},'NodeCData',H.Nodes.PageRank,'Layout','force');
title('Websites linked to https://www.mathworks.com')
colorbar

Figure contains an axes. The axes with title Websites linked to https://www.mathworks.com contains an object of type graphplot.

Оценки PageRank для лучших веб-сайтов очень похожи, так что случайный веб-серфер имеет около 4,5% шансов приземлиться на каждой странице. Эта небольшая группа сильно связанных страниц образует клику в центре сюжета. С этой центральной кликой связаны несколько более мелких клик, которые сильно связаны между собой.

Ссылки

Молер, С. Эксперименты с MATLAB. Глава 7: Google PageRank. MathWorks, Inc., 2011.

См. также

| |