centrality

Измерьте важность узла

Описание

пример

C = centrality(G,type) вычисляет центральность узла, заданную как type для каждого узла в графике.

пример

C = centrality(___,Name,Value) использует дополнительные опции, заданные одним или несколькими аргументами пары "имя-значение". Для примера, centrality(G,'closeness','Cost',c) определяет стоимость обхода каждого ребра.

Примеры

свернуть все

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

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);
plot(G,'NodeLabel',{'alpha','beta','gamma','delta','epsilon','zeta'})

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

Вычислим ранг страниц каждого сайта используя centrality функция. Добавьте эту информацию к Nodes таблица графика как атрибут узлов графика.

pg_ranks = centrality(G,'pagerank')
pg_ranks = 6×1

    0.3210
    0.1706
    0.1066
    0.1368
    0.2008
    0.0643

G.Nodes.PageRank = pg_ranks;
G.Nodes
ans=6×2 table
                   Name                   PageRank
    __________________________________    ________

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

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

hub_ranks = centrality(G,'hubs');
auth_ranks = centrality(G,'authorities');
G.Nodes.Hubs = hub_ranks;
G.Nodes.Authorities = auth_ranks;
G.Nodes
ans=6×4 table
                   Name                   PageRank       Hubs       Authorities
    __________________________________    ________    __________    ___________

    {'http://www.example.com/alpha'  }    0.32098        0.24995    7.3237e-05 
    {'http://www.example.com/beta'   }    0.17057        0.24995      0.099993 
    {'http://www.example.com/gamma'  }    0.10657        0.49991      0.099993 
    {'http://www.example.com/delta'  }    0.13678     9.1536e-05       0.29998 
    {'http://www.example.com/epsilon'}    0.20078     9.1536e-05       0.29998 
    {'http://www.example.com/zeta'   }    0.06432              0       0.19999 

Создайте и постройте график взвешенности, используя случайную разреженную матрицу смежности. Поскольку ребер очень много, используйте очень маленькое значение для EdgeAlpha чтобы сделать ребра в основном прозрачными.

A = sprand(1000,1000,0.15);
A = A + A';
G = graph(A,'omitselfloops');
p = plot(G,'Layout','force','EdgeAlpha',0.005,'NodeColor','r');

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

Вычислим степень центр каждого узла. Укажите важность каждого ребра, используя веса ребер.

deg_ranks = centrality(G,'degree','Importance',G.Edges.Weight);

Использование discretize поместить узлы в 7 интервалов с равными интервалами на основе их центральных счетов.

edges = linspace(min(deg_ranks),max(deg_ranks),7);
bins = discretize(deg_ranks,edges);

Сделайте размер каждого узла на графике пропорциональным его счету центральности. Размер маркера каждого узла равен числу интервала (1-7).

p.MarkerSize = bins;

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

Загрузите данные в minnesota.mat, который содержит график G представляет сеть дорог в Миннесоте. Узлы графика имеют координаты xy, содержащиеся в XCoord и YCoord переменные G.Nodes таблица.

load minnesota.mat
xy = [G.Nodes.XCoord G.Nodes.YCoord];

Добавьте к графику веса ребер, которые примерно соответствуют длине дорог, рассчитанные с помощью евклидова расстояния между координатами xy конечных узлов каждого ребра.

[s,t] = findedge(G);
G.Edges.Weight = hypot(xy(s,1)-xy(t,1), xy(s,2)-xy(t,2));

Постройте график с помощью координат xy для узлов.

p = plot(G,'XData',xy(:,1),'YData',xy(:,2),'MarkerSize',5);
title('Minnesota Road Network')

Figure contains an axes. The axes with title Minnesota Road Network contains an object of type graphplot.

Вычислите центр близости каждого узла. Масштабируйте цвет узла NodeCData быть пропорциональным счетом централизации.

ucc = centrality(G,'closeness');
p.NodeCData = ucc;
colormap jet
colorbar
title('Closeness Centrality Scores - Unweighted')

Figure contains an axes. The axes with title Closeness Centrality Scores - Unweighted contains an object of type graphplot.

Также вычислите взвешенный счет центральности близости, используя веса кромок в качестве затрат на прохождение каждого ребра. Использование длин дорог в качестве весов кромок улучшает качество счета, поскольку теперь расстояния измеряются как сумма длин всех пройденных ребер, а не как количество пройденных ребер.

wcc = centrality(G,'closeness','Cost',G.Edges.Weight);
p.NodeCData = wcc;
title('Closeness Centrality Scores - Weighted')

Figure contains an axes. The axes with title Closeness Centrality Scores - Weighted contains an object of type graphplot.

Вычислите взвешенные счета центральности по бетвенскости для графика, чтобы определить дороги, наиболее часто встречающиеся на самом коротком пути между двумя узлами. Нормализуйте центральность, счета с фактором (n-2)(n-1)2 таким образом, счет представляет вероятность того, что путешественник по кратчайшему пути между двумя случайными узлами пройдет через заданный узел. Этот график показывает, что есть несколько очень важных дорог, ведущих в город и из него.

wbc = centrality(G,'betweenness','Cost',G.Edges.Weight);
n = numnodes(G);
p.NodeCData = 2*wbc./((n-2)*(n-1));
colormap(flip(autumn,1));
title('Betweenness Centrality Scores - Weighted')

Figure contains an axes. The axes with title Betweenness Centrality Scores - Weighted contains an object of type graphplot.

Входные параметры

свернуть все

Входной график, заданный как graph или digraph объект. Использование graph для создания неориентированного графа или digraph для создания ориентированного графа.

Пример: G = graph(1,2)

Пример: G = digraph([1 2],[2 3])

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

Опция

Тип графика

Описание

Пары "имя-значение"

'degree'

Ненаправленный

The 'degree', 'outdegree', и 'indegree' типы централизации основаны на количестве ребер, соединяющихся с каждым узлом:

  • 'degree' - Количество ребер, соединяющихся с каждым узлом. Цикл «self-loop» отсчитывается как два ребер, соединяющиеся с узлом.

  • 'indegree' - Количество входящих ребер на каждый узел. Цикл «self-loop» учитывается как один входящее ребро.

  • 'outdegree' - Количество исходящих ребер из каждого узла. Цикл self-loop отсчитывается как одно исходящее ребро.

Если вы задаете 'Importance' веса кромок, тогда алгоритм использует сумму весов кромок, а не количество соединяющих ребер.

'Importance'

'indegree'

'outdegree'

Направленный

'closeness'

Ненаправленный

The 'closeness', 'incloseness', и 'outcloseness' типы центральности используют обратную сумму расстояния от узла до всех других узлов в графике. Если не все узлы достижимы, то центральность узлов i является:

c(i)=(AiN1)21Ci.

A i - количество доступных узлов из узла i (не считая i), N является числом узлов в G, и C i - сумма расстояний от узла i ко всем доступным узлам.

  • Если ни одни узлы не доступны из узла i, затем c(i) равен нулю.

  • Для 'incloseness', измерение расстояния от всех узлов до узла i.

  • 'Cost' веса кромок определяют длину ребер.

'Cost'

'incloseness'

'outcloseness'

Направленный

'betweenness'

Неориентированные или ориентированные

The 'betweenness' тип центральности измеряет, как часто каждый узел графика появляется на кратчайшем пути между двумя узлами в графике. Поскольку между двумя узлами графика может быть несколько кратчайших путей s и t, центральность узлов u является:

c(u)=s,tunst(u)Nst.

nst(u) - количество самых коротких путей из s на t которые проходят через узел u, и Nst - общее количество кратчайших путей из s на t.

  • Если график неориентирован, то пути из s на t и от t на s отсчитывайте только как один путь (разделите формулу на два).

  • 'Cost' веса кромок определяют длину ребер и помогают определить кратчайшие пути между узлами s и t.

'Cost'

'pagerank'

Неориентированные или ориентированные

The 'pagerank' тип централизованности является результатом случайной прогулки по сети. В каждом узле графика следующий узел выбирается с вероятностью 'FollowProbability' из набора преемников текущего узла (соседи для неориентированного случая). В противном случае, или когда у узла нет преемников, следующий узел выбирается из всех узлов. Центральным счетом является среднее время, проведенное в каждом узле во время случайной прогулки.

  • Если у узла есть самоцикл, то есть вероятность, что алгоритм пройдёт его. Поэтому самоциклы увеличьте центральность pagerank счета узла, к которому они присоединяются.

  • В мультиграфиках с несколькими ребрами между этими же двумя узлами с большей вероятностью будут выбраны узлы с несколькими ребрами.

  • 'Importance' веса кромок влияют на то, как алгоритм выбирает преемников. Узлы с более высокой важностью с большей вероятностью будут выбраны.

'Importance'

'FollowProbability'

'Tolerance'

'MaxIterations'

'eigenvector'

Ненаправленный

The 'eigenvector' тип центральности использует собственный вектор, соответствующий наибольшему собственному значению матрицы смежности графика. Счета нормированы таким образом, что сумма всех счетов центральности равна 1.

  • Если существует несколько отключенных компонентов, то алгоритм вычисляет центральность собственного вектора индивидуально для каждого компонента, затем масштабирует счета согласно проценту графиков в этом компоненте.

  • Центральный счет отключенных узлов 1/numnodes(G).

  • Задайте 'Importance' веса кромок для использования взвешенной матрицы смежности в вычислении.

'Importance'

'Tolerance'

'MaxIterations'

'hubs'

'authorities'

Направленный

The 'hubs' и 'authorities' Счета центральности являются двумя связанными показателями центральности, которые являются рекурсивными. Счет концентраторов узла - это сумма полномочий, набранных всеми его преемниками. Точно так же, счет властей - это сумма концентраторов, набранных всеми его предшественниками. Сумма всех счетов концентраторов равна 1, а сумма всех счетов полномочий равна 1.

  • Эти счета могут быть интерпретированы как левый (концентраторы) и правый (власти) сингулярные векторы, соответствующие наибольшему сингулярному значению матрицы смежности.

  • Центральный счет отключенных узлов 1/numnodes(G).

  • Задайте 'Importance' веса кромок для использования взвешенной суммы, а не простой суммы всех счетов преемника/предшественника. Это эквивалентно использованию сингулярных векторов взвешенной матрицы смежности.

  • Если отключенных компонентов несколько (в слабо связанном смысле), то алгоритм вычисляет концентраторы, и полномочия оценивают индивидуально для каждого компонента. Счета затем пересчитываются согласно проценту графиков в этом компоненте, так что общая сумма все еще равна 1.

'Importance'

'Tolerance'

'MaxIterations'

Примечание

centrality функция принимает, что все веса ребер равны 1. Чтобы изменить это, задайте веса кромок для использования с 'Cost' или 'Importance' Пары "имя-значение".

Пример: centrality(G,'degree')

Пример: centrality(G,'hubs','Tolerance',tol)

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: C = centrality(G,'closeness','Cost',edgeCosts) вычисляет центральность близости с помощью edgeCosts как стоимость (вес) прохождения каждого ребра в графике.

Стоимость обхода ребра, заданная как разделенная разделенными запятой парами, состоящая из 'Cost' и вектор положительных весов ребер. i-й веса ребра определяет стоимость, связанную с прохождением ребра findedge(G,i). Все веса кромок должны быть больше нуля.

'Cost' веса кромок меньше, когда соединение короче, или быстрее, или дешевле. Некоторые примеры 'Cost' веса кромок:

  • Длина пути

  • Время в пути

  • Стоимость билета

Примечание

'Cost' применяется только к 'closeness', 'outcloseness', 'incloseness', и 'betweenness' типы централизации.

Пример: centrality(G,'closeness','Cost',c)

Вероятность выбора узла, заданная как разделенная разделенными запятой парами, состоящая из 'FollowProbability' и скаляром от 0 до 1. Вероятность следования является вероятностью того, что следующий узел, выбранный в обходе алгоритмом pagerank, выбран среди преемников текущего узла, а не наугад из всех узлов. Для веб-сайтов эта вероятность соответствует нажатию по ссылке на текущей веб-странице вместо серфинга на другую случайную веб-страницу.

Примечание

'FollowProbability' применяется только к 'pagerank' тип централизации.

Пример: centrality(G,'pagerank','FollowProbability',0.5)

Важность ребра, заданная как разделенная разделенными запятой парами, состоящая из 'Importance' и вектор неотрицательных весов ребер. i-й веса ребра определяет важность ребра findedge(G,i). Вес края нуля эквивалентен удалению края из графика.

Для мультиграфиков с несколькими ребрами между двумя узлами, centrality складывает несколько ребер вместе и обрабатывает их как одно ребро с общим весом.

'Importance' веса кромок больше, когда соединение сильнее. Некоторые примеры 'Importance' веса кромок:

  • Количество путешественников в день

  • Количество нажатий кнопки по ссылке

  • Количество статей, опубликованных вместе

Примечание

'Importance' применяется только к 'degree', 'outdegree', 'indegree', 'pagerank', 'eigenvector', 'hubs', и 'authorities' типы централизации.

Пример: centrality(G,'degree','Importance',x)

Максимальное количество итераций, заданное как разделенная разделенными запятой парами, состоящая из 'MaxIterations' и скаляром. centrality алгоритм запускается до тех пор, пока не будет достигнут допуск или не будет достигнуто максимальное количество итераций, в зависимости от того, что наступит раньше.

Примечание

'MaxIterations' применяется только к 'pagerank', 'eigenvector', 'hubs', и 'authorities' типы централизации.

Пример: centrality(G,'pagerank','MaxIterations',250)

Критерий остановки для итерационных решателей, заданный как разделенная разделенными запятой парами, состоящая из 'Tolerance' и скаляром. centrality алгоритм запускается до тех пор, пока не будет достигнут допуск или не будет достигнуто максимальное количество итераций, в зависимости от того, что наступит раньше.

Примечание

'Tolerance' применяется только к 'pagerank', 'eigenvector', 'hubs', и 'authorities' типы централизации.

Пример: centrality(G,'pagerank','Tolerance',1e-5)

Выходные аргументы

свернуть все

Центральность узла счетов, возвращается как вектор-столбец. C(i) - счет централизации узла i. Интерпретация счета централизованности узла зависит от типа выбранных расчетов централизованности. Чем больше центрального узла, тем больше его центральность счет.

См. также

|

Введенный в R2016a