Этот пример показывает, как использовать алгоритм 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')
Функция centrality
содержит опцию для вычисления очков PageRank.
Создайте и постройте график ориентированного графа, содержащего шесть узлов, представляющих фиктивные веб-сайты.
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'})
Вычислите счет центрированности 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
алгоритмом.
Загрузите данные в mathworks100.mat
и просмотрите матрицу смежности, A
. Это данные было сгенерировано в 2 015 использованиях автоматического поискового робота страницы. Поисковый робот страницы начался в https://www.mathworks.com
и перешел по ссылкам к последующим веб-страницам, пока матрица смежности не содержала информацию о связях 100 уникальных веб-страниц.
load mathworks100.mat
spy(A)
Создайте ориентированного графа с разреженной матрицей смежности, A
, с помощью URLs, содержавшихся в 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')
Вычислите музыку 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
Музыка PageRank к главным веб-сайтам все весьма схожа, такова, что у случайного интернет-пользователя есть приблизительно шанс на 4,5% приземлиться на каждой странице. Эта небольшая группа очень связанных страниц формирует клику в центре графика. Соединенный с этой центральной кликой несколько меньших клик, которые высоко соединяются среди себя.
Moler, C. Эксперименты с MATLAB. Глава 7: Google PageRank. MathWorks, Inc., 2011.