Gitlab inline math delimiter fixed

master
Vladimir Protsenko 3 years ago
parent 3a8beabf6a
commit b3724d5d93

@ -54,18 +54,18 @@
Необходимой представляющей интерес информацией, например, могут быть следующие параметры. Необходимой представляющей интерес информацией, например, могут быть следующие параметры.
Общее количество «твиттов» $𝐾_j$ для каждой $L$ локации (географической зоны): Общее количество «твиттов» $`𝐾_j`$ для каждой $`L`$ локации (географической зоны):
```math ```math
K_j = \sum_i (k_i \in L), K_j = \sum_i (k_i \in L),
``` ```
где $𝑘_j$ каждый следующий твитт из обрабатываемого потока. где $`𝑘_j`$ каждый следующий твитт из обрабатываемого потока.
Частота употребления $Count(w)$ каждого уникального слова 𝑤 определяется из общего множества $S$ текстовых данных: Частота употребления $`Count(w)`$ каждого уникального слова 𝑤 определяется из общего множества $`S`$ текстовых данных:
```math ```math
Count(w) = \sum_i(w_i \in S). Count(w) = \sum_i(w_i \in S).
``` ```
Настроение каждого твитта $sp(w, d)$ определяется из словаря $d$, в котором прописано настроение (отношение): Настроение каждого твитта $`sp(w, d)`$ определяется из словаря $`d`$, в котором прописано настроение (отношение):
```math ```math
sp(w, d) = \begin{cases} sp(w, d) = \begin{cases}
0, &\text{если w имеет негативный окрас}, \\ 0, &\text{если w имеет негативный окрас}, \\
@ -76,4 +76,4 @@ sp(w, d) = \begin{cases}
Ряд рекомендаций по сбору и обработке данных приводится в лабораторной работе 1 (в конце данного учебного пособия). Ряд рекомендаций по сбору и обработке данных приводится в лабораторной работе 1 (в конце данного учебного пособия).
[назад](README.md) [назад](README.md)

@ -10,13 +10,13 @@
K-means это один из наиболее распространённых алгоритмов кластеризации, который относится к неиерархическим итеративным алгоритмам. K-means это один из наиболее распространённых алгоритмов кластеризации, который относится к неиерархическим итеративным алгоритмам.
Алгоритм k-средних строит $k$ кластеров, расположенных на возможно больших расстояниях друг от друга. Основной тип задач, которые решает алгоритм k-средних наличие предположений (гипотез) относительно числа кластеров, при этом они должны быть различны настолько, насколько это возможно. Выбор числа $k$ может Алгоритм k-средних строит $`k`$ кластеров, расположенных на возможно больших расстояниях друг от друга. Основной тип задач, которые решает алгоритм k-средних наличие предположений (гипотез) относительно числа кластеров, при этом они должны быть различны настолько, насколько это возможно. Выбор числа $`k`$ может
базироваться на результатах предшествующих исследований, теоретических соображениях или интуиции. базироваться на результатах предшествующих исследований, теоретических соображениях или интуиции.
Общая идея алгоритма: заданное фиксированное число k кластеров наблюдения сопоставляются кластерам так, что средние в кластере (для всех переменных) максимально возможно Общая идея алгоритма: заданное фиксированное число k кластеров наблюдения сопоставляются кластерам так, что средние в кластере (для всех переменных) максимально возможно
отличаются друг от друга. отличаются друг от друга.
Первоначальное распределение объектов по кластерам происходит следующим образом. Выбирается число $k$, и на первом шаге эти точки считаются "центрами" кластеров. Каждому кластеру Первоначальное распределение объектов по кластерам происходит следующим образом. Выбирается число $`k`$, и на первом шаге эти точки считаются "центрами" кластеров. Каждому кластеру
соответствует один центр. Этот выбор часто может осуществляется согласно такой логике: соответствует один центр. Этот выбор часто может осуществляется согласно такой логике:
- выбор k-наблюдений для максимизации начального расстояния; - выбор k-наблюдений для максимизации начального расстояния;
- случайный выбор k-наблюдений; - случайный выбор k-наблюдений;
@ -29,15 +29,15 @@ K-means это один из наиболее распространённы
- кластерные центры стабилизировались, т.е. все наблюдения принадлежат кластеру, которому принадлежали до текущей итерации; - кластерные центры стабилизировались, т.е. все наблюдения принадлежат кластеру, которому принадлежали до текущей итерации;
- число итераций равно максимальному числу итераций. - число итераций равно максимальному числу итераций.
Другими словами, в k-means, каждый из $k$ кластеров представлен одной точкой в пространстве. Обозначим этот набор представителей кластера как множество $С=\{c_j | j=1,\ldots,k\}$. Эти представители k кластеров также называются состояние кластера или центройды кластера. В алгоритмах кластеризации точки группируются некоторым понятием «близости» или «подобия». В k-means мера близости по умолчанию Евклидово расстояние. В частности можно показать, что k-means пытается минимизировать следующую неотрицательную функцию стоимости. Другими словами, в k-means, каждый из $`k`$ кластеров представлен одной точкой в пространстве. Обозначим этот набор представителей кластера как множество $`С=\{c_j | j=1,\ldots,k\}`$. Эти представители k кластеров также называются состояние кластера или центройды кластера. В алгоритмах кластеризации точки группируются некоторым понятием «близости» или «подобия». В k-means мера близости по умолчанию Евклидово расстояние. В частности можно показать, что k-means пытается минимизировать следующую неотрицательную функцию стоимости.
```math ```math
Cost = \sum_{i=1}^N ( \argmin_j \| x_i - c_j \|_2^2 ). Cost = \sum_{i=1}^N ( \argmin_j \| x_i - c_j \|_2^2 ).
``` ```
Таким образом, алгоритм k-means минимизирует итоговый квадрат Евклидова расстояния между каждой точкой $x_i$ и ее самым близким представителем кластера $c_j$. Приведенное выше часто упоминается как целевая функция k-means. Таким образом, алгоритм k-means минимизирует итоговый квадрат Евклидова расстояния между каждой точкой $`x_i`$ и ее самым близким представителем кластера $`c_j`$. Приведенное выше часто упоминается как целевая функция k-means.
Алгоритм сходится, когда значения $c_j$. больше не изменяются. Алгоритм сходится, когда значения $`c_j`$. больше не изменяются.
Алгоритм k-means достаточно прост и удобен, однако у него имеются два недостатка: Алгоритм k-means достаточно прост и удобен, однако у него имеются два недостатка:
- алгоритм слишком чувствителен к выбросам, которые могут искажать среднее. Возможным решением этой проблемы является использование модификации алгоритма алгоритм k-медианы; - алгоритм слишком чувствителен к выбросам, которые могут искажать среднее. Возможным решением этой проблемы является использование модификации алгоритма алгоритм k-медианы;
@ -66,7 +66,7 @@ IDF (inverse document frequency обратная частота докуме
```math ```math
idf(t, D) = \log \frac{|D|}{|(d_i \ni t_i)|}, idf(t, D) = \log \frac{|D|}{|(d_i \ni t_i)|},
``` ```
где $|D|$ количество документов в корпусе; $|(d_i \ni t_i)|$ количество документов, в которых встречается $t_i$ (когда $𝑛_i \neq 0$). где $`|D|`$ количество документов в корпусе; $`|(d_i \ni t_i)|`$ количество документов, в которых встречается $`t_i`$ (когда $`𝑛_i \neq 0`$).
Выбор основания логарифма в формуле не имеет значения, поскольку изменение основания приводит к изменению веса каждого слова на постоянный множитель, что не влияет на соотношение весов. Выбор основания логарифма в формуле не имеет значения, поскольку изменение основания приводит к изменению веса каждого слова на постоянный множитель, что не влияет на соотношение весов.
@ -95,21 +95,21 @@ LDA алгоритм, в свою очередь, основан на опред
Модель будет генерировать новый документ исходя из следующих действий: Модель будет генерировать новый документ исходя из следующих действий:
- выбор длины документа N; - выбор длины документа N;
- выбор вектора $\theta \thicksim (\alpha)$ вектора «степени выраженности» - выбор вектора $`\theta \thicksim (\alpha)`$ вектора «степени выраженности»
каждой темы в этом документе. каждой темы в этом документе.
Для каждого из N слов w: Для каждого из N слов w:
- выбор темы $z_n$ по распределению $Mult(\theta)$ ; - выбор темы $`z_n`$ по распределению $`Mult(\theta)`$ ;
- выбор слова $w_n \thicksim p(w_n | z_n, \beta)$ с вероятностями, заданными - выбор слова $`w_n \thicksim p(w_n | z_n, \beta)`$ с вероятностями, заданными
в $\beta$. в $`\beta`$.
Для простоты фиксируем число тем k и будем считать, что $\beta$ это набор параметров $\beta_{ij} = p(w^j = 1 | z^i = 1)$, которые нужно оценить, при этом явно не обозначая распределение по $N$. Совместное распределение выглядит следующим образом Для простоты фиксируем число тем k и будем считать, что $`\beta`$ это набор параметров $`\beta_{ij} = p(w^j = 1 | z^i = 1)`$, которые нужно оценить, при этом явно не обозначая распределение по $`N`$. Совместное распределение выглядит следующим образом
```math ```math
p(\theta,\ldots,N | \alpha, \beta) = p(N| \zeta) p (\theta | \alpha) \prod_{n=1}^N p(z_n|\theta)p(w_n|z_n,\beta). p(\theta,\ldots,N | \alpha, \beta) = p(N| \zeta) p (\theta | \alpha) \prod_{n=1}^N p(z_n|\theta)p(w_n|z_n,\beta).
``` ```
В отличие от обычной кластеризации с априорным распределением Дирихле или обычным распределением Байеса, мы не выбираем кластер один раз, а затем подбираем слова из этого кластера, а для каждого слова сначала выбираем по распределению $\theta$ тему, а уже потом определяем слово по этой теме. В отличие от обычной кластеризации с априорным распределением Дирихле или обычным распределением Байеса, мы не выбираем кластер один раз, а затем подбираем слова из этого кластера, а для каждого слова сначала выбираем по распределению $`\theta`$ тему, а уже потом определяем слово по этой теме.
### Машинное обучение ### Машинное обучение
@ -132,18 +132,18 @@ p(\theta,\ldots,N | \alpha, \beta) = p(N| \zeta) p (\theta | \alpha) \prod_{n=1
Словарь формируется при участии эксперта, который обучает систему, а также имеет возможность вносить изменения в словарь с целью его уточнения. Словарь формируется при участии эксперта, который обучает систему, а также имеет возможность вносить изменения в словарь с целью его уточнения.
Вторая часть системы классифицирует текст основываясь на имеющимся словаре. Другими словами каждое слово из текста $T = t_1 t_2 \ldots t_n$ сопоставляется со словарем $U = u_1 u_2 \ldots u_m$ с целью получения списка категорий: Вторая часть системы классифицирует текст основываясь на имеющимся словаре. Другими словами каждое слово из текста $`T = t_1 t_2 \ldots t_n`$ сопоставляется со словарем $`U = u_1 u_2 \ldots u_m`$ с целью получения списка категорий:
```math ```math
\delta(u_i) = \{ \underbrace{k_j \ldots k_h}_z \}, \delta(u_i) = \{ \underbrace{k_j \ldots k_h}_z \},
``` ```
где $\delta(u_i)$ функция извлечения категорий слова $u_i$ из словаря; $\{ k_j \ldots k_h \}$ вектор из $z$ элементов $k$ (элемент списка категорий $K = k_1 k_2 \ldots k_L$ ), к которым принадлежит слово $u_i$ ; $1 \leq j,h,z \leq L$. где $`\delta(u_i)`$ функция извлечения категорий слова $`u_i`$ из словаря; $`\{ k_j \ldots k_h \}`$ вектор из $`z`$ элементов $`k`$ (элемент списка категорий $`K = k_1 k_2 \ldots k_L`$ ), к которым принадлежит слово $`u_i`$ ; $`1 \leq j,h,z \leq L`$.
Если $\gamma(t_i) = u_j$, где $\gamma(t_i)$ функция стемминга текста $t_i$, то $\delta(t_i) = \delta(u_j) = \bar{k}$ . В случае отсутствия слова в словаре оно отдаётся эксперту на классификацию с последующим добавлением в словарь. Если $`\gamma(t_i) = u_j`$, где $`\gamma(t_i)`$ функция стемминга текста $`t_i`$, то $`\delta(t_i) = \delta(u_j) = \bar{k}`$ . В случае отсутствия слова в словаре оно отдаётся эксперту на классификацию с последующим добавлением в словарь.
Отличительной особенностью алгоритма является наличие динамического порогового значения: при определении порогового значения учитывается количество и вес категорий слов, упоминающихся в тексте. Отличительной особенностью алгоритма является наличие динамического порогового значения: при определении порогового значения учитывается количество и вес категорий слов, упоминающихся в тексте.
В результате обработки текста имеем перечень категорий (к которым относятся слова) на осонове которого алгоритм высчитывает пороговое значение «веса» тематики и классифицирует исходный текст. В результате обработки текста имеем перечень категорий (к которым относятся слова) на осонове которого алгоритм высчитывает пороговое значение «веса» тематики и классифицирует исходный текст.
[назад](README.md) [назад](README.md)

@ -4,46 +4,46 @@
Как уже было отмечено выше социальные сети, их сегменты, а также связи в них принято представлять в виде графа. Рассмотрим основные понятия теории, необходимые для введения в анализ социальной сети, представленной графом. Как уже было отмечено выше социальные сети, их сегменты, а также связи в них принято представлять в виде графа. Рассмотрим основные понятия теории, необходимые для введения в анализ социальной сети, представленной графом.
Граф это упорядоченная пара $G = (V, E)$, где $V (vertices)$ множество вершин (узлов) графа, а $E (edges)$ множество ребер. Граф может быть как ориентированным, так и неориентированным (рис. 17). Граф это упорядоченная пара $`G = (V, E)`$, где $`V (vertices)`$ множество вершин (узлов) графа, а $`E (edges)`$ множество ребер. Граф может быть как ориентированным, так и неориентированным (рис. 17).
![Рис. 17. Ориентированный и неориентированный графы](images/2021-09-05_00-07-34.png) ![Рис. 17. Ориентированный и неориентированный графы](images/2021-09-05_00-07-34.png)
Рис. 17. Ориентированный и неориентированный графы Рис. 17. Ориентированный и неориентированный графы
C точки зрения социальных сетей ребра в неориентированном графе могут описывать такую связь как «дружба», а в ориентированном «подписку». Граф, представляющий социальную сеть, также может быть и смешанным имеющим как ориентированные ребра, так и неориентированные. C точки зрения социальных сетей ребра в неориентированном графе могут описывать такую связь как «дружба», а в ориентированном «подписку». Граф, представляющий социальную сеть, также может быть и смешанным имеющим как ориентированные ребра, так и неориентированные.
Граф $G = (V, E)$ , с $|V| = n$ вершинами может быть представлен в виде симметричной бинарной матрицы размерности $n \times n$: Граф $`G = (V, E)`$ , с $`|V| = n`$ вершинами может быть представлен в виде симметричной бинарной матрицы размерности $`n \times n`$:
```math ```math
A(i,j) = \begin{cases} A(i,j) = \begin{cases}
1, &\text{если $v_i$ связана ребром с $v_j$},\\ 1, &\text{если $`v_i`$ связана ребром с $`v_j`$},\\
0, &\text{в иных случаях}. 0, &\text{в иных случаях}.
\end{cases} \end{cases}
``` ```
Если граф ориентированный матрица $A$ не будет симметричной. Если граф ориентированный матрица $`A`$ не будет симметричной.
Если граф взвешенный (ребру которого поставлено в соответствие некое число вес) матрица $A$ имеет вид Если граф взвешенный (ребру которого поставлено в соответствие некое число вес) матрица $`A`$ имеет вид
```math ```math
A(i,j) = \begin{cases} A(i,j) = \begin{cases}
w_{ij}, &\text{если $v_i$ связана ребром с $v_j$},\\ w_{ij}, &\text{если $`v_i`$ связана ребром с $`v_j`$},\\
0, &\text{в иных случаях}. 0, &\text{в иных случаях}.
\end{cases} \end{cases}
``` ```
где $w_{ij}$ вес ребра, соединяющего вершины $v_i$ и $v_j$. где $`w_{ij}`$ вес ребра, соединяющего вершины $`v_i`$ и $`v_j`$.
Опираясь на матричное представление графа множество наборов данных, социальных сетей и не только можно представить в виде графа. Опираясь на матричное представление графа множество наборов данных, социальных сетей и не только можно представить в виде графа.
Пусть $D = \{x_i\}_{i=1}^n$ исходный набор данных. Определим взвешенный граф $G = (V, E)$ с весом ребер Пусть $`D = \{x_i\}_{i=1}^n`$ исходный набор данных. Определим взвешенный граф $`G = (V, E)`$ с весом ребер
```math ```math
w_{ij} = sim(x_i, x_j), w_{ij} = sim(x_i, x_j),
``` ```
где $sim(x_i, x_j)$, описывает зависимость между $x_i$ и $x_j$. где $`sim(x_i, x_j)`$, описывает зависимость между $`x_i`$ и $`x_j`$.
Таким образом, исходный набор данных $D = \{x_i\}_{i=1}^n$ будет представлен взвешенным графом. В случае с социальной сетью, отыскание зависимостей является тривиальной задачей. Таким образом, исходный набор данных $`D = \{x_i\}_{i=1}^n`$ будет представлен взвешенным графом. В случае с социальной сетью, отыскание зависимостей является тривиальной задачей.
Граф $H = (V_H, E_H)$ называется подграфом графа $G = (V, E)$, если $V_H \subseteq V$ и $E_H \subseteq E$. Такой граф может использоваться для выделения сообщества в социальной сети. Граф $`H = (V_H, E_H)`$ называется подграфом графа $`G = (V, E)`$, если $`V_H \subseteq V`$ и $`E_H \subseteq E`$. Такой граф может использоваться для выделения сообщества в социальной сети.
Наиболее распространёнными задачами в рамках анализа Наиболее распространёнными задачами в рамках анализа
социальных сетей, решаемых с помощью теории графов, являются: социальных сетей, решаемых с помощью теории графов, являются:
@ -54,7 +54,7 @@ w_{ij} = sim(x_i, x_j),
5. Роль и влияние конкретных пользователей друг на друга и на сообщества (роль и значимость каждой вершины в графе). 5. Роль и влияние конкретных пользователей друг на друга и на сообщества (роль и значимость каждой вершины в графе).
6. Моделирование социальных сетей, в том числе посредством определения средней плотности графа. 6. Моделирование социальных сетей, в том числе посредством определения средней плотности графа.
Вершины и рёбра графа называются также элементами графа, число вершин в графе $|V|$ порядком, число рёбер $|E|$ размером графа. Вершины и рёбра графа называются также элементами графа, число вершин в графе $`|V|`$ порядком, число рёбер $`|E|`$ размером графа.
*Маршрутом* в графе называют конечную последовательность вершин, в которой каждая вершина (кроме последней) соединена со следующей в последовательности вершиной ребром. *Маршрутом* в графе называют конечную последовательность вершин, в которой каждая вершина (кроме последней) соединена со следующей в последовательности вершиной ребром.
@ -64,7 +64,7 @@ w_{ij} = sim(x_i, x_j),
Граф называется *связным*, если любые две его вершины связаны маршрутом. Граф называется *связным*, если любые две его вершины связаны маршрутом.
*Компонента связности* графа $G = (V, E)$ его подграф $H = (V_h, E_H)$, образованный на подмножестве всех вершин $V_H$, которые можно соединить произвольным маршрутом. *Компонента связности* графа $`G = (V, E)`$ его подграф $`H = (V_h, E_H)`$, образованный на подмножестве всех вершин $`V_H`$, которые можно соединить произвольным маршрутом.
Связный граф состоит из единственной компоненты связности. На компоненте связности можно ввести понятие расстояния между вершинами как минимальную длину пути, соединяющего эти вершины. Ребро графа называется *мостом*, если его удаление увеличивает число компонент. Связный граф состоит из единственной компоненты связности. На компоненте связности можно ввести понятие расстояния между вершинами как минимальную длину пути, соединяющего эти вершины. Ребро графа называется *мостом*, если его удаление увеличивает число компонент.
@ -72,7 +72,7 @@ w_{ij} = sim(x_i, x_j),
*Эксцентриситет вершины графа* это максимальное расстояние от неё до других вершин (по количеству ребер или их весу). *Эксцентриситет вершины графа* это максимальное расстояние от неё до других вершин (по количеству ребер или их весу).
*Диаметром* графа $d(G)$ является максимальное расстояние между всеми парами вершин в графе $x_i$ и $x_j$: $d(G) = maxd(x_i, x_j)$. Таким образом, диаметр графа это максимальный из эксцентриситетов вершин. *Диаметром* графа $`d(G)`$ является максимальное расстояние между всеми парами вершин в графе $`x_i`$ и $`x_j`$: $`d(G) = maxd(x_i, x_j)`$. Таким образом, диаметр графа это максимальный из эксцентриситетов вершин.
*Радиусом графа* называется минимальный эксцентриситет среди всех вершин графа. *Радиусом графа* называется минимальный эксцентриситет среди всех вершин графа.
@ -84,18 +84,18 @@ w_{ij} = sim(x_i, x_j),
*Степенью вершины* графа называется количество инцидентных ей рёбер. Последовательностью степеней вершин неориентированного графа является список степеней вершин, отсортированный по убыванию. *Степенью вершины* графа называется количество инцидентных ей рёбер. Последовательностью степеней вершин неориентированного графа является список степеней вершин, отсортированный по убыванию.
Пусть $N_k$ количество вершин графа со степенью $k$. Распределение частот степеней графа при этом $(N_0, N_1, \ldots, N_t)$ , где $t$ максимальная степень вершины в графе. Пусть $`N_k`$ количество вершин графа со степенью $`k`$. Распределение частот степеней графа при этом $`(N_0, N_1, \ldots, N_t)`$ , где $`t`$ максимальная степень вершины в графе.
Пусть $X$ случайная величина, обозначающая степень вершины. Распределение степеней в графе есть функция вероятности $f$ случайной величины $X$, обозначенная как Пусть $`X`$ случайная величина, обозначающая степень вершины. Распределение степеней в графе есть функция вероятности $`f`$ случайной величины $`X`$, обозначенная как
```math ```math
(f(0), f(1), \ldots, f(t)), (f(0), f(1), \ldots, f(t)),
``` ```
где $f(k) = P(X = k) = \dfrac{N_k}{n}$ вероятность вершины графа со где $`f(k) = P(X = k) = \dfrac{N_k}{n}`$ вероятность вершины графа со
степенью $k$. степенью $`k`$.
В качестве примера рассмотрим граф, изображенный на рис.18. Последовательность степеней вершин этого графа: $(4, 4, 4, 3, 2, 2, 2, 1)$. В качестве примера рассмотрим граф, изображенный на рис.18. Последовательность степеней вершин этого графа: $`(4, 4, 4, 3, 2, 2, 2, 1)`$.
![Рис. 18. Граф с восемью вершинами ](images/2021-09-05_00-57-15.png) ![Рис. 18. Граф с восемью вершинами ](images/2021-09-05_00-57-15.png)
Рис. 18. Граф с восемью вершинами Рис. 18. Граф с восемью вершинами
@ -113,4 +113,4 @@ w_{ij} = sim(x_i, x_j),
``` ```
Распределение степеней в графе может использоваться в моделировании социальной сети, представленной данным графом. Распределение степеней в графе может использоваться в моделировании социальной сети, представленной данным графом.
[назад](README.md) [назад](README.md)

@ -13,13 +13,13 @@
Одним из возможных методов кластерного анализа является расчёт на основе *кластерного коэффициента*. Одним из возможных методов кластерного анализа является расчёт на основе *кластерного коэффициента*.
Кластерным коэффициентом вершины $v_i$ называется мера плотности связей данной вершины с соседними. Пусть $G_i = (V_i, E_i)$ подграф графа $G$, включающий вершины, связанные с $v_i$ (назовем их соседями вершины $v_i$ ). Обозначим $|V_i| = n_i$ количество соседей вершины $v_i$ , а $|E_i| = m_i$ количество ребер между соседями вершины $v_i$. Кластерный коэффициент вершины $v_i$ определяется следующим образом Кластерным коэффициентом вершины $`v_i`$ называется мера плотности связей данной вершины с соседними. Пусть $`G_i = (V_i, E_i)`$ подграф графа $`G`$, включающий вершины, связанные с $`v_i`$ (назовем их соседями вершины $`v_i`$ ). Обозначим $`|V_i| = n_i`$ количество соседей вершины $`v_i`$ , а $`|E_i| = m_i`$ количество ребер между соседями вершины $`v_i`$. Кластерный коэффициент вершины $`v_i`$ определяется следующим образом
```math ```math
C(v_i) = \frac{\text{число рёбер в $G_i$}}{\text{маскимальное число рёбер в $G_i$}} = \frac{m_i}{\binom{n_i}{2}} = \frac{2 m_i}{n_i (n_i - 1)}. C(v_i) = \frac{\text{число рёбер в $`G_i`$}}{\text{маскимальное число рёбер в $`G_i`$}} = \frac{m_i}{\binom{n_i}{2}} = \frac{2 m_i}{n_i (n_i - 1)}.
``` ```
Таким образом, кластерный коэффициент графа $G$ представляет собой среднее значение кластерного коэффициента по всем своим вершинам: Таким образом, кластерный коэффициент графа $`G`$ представляет собой среднее значение кластерного коэффициента по всем своим вершинам:
```math ```math
C(G) = \frac{1}{n} \sum_i C(v_i). C(G) = \frac{1}{n} \sum_i C(v_i).
@ -30,20 +30,20 @@ C(G) = \frac{1}{n} \sum_i C(v_i).
```math ```math
\rho = \frac{2 m}{n(n-1)}, \rho = \frac{2 m}{n(n-1)},
``` ```
где $m$ количество рёбер в графе; $n$ количество вершин. где $`m`$ количество рёбер в графе; $`n`$ количество вершин.
Тогда для определенного кластера $С$ (сообщества) плотность связей равна количеству рёбер в этом сообществе $m_c$, делённому на максимально возможное количество рёбер в сообществе Тогда для определенного кластера $`С`$ (сообщества) плотность связей равна количеству рёбер в этом сообществе $`m_c`$, делённому на максимально возможное количество рёбер в сообществе
```math ```math
\delta_{internal} (C) = \frac{2m_c}{n_c(n_c-1)} \delta_{internal} (C) = \frac{2m_c}{n_c(n_c-1)}
``` ```
А внешняя для данного кластера $С$ плотность аналогично получается при вычислении А внешняя для данного кластера $`С`$ плотность аналогично получается при вычислении
```math ```math
\delta_{external} (C) = \frac{2 m_{external}}{n_c(n_c-1)} \delta_{external} (C) = \frac{2 m_{external}}{n_c(n_c-1)}
``` ```
где $m_{external}$ полное число внешних связей (рёбер). где $`m_{external}`$ полное число внешних связей (рёбер).
Для выделения сообщества плотность внутренних связей должна быть больше плотности внешних связей, при этом плотность внутренних связей должна быть больше, чем средняя плотность графа, а плотность внешних связей должна быть меньше, чем средняя плотность графа. Таким образом, получаем следующие Для выделения сообщества плотность внутренних связей должна быть больше плотности внешних связей, при этом плотность внутренних связей должна быть больше, чем средняя плотность графа, а плотность внешних связей должна быть меньше, чем средняя плотность графа. Таким образом, получаем следующие
условия условия
@ -81,27 +81,27 @@ max = (\delta_{internal} - \delta_{external}).
Работа данного метода заключается в следующем. Пусть граф можно разбить на кластеры, и у каждого кластера есть своя метка (например, разные цвета). Тогда, чем больше отличается подграф, соответствующий сообществу, от случайного подграфа, тем лучше разбиение (рис. 20). Работа данного метода заключается в следующем. Пусть граф можно разбить на кластеры, и у каждого кластера есть своя метка (например, разные цвета). Тогда, чем больше отличается подграф, соответствующий сообществу, от случайного подграфа, тем лучше разбиение (рис. 20).
Вводится понятие модулярности, под которой понимается скалярная величина из отрезка $[-1, 1]$, выражаемая следующей формулой Вводится понятие модулярности, под которой понимается скалярная величина из отрезка $`[-1, 1]`$, выражаемая следующей формулой
```math ```math
Q = \frac{1}{2m} \sum_{i,j} \left( A_{ij} - \frac{d_i d_j}{2m} \right) \delta(C_i, C_j), Q = \frac{1}{2m} \sum_{i,j} \left( A_{ij} - \frac{d_i d_j}{2m} \right) \delta(C_i, C_j),
``` ```
где $𝐴$ матрица смежности графа; $A_{ij}$ $(i, j)$ элемент матрицы $𝐴$; $d_i$ степень $i$-й вершины графа; $C_i$ метка вершины (номер сообщества, к которому относится вершина); $m$ общее количество ребер в графе; $\delta(C_i, C_j)$ дельта-функция (единица, если $C_i = C_j$, ноль иначе). где $`𝐴`$ матрица смежности графа; $`A_{ij}`$ $`(i, j)`$ элемент матрицы $`𝐴`$; $`d_i`$ степень $`i`$-й вершины графа; $`C_i`$ метка вершины (номер сообщества, к которому относится вершина); $`m`$ общее количество ребер в графе; $`\delta(C_i, C_j)`$ дельта-функция (единица, если $`C_i = C_j`$, ноль иначе).
В этой формуле просчитывается количество связей, находящихся внутри одного кластера, и потом они складываются. В этой формуле просчитывается количество связей, находящихся внутри одного кластера, и потом они складываются.
Стоит отметить, что в формуле присутствует член $\frac{d_i d_j}{2m}$. Его роль в следующем: сравнивается данное разбиение на кластеры (сообщества) со случайным графом. Если имеет место случайный граф, то в таком случае нет хороших кластеров. Таким образом, плотность в таком графе можно использовать как относительную метрику: у сообщества плотность должна быть строго больше, чем Стоит отметить, что в формуле присутствует член $`\frac{d_i d_j}{2m}`$. Его роль в следующем: сравнивается данное разбиение на кластеры (сообщества) со случайным графом. Если имеет место случайный граф, то в таком случае нет хороших кластеров. Таким образом, плотность в таком графе можно использовать как относительную метрику: у сообщества плотность должна быть строго больше, чем
в случайном графе. в случайном графе.
Если имеется узел со степенью $d_i$, то к нему присоединено $d_i$ рёбер. Вероятность того, что произвольное ребро присоединено к узлу, равна $\frac{d_i}{2m}$, а вероятность связи между ребрами равна $\frac{d_i d_j}{2m}$. Иначе говоря, мы вычисляем разницу между реальным количеством рёбер и ожидаемым. При этом сумма не равна нулю, если мы работаем в пределах одного кластера. Если имеется узел со степенью $`d_i`$, то к нему присоединено $`d_i`$ рёбер. Вероятность того, что произвольное ребро присоединено к узлу, равна $`\frac{d_i}{2m}`$, а вероятность связи между ребрами равна $`\frac{d_i d_j}{2m}`$. Иначе говоря, мы вычисляем разницу между реальным количеством рёбер и ожидаемым. При этом сумма не равна нулю, если мы работаем в пределах одного кластера.
Таким образом, при хорошем разбиении на кластеры модулярность высокая, если кластер один, то модулярность равна 0. Таким образом, при хорошем разбиении на кластеры модулярность высокая, если кластер один, то модулярность равна 0.
Задача поиска выделения сообществ в графе сводится к поиску таких $C_i$, которые будут максимизировать значение модулярности. Примеры графов с различными значениями модулярности Задача поиска выделения сообществ в графе сводится к поиску таких $`C_i`$, которые будут максимизировать значение модулярности. Примеры графов с различными значениями модулярности
представлены на рис. 20. представлены на рис. 20.
Поскольку модулярность описывает качество разделения графа на группы, к решению задачи отыскания оптимального разбиения графа можно подойти, решая задачу максимизации. Однако простым перебором решить эту задачу практически невозможно, так как число вариантов разделения $n$ узлов на $k$ групп растёт, экспоненциально с ростом $n$. Поскольку модулярность описывает качество разделения графа на группы, к решению задачи отыскания оптимального разбиения графа можно подойти, решая задачу максимизации. Однако простым перебором решить эту задачу практически невозможно, так как число вариантов разделения $`n`$ узлов на $`k`$ групп растёт, экспоненциально с ростом $`n`$.
Вопрос о количестве кластеров в графе обычно решается некоторой метрикой, в качестве которой в том числе может быть модулярность. Вопрос о количестве кластеров в графе обычно решается некоторой метрикой, в качестве которой в том числе может быть модулярность.
@ -119,19 +119,19 @@ Q = \frac{1}{2m} \sum_{i,j} \left( A_{ij} - \frac{d_i d_j}{2m} \right) \delta(C_
Q_1 = \frac{1}{m} \sum_{l=1,l \neq i, l\neq j}^k ? + \left( m_i + m_j + \frac{d(N_i)^2 + d(N_j)^2}{4m} \right). Q_1 = \frac{1}{m} \sum_{l=1,l \neq i, l\neq j}^k ? + \left( m_i + m_j + \frac{d(N_i)^2 + d(N_j)^2}{4m} \right).
``` ```
Теперь объединим группы $i$ и $j$ в одну, которую обозначим как $N_{i \cup j} = N_i \cup N_j$. Функция модулярности для нового графа будет иметь следующий вид Теперь объединим группы $`i`$ и $`j`$ в одну, которую обозначим как $`N_{i \cup j} = N_i \cup N_j`$. Функция модулярности для нового графа будет иметь следующий вид
```math ```math
Q_2 = \frac{1}{m} \sum_{l=1,l \neq i, l\neq j}^k \left( m_l - \frac{d(N_l)^2}{4m} \right) + \frac{1}{m} \left( m_{i \cup j} - \frac{d(N_{i \cup j})^2}{4m} \right). Q_2 = \frac{1}{m} \sum_{l=1,l \neq i, l\neq j}^k \left( m_l - \frac{d(N_l)^2}{4m} \right) + \frac{1}{m} \left( m_{i \cup j} - \frac{d(N_{i \cup j})^2}{4m} \right).
``` ```
Число дуг внутри группы $𝑁_{i \cup j}$ равно сумме дуг внутри групп $N_i$ и $N_j$ плюс число дуг между ними. Иными словами Число дуг внутри группы $`𝑁_{i \cup j}`$ равно сумме дуг внутри групп $`N_i`$ и $`N_j`$ плюс число дуг между ними. Иными словами
```math ```math
m_{i \cup j} = m_i + m_j + m_{i,j}. m_{i \cup j} = m_i + m_j + m_{i,j}.
``` ```
Степень объединённой группы $N_{i \cup j}$ равна сумме степеней групп $𝑁_i$ и $𝑁_j$, то есть Степень объединённой группы $`N_{i \cup j}`$ равна сумме степеней групп $`𝑁_i`$ и $`𝑁_j`$, то есть
```math ```math
d(N_{i \cup j}) = d(𝑁_i) + d(𝑁_j). d(N_{i \cup j}) = d(𝑁_i) + d(𝑁_j).
@ -149,13 +149,13 @@ d(N_{i \cup j})^2 = d(𝑁_i)^2 + d(𝑁_j)^2 + 2 d(𝑁_i) d(𝑁_j).
\Delta Q = Q_2 - Q_1 = \frac{1}{m} \left( m_{i,j} - \frac{2 d(𝑁_i) d(𝑁_j)}{4m} \right) = \frac{1}{m} \left( m_{i,j} - \frac{d(𝑁_i) d(𝑁_j)}{2m} \right) \Delta Q = Q_2 - Q_1 = \frac{1}{m} \left( m_{i,j} - \frac{2 d(𝑁_i) d(𝑁_j)}{4m} \right) = \frac{1}{m} \left( m_{i,j} - \frac{d(𝑁_i) d(𝑁_j)}{2m} \right)
``` ```
Отсюда получаем, что наибольший рост модулярности происходит при объединении таких групп $N_i$ и $N_j$, для которых максимальна величина Отсюда получаем, что наибольший рост модулярности происходит при объединении таких групп $`N_i`$ и $`N_j`$, для которых максимальна величина
```math ```math
\Delta(N_i, N_j) = m_{i,j} - \frac{d(N_i) d(N_j)}{2m}. \Delta(N_i, N_j) = m_{i,j} - \frac{d(N_i) d(N_j)}{2m}.
``` ```
Также видно, что объединение групп, между которыми нет дуг ($𝑚_{i,j} = 0$), не может дать увеличения модулярности. Также видно, что объединение групп, между которыми нет дуг ($`𝑚_{i,j} = 0`$), не может дать увеличения модулярности.
К достоинствам алгоритма модулярности можно отнести следующее: К достоинствам алгоритма модулярности можно отнести следующее:
1. Модулярность достаточно просто интерпретируется и её значение равно разности между долей рёбер внутри сообществ, и ожидаемой долей связей, если бы рёбра были размещены случайно. 1. Модулярность достаточно просто интерпретируется и её значение равно разности между долей рёбер внутри сообществ, и ожидаемой долей связей, если бы рёбра были размещены случайно.
@ -174,7 +174,7 @@ d(N_{i \cup j})^2 = d(𝑁_i)^2 + d(𝑁_j)^2 + 2 d(𝑁_i) d(𝑁_j).
```math ```math
C(v) = \sum_{S \neq l \neq v} \frac{\sigma_{st}(v)}{\sigma_{st}}, C(v) = \sum_{S \neq l \neq v} \frac{\sigma_{st}(v)}{\sigma_{st}},
``` ```
где $\sigma_{st}$ общее число кратчайших путей из вершины $s$ в вершину $t$, $\sigma_{st}(v)$ число этих кратчайших путей, проходящих через вершину $v$. где $`\sigma_{st}`$ общее число кратчайших путей из вершины $`s`$ в вершину $`t`$, $`\sigma_{st}(v)`$ число этих кратчайших путей, проходящих через вершину $`v`$.
Идея алгоритма заключается в том, что рёбра, через которые проходит наибольшее количество кратчайших путей, являются «мостами» между кластерами в графе. Поэтому для этих рёбер описанная метрика будет высокой. Можно найти эти рёбра, удалить их, и тогда граф распадется на сообщества. Идея алгоритма заключается в том, что рёбра, через которые проходит наибольшее количество кратчайших путей, являются «мостами» между кластерами в графе. Поэтому для этих рёбер описанная метрика будет высокой. Можно найти эти рёбра, удалить их, и тогда граф распадется на сообщества.
@ -199,7 +199,7 @@ C(v) = \sum_{S \neq l \neq v} \frac{\sigma_{st}(v)}{\sigma_{st}},
\Gamma(x) = \{y \in X | (x,y) \in U \} \cup \{x\}, \Gamma(x) = \{y \in X | (x,y) \in U \} \cup \{x\},
``` ```
где $X$ множество вершин графа, $U$ множество рёбер графа. где $`X`$ множество вершин графа, $`U`$ множество рёбер графа.
*Структурное сходство* величина *Структурное сходство* величина
@ -209,18 +209,18 @@ C(v) = \sum_{S \neq l \neq v} \frac{\sigma_{st}(v)}{\sigma_{st}},
Когда член кластера имеет похожую структуру с одним из его соседей, их расчетное структурное сходство будет большим. Мы используем пороговое значение 𝜀, применяя его к вычисленному структурному подобию, когда определяем принадлежность к тому или иному кластеру. Когда член кластера имеет похожую структуру с одним из его соседей, их расчетное структурное сходство будет большим. Мы используем пороговое значение 𝜀, применяя его к вычисленному структурному подобию, когда определяем принадлежность к тому или иному кластеру.
$\epsilon$ *окрестность* ядра $N_\epsilon(x)$ множество вершин (больше параметра $\mu$), чья структурная схожесть больше параметра $\epsilon$. $`\epsilon`$ *окрестность* ядра $`N_\epsilon(x)`$ множество вершин (больше параметра $`\mu`$), чья структурная схожесть больше параметра $`\epsilon`$.
*Core (ядро)* это вершина, содержащая в $\epsilon$ окрестности, по крайней мере $\mu$ вершин. *Core (ядро)* это вершина, содержащая в $`\epsilon`$ окрестности, по крайней мере $`\mu`$ вершин.
*Прямая структурная достижимость* две вершины напрямую структурно-достижимы, тогда и только тогда, когда одна из вершин является ядром, а другая вершина находится в $\epsilon$ окрестности данного ядра. Иными словами *Прямая структурная достижимость* две вершины напрямую структурно-достижимы, тогда и только тогда, когда одна из вершин является ядром, а другая вершина находится в $`\epsilon`$ окрестности данного ядра. Иными словами
```math ```math
DirReach_{\epsilon,\mu}(x,y) \leftrightarrow Core_{\epsilon,\mu}(x) \wedge y \in N_{\epsilon} (x). DirReach_{\epsilon,\mu}(x,y) \leftrightarrow Core_{\epsilon,\mu}(x) \wedge y \in N_{\epsilon} (x).
``` ```
*Структурно-достижимые вершины* $(x, y)$ две вершины структурно-достижимы, если существует последовательность *Структурно-достижимые вершины* $`(x, y)`$ две вершины структурно-достижимы, если существует последовательность
вершин $x_1 \ldots x_n$ таких, что $x_1 = x$ и $x_n = y$ и $\forall i \in \{1 \ldots (n-1)\}x_i$ и $x_{i+1}$ являются напрямую структурно достижимыми: вершин $`x_1 \ldots x_n`$ таких, что $`x_1 = x`$ и $`x_n = y`$ и $`\forall i \in \{1 \ldots (n-1)\}x_i`$ и $`x_{i+1}`$ являются напрямую структурно достижимыми:
```math ```math
Reach_{\epsilon, \mu}(x, y) \leftrightarrow \exist x_1 \ldots x_n \in X: x_1 = x \wedge x_n = y \wedge \forall i \in \{1 \ldots (n-1)\} : DirReach_{\epsilon,\mu}(x_i, x_{i+1}). Reach_{\epsilon, \mu}(x, y) \leftrightarrow \exist x_1 \ldots x_n \in X: x_1 = x \wedge x_n = y \wedge \forall i \in \{1 \ldots (n-1)\} : DirReach_{\epsilon,\mu}(x_i, x_{i+1}).
@ -245,15 +245,15 @@ Connect_{\epsilon, \mu}(x,y) \leftrightarrow \exist u \in X : Reach_{\epsilon,\m
Процесс работы SCAN-алгоритма поэтапно описан ниже. Процесс работы SCAN-алгоритма поэтапно описан ниже.
1. Поиск начинается с начального посещения каждой вершины один раз, с целью нахождения структурно-связных кластеров, а затем посещения изолированных вершин, чтобы идентифицировать их (hub или outlier). 1. Поиск начинается с начального посещения каждой вершины один раз, с целью нахождения структурно-связных кластеров, а затем посещения изолированных вершин, чтобы идентифицировать их (hub или outlier).
2. SCAN выполняет один проход сети и находит все структурносвязанные кластеры для заданного параметра. В начале все вершины помечены как неклассифицированные. Алгоритм SCAN классифицирует каждую вершину либо как являющуюся членом кластера, либо как не являющуюся. Для каждой вершины, которая еще не классифицирована, SCAN проверяет, является ли эта вершина ядром. Если вершина является ядром, новый кластер расширяется из этой вершины. В противном случае вершина помечается как не являющаяся членом кластера. 2. SCAN выполняет один проход сети и находит все структурносвязанные кластеры для заданного параметра. В начале все вершины помечены как неклассифицированные. Алгоритм SCAN классифицирует каждую вершину либо как являющуюся членом кластера, либо как не являющуюся. Для каждой вершины, которая еще не классифицирована, SCAN проверяет, является ли эта вершина ядром. Если вершина является ядром, новый кластер расширяется из этой вершины. В противном случае вершина помечается как не являющаяся членом кластера.
3. Чтобы найти новый кластер, SCAN начинается с произвольной ядра $V$ и ищет все вершины, которые структурнодостижимы из $V$. Этого вполне достаточно, чтобы найти полный кластер, содержащий вершину $V$. Генерируется новый ID кластера, который будет назначен всем найденным вершинам. 3. Чтобы найти новый кластер, SCAN начинается с произвольной ядра $`V`$ и ищет все вершины, которые структурнодостижимы из $`V`$. Этого вполне достаточно, чтобы найти полный кластер, содержащий вершину $`V`$. Генерируется новый ID кластера, который будет назначен всем найденным вершинам.
4. SCAN начинается, постановкой всех вершин в 𝜀 окрестности вершины $V$ в очередь. Для каждой вершины в очереди вычисляются все непосредственно достижимые вершины, и в очередь вставляются те вершины, которые до сих пор не классифицированы. Это повторяется до тех пор, пока очередь не опустеет. 4. SCAN начинается, постановкой всех вершин в 𝜀 окрестности вершины $`V`$ в очередь. Для каждой вершины в очереди вычисляются все непосредственно достижимые вершины, и в очередь вставляются те вершины, которые до сих пор не классифицированы. Это повторяется до тех пор, пока очередь не опустеет.
5. Вершины, не являющиеся членами кластеров, могут быть дополнительно классифицированы как «хабы» или посторонние. Если отдельная вершина имеет рёбра на два или более кластеров, она может быть классифицирована как «хаб». В противном случае это «аутлаер». 5. Вершины, не являющиеся членами кластеров, могут быть дополнительно классифицированы как «хабы» или посторонние. Если отдельная вершина имеет рёбра на два или более кластеров, она может быть классифицирована как «хаб». В противном случае это «аутлаер».
SCAN-алгоритм лишен недостатков алгоритмов, использующих модулярность. Отличительной особенностью SCAN-алгоритма является наличие параметров $\mu$ и $\epsilon$, которые могут задаваться пользователем или экспертом, что позволяет избежать проблемы определения маленьких сообществ. Иными словами, пользователь или эксперт может сам определять размеры сообществ, которые необходимо определять и члены которых необходимо классифицировать. При этом нахождение оптимального значения SCAN-алгоритм лишен недостатков алгоритмов, использующих модулярность. Отличительной особенностью SCAN-алгоритма является наличие параметров $`\mu`$ и $`\epsilon`$, которые могут задаваться пользователем или экспертом, что позволяет избежать проблемы определения маленьких сообществ. Иными словами, пользователь или эксперт может сам определять размеры сообществ, которые необходимо определять и члены которых необходимо классифицировать. При этом нахождение оптимального значения
данных параметров можно провести при помощи машинного обучения системы, используя определённые сегменты сети. данных параметров можно провести при помощи машинного обучения системы, используя определённые сегменты сети.
Также в пользу SCAN-алгоритма выступают результаты исследования времени работы, которое значительно меньше, чем в алгоритмах, базирующихся на понятии модулярности. Также в пользу SCAN-алгоритма выступают результаты исследования времени работы, которое значительно меньше, чем в алгоритмах, базирующихся на понятии модулярности.
Кластеризация графа, описывающего социальную сеть или ее фрагмент может использоваться не только для отыскания сообществ, но также и для удобного визуального представления (выделение сегментов и уменьшение размерности). При этом могут использоваться описанные выше алгоритмы, а также их модификации, зачастую направленные на работу с графами большой размерности. Кластеризация графа, описывающего социальную сеть или ее фрагмент может использоваться не только для отыскания сообществ, но также и для удобного визуального представления (выделение сегментов и уменьшение размерности). При этом могут использоваться описанные выше алгоритмы, а также их модификации, зачастую направленные на работу с графами большой размерности.
[назад](README.md) [назад](README.md)

@ -9,7 +9,7 @@
![Рис. 23. Пример функции распределения степеней вершин социальной сети](images/2021-09-05_14-54-46.png) ![Рис. 23. Пример функции распределения степеней вершин социальной сети](images/2021-09-05_14-54-46.png)
Рис. 23. Пример функции распределения степеней вершин социальной сети Рис. 23. Пример функции распределения степеней вершин социальной сети
На рисунке $f_k$ вероятность случайно выбранной вершины, имеющий степень $k$. На рисунке $`f_k`$ вероятность случайно выбранной вершины, имеющий степень $`k`$.
В социальных сетях большинство пользователей имеют довольно маленькое количество связей, и наоборот, большое количество связей имеют малое количество пользователей. В социальных сетях большинство пользователей имеют довольно маленькое количество связей, и наоборот, большое количество связей имеют малое количество пользователей.
@ -21,7 +21,7 @@
f(x) = C x^{-\alpha} f(x) = C x^{-\alpha}
``` ```
где $С$ нормировочная константа. где $`С`$ нормировочная константа.
Данное обстоятельство играет важную роль в моделировании социальных сетей. Данное обстоятельство играет важную роль в моделировании социальных сетей.
@ -44,13 +44,13 @@ f(x) = C x^{-\alpha}
## Модель Эрдоша–Реньи (ErdősRényi model) ## Модель Эрдоша–Реньи (ErdősRényi model)
Модель Эрдоша-Реньи - это одна из моделей генерации случайных графов. Пусть $G = (V, E)$ - граф с множеством вершин $V$ и рёбер $E$. Существуют два тесно связанных варианта модели: $G(n,m)$ и $G(n,p)$. У $G(n,m)$ модели два параметра: $n$ - число вершин (узлов), $m$ - число рёбер. При этом: Модель Эрдоша-Реньи - это одна из моделей генерации случайных графов. Пусть $`G = (V, E)`$ - граф с множеством вершин $`V`$ и рёбер $`E`$. Существуют два тесно связанных варианта модели: $`G(n,m)`$ и $`G(n,p)`$. У $`G(n,m)`$ модели два параметра: $`n`$ - число вершин (узлов), $`m`$ - число рёбер. При этом:
- $n(n-1)/2$ - количество пар вершин, которые могут быть соединены ребром (количество паросочетаний); - $`n(n-1)/2`$ - количество пар вершин, которые могут быть соединены ребром (количество паросочетаний);
- $C_{n(n-1)/2}^m$ - количество способов выбора $m$ рёбер из $n(n-1)/2$ числа рёбер. - $`C_{n(n-1)/2}^m`$ - количество способов выбора $`m`$ рёбер из $`n(n-1)/2`$ числа рёбер.
О случайном графе можно думать как об одном графе, выбранном случайным образом из этого множества $C_{n(n-1)/2}^m$. О случайном графе можно думать как об одном графе, выбранном случайным образом из этого множества $`C_{n(n-1)/2}^m`$.
У модели $G(n,p)$ имеются 2 параметра $n$ (число узлов) и $p$ вероятность того, что любая случайно выбранная пара узлов соединена ребром. Если $p=0$, то нет рёбер вообще в графе, $p=1$, то получаем полный граф, все узлы соединены рёбрами. Тогда число рёбер это случайное число, которое имеет математическое У модели $`G(n,p)`$ имеются 2 параметра $`n`$ (число узлов) и $`p`$ вероятность того, что любая случайно выбранная пара узлов соединена ребром. Если $`p=0`$, то нет рёбер вообще в графе, $`p=1`$, то получаем полный граф, все узлы соединены рёбрами. Тогда число рёбер это случайное число, которое имеет математическое
ожидание: ожидание:
```math ```math
@ -69,19 +69,19 @@ f(x) = C x^{-\alpha}
P(k_i=k) = P(k) = C_{n-1}^k p^k (1 - p)^{n-k-1}. P(k_i=k) = P(k) = C_{n-1}^k p^k (1 - p)^{n-k-1}.
``` ```
В случае $n \rightarrow \infin$ и фиксированном среднем значении: В случае $`n \rightarrow \infin`$ и фиксированном среднем значении:
```math ```math
\lang k \rang = pn = \lambda. \lang k \rang = pn = \lambda.
``` ```
Это распределение дискретно, т.е. $k$ имеет целочисленное значение. Это распределение дискретно, т.е. $`k`$ имеет целочисленное значение.
В данной модели все узлы графа будут иметь степень, близкую к средней степени, и будет очень мало сильно-отличающихся узлов. В таком графе найти узлы с маленькой степенью почти невозможно. В данной модели все узлы графа будут иметь степень, близкую к средней степени, и будет очень мало сильно-отличающихся узлов. В таком графе найти узлы с маленькой степенью почти невозможно.
Интересное свойство модели наличие фазового перехода, при котором плавное изменение параметра приводит к скачкообразным изменениям свойств системы. Интересное свойство модели наличие фазового перехода, при котором плавное изменение параметра приводит к скачкообразным изменениям свойств системы.
В модели $G(n,p)$ при $p=0$, как было сказано выше, связи отсутствуют, а при $p=1$ имеет место полный граф. Начнем понемногу увеличивать $р$ от значения $𝑝 = 0$. В промежутке от $0$ до $1$ происходит структурное изменение появляется возможность попасть из одного узла в любой другой за какое-то количество шагов. Другими словами, происходит фазовый переход, который заключается в том, что появляется связность. В какой-то момент времени возникает большая связная компонента. Момент скачка из несвязанного состояния к появлению большой связной компоненты и есть фазовый переход. В модели $`G(n,p)`$ при $`p=0`$, как было сказано выше, связи отсутствуют, а при $`p=1`$ имеет место полный граф. Начнем понемногу увеличивать $`р`$ от значения $`𝑝 = 0`$. В промежутке от $`0`$ до $`1`$ происходит структурное изменение появляется возможность попасть из одного узла в любой другой за какое-то количество шагов. Другими словами, происходит фазовый переход, который заключается в том, что появляется связность. В какой-то момент времени возникает большая связная компонента. Момент скачка из несвязанного состояния к появлению большой связной компоненты и есть фазовый переход.
Размер большой связной компоненты можно определить, решая уравнение: Размер большой связной компоненты можно определить, решая уравнение:
@ -89,11 +89,11 @@ P(k_i=k) = P(k) = C_{n-1}^k p^k (1 - p)^{n-k-1}.
1 - s = e^{-\lambda s}, 1 - s = e^{-\lambda s},
``` ```
где $s$ - это доля узлов, которые принадлежат большой связной компоненте. где $`s`$ - это доля узлов, которые принадлежат большой связной компоненте.
Если $0 < \lambda < 1$, то большая связная компонента отсутствует, если $\lambda > 1$ то гигантская связная компонента резко возрастает. Выбирая критическое значение $р$, мы можем это контролировать. Если $`0 < \lambda < 1`$, то большая связная компонента отсутствует, если $`\lambda > 1`$ то гигантская связная компонента резко возрастает. Выбирая критическое значение $`р`$, мы можем это контролировать.
У модели $G(n,p)$ есть еще ряд свойств. Если $р$ ведет себя как степенная функция от $n$ в степени, то это отражается на структуре графа. Меняя $p$ и $n$, можно гарантировать не только то, что возникает гигантская связная компонента, но и то, что возникают определенные структуры (циклы, полные подграфы различных порядков и т.д.). Другими словами, можно определить те моменты, когда в графе появляется определённого типа поведение. Преимущество модели заключается в том, что эти моменты математически хорошо просчитывается. У модели $`G(n,p)`$ есть еще ряд свойств. Если $`р`$ ведет себя как степенная функция от $`n`$ в степени, то это отражается на структуре графа. Меняя $`p`$ и $`n`$, можно гарантировать не только то, что возникает гигантская связная компонента, но и то, что возникают определенные структуры (циклы, полные подграфы различных порядков и т.д.). Другими словами, можно определить те моменты, когда в графе появляется определённого типа поведение. Преимущество модели заключается в том, что эти моменты математически хорошо просчитывается.
Модель случайного графа легко видоизменить и подстроить под неё функцию распределения, тем самым подгоняя свойства модели под имеющиеся экспериментальные данные. Модель случайного графа легко видоизменить и подстроить под неё функцию распределения, тем самым подгоняя свойства модели под имеющиеся экспериментальные данные.
@ -106,24 +106,24 @@ P(k_i=k) = P(k) = C_{n-1}^k p^k (1 - p)^{n-k-1}.
Формирование сетей цитирование выглядит следующим образом. Имеется статья некоторого автора, затем другой автор пишет статью, цитируя данную (в конце каждой статьи есть целый список авторов, потому как автор цитирует много статей), а потом проходит время, и уже его начинают цитировать. Таким образом, цитируемость работы зависит от времени: чем раньше работа была написана, тем больше у нее шансов быть цитированной. В то же время сами узлы не будут заданы изначально, они появляются с течением времени. Имеет место характерная динамика: появляется новый узел и появляются связи, при этом сначала появляются связи, входящие в этот узел, затем появляются связи, от этого узла идущие дальше. Формирование сетей цитирование выглядит следующим образом. Имеется статья некоторого автора, затем другой автор пишет статью, цитируя данную (в конце каждой статьи есть целый список авторов, потому как автор цитирует много статей), а потом проходит время, и уже его начинают цитировать. Таким образом, цитируемость работы зависит от времени: чем раньше работа была написана, тем больше у нее шансов быть цитированной. В то же время сами узлы не будут заданы изначально, они появляются с течением времени. Имеет место характерная динамика: появляется новый узел и появляются связи, при этом сначала появляются связи, входящие в этот узел, затем появляются связи, от этого узла идущие дальше.
Модель Барабаши–Альберта характеризуется следующими параметрами: Модель Барабаши–Альберта характеризуется следующими параметрами:
- в начальный момент времени $t= 0$ есть $m$ несвязанных вершин; - в начальный момент времени $`t= 0`$ есть $`m`$ несвязанных вершин;
- на каждом шаге $(t = 1, 2, 3, \ldots )$ будем добавлять новую вершину с $m$ ребрами; - на каждом шаге $`(t = 1, 2, 3, \ldots )`$ будем добавлять новую вершину с $`m`$ ребрами;
- количество связей, с которым приходит новая вершина в граф, фиксировано (равно $m$), однако к какому именно узлу он присоединяется выбирается случайным образом, т.е. рост идет случайно. - количество связей, с которым приходит новая вершина в граф, фиксировано (равно $`m`$), однако к какому именно узлу он присоединяется выбирается случайным образом, т.е. рост идет случайно.
При этом степень $i$-й вершины равна При этом степень $`i`$-й вершины равна
```math ```math
k_i (t) = m(1 + log \frac{t}{i}), k_i (t) = m(1 + log \frac{t}{i}),
``` ```
где $i$ индекс вершины соответствующий тому времени, когда узел присоединился. где $`i`$ индекс вершины соответствующий тому времени, когда узел присоединился.
На рис. 24 приводится поведение модели как функцию времени для $m = 20$, $i = 10, 20, 40$. Вершины, которые присоединились раньше, имеют большую степень с течением времени, чем позже присоединившиеся вершины. Кривые на рисунке не пересекаются, что и означает преимущество присоединившегося ранее. Когда вершина только приходит в систему, у неё конкуренция за новые связи очень небольшая, т.е. любая новая приходящая вершина в любом случае с ней свяжется; когда же сеть (граф) становится большой, то при появлении новой вершины она может установить с другими вершинами только ограниченное количество связей. Другими словами, шанс случайной вершины получить связь становится все меньше и меньше. На рис. 24 приводится поведение модели как функцию времени для $`m = 20`$, $`i = 10, 20, 40`$. Вершины, которые присоединились раньше, имеют большую степень с течением времени, чем позже присоединившиеся вершины. Кривые на рисунке не пересекаются, что и означает преимущество присоединившегося ранее. Когда вершина только приходит в систему, у неё конкуренция за новые связи очень небольшая, т.е. любая новая приходящая вершина в любом случае с ней свяжется; когда же сеть (граф) становится большой, то при появлении новой вершины она может установить с другими вершинами только ограниченное количество связей. Другими словами, шанс случайной вершины получить связь становится все меньше и меньше.
![Рис. 24. Поведение модели Барабаши–Альберта как функция времени](images/2021-09-05_15-46-01.png) ![Рис. 24. Поведение модели Барабаши–Альберта как функция времени](images/2021-09-05_15-46-01.png)
Рис. 24. Поведение модели Барабаши–Альберта как функция времени Рис. 24. Поведение модели Барабаши–Альберта как функция времени
Рис. 25 показывает поведение этой же модели как функцию от $i$ для $𝑚 = 20, 𝑡 = 50, 100, 200$. В данном случае посмотрим на эти вершины (на поведение/степень вершин) как функцию от $i$ (от номера вершины). Например, когда нужно найти все те вершины, которые в момент времени $t$ имеют степень меньше какой-то данной степени, т.е. в конечном счете посчитать для такого графа функцию распределения степеней узлов. Можно показать, что функция распределения степеней узлов в этом случае равна Рис. 25 показывает поведение этой же модели как функцию от $`i`$ для $`𝑚 = 20, 𝑡 = 50, 100, 200`$. В данном случае посмотрим на эти вершины (на поведение/степень вершин) как функцию от $`i`$ (от номера вершины). Например, когда нужно найти все те вершины, которые в момент времени $`t`$ имеют степень меньше какой-то данной степени, т.е. в конечном счете посчитать для такого графа функцию распределения степеней узлов. Можно показать, что функция распределения степеней узлов в этом случае равна
```math ```math
P(k) = \frac{1}{m} e^{-\frac{m-k}{m}}. P(k) = \frac{1}{m} e^{-\frac{m-k}{m}}.
@ -156,16 +156,16 @@ P(k) = \frac{2m^2}{k^3}.
![Рис. 27 построение модели «малого мира»: а исходный граф; б, в добавление длинных связей ](images/2021-09-05_15-53-26.png) ![Рис. 27 построение модели «малого мира»: а исходный граф; б, в добавление длинных связей ](images/2021-09-05_15-53-26.png)
Рис. 27 построение модели «малого мира»: а исходный граф; б, в добавление длинных связей Рис. 27 построение модели «малого мира»: а исходный граф; б, в добавление длинных связей
В графе (в форме круга) изображенном на рис. 27 (в случае а) связи в форме треугольников создают высокий кластерный коэффициент. В данном случае у произвольного узла на графе $4$ соседа. Максимальное количество связей между ними равно $4×3/2=6$, а реальное число связей между соседями $3$, т.е. кластерный коэффициент для произвольного узла равен $3/6=1/2$. Так как граф абсолютно симметричен, то полный кластерный коэффициент для него также равен $1/2$. Диаметр этого графа при этом высокий. Поэтому необходимо его уменьшить. Для этого достаточно в этот граф добавить некоторые длинные связи например, как показано на рис. 27 (в случаях б и в). При наличии нескольких таких связей резко уменьшается диаметр графа. В графе (в форме круга) изображенном на рис. 27 (в случае а) связи в форме треугольников создают высокий кластерный коэффициент. В данном случае у произвольного узла на графе $`4`$ соседа. Максимальное количество связей между ними равно $`4×3/2=6`$, а реальное число связей между соседями $`3`$, т.е. кластерный коэффициент для произвольного узла равен $`3/6=1/2`$. Так как граф абсолютно симметричен, то полный кластерный коэффициент для него также равен $`1/2`$. Диаметр этого графа при этом высокий. Поэтому необходимо его уменьшить. Для этого достаточно в этот граф добавить некоторые длинные связи например, как показано на рис. 27 (в случаях б и в). При наличии нескольких таких связей резко уменьшается диаметр графа.
Однако, при увеличении таких длинных связей, изменяется средняя степень узла в графе (добавляются новые связи). Можно попробовать сохранить эту среднюю степень узла фиксированной. Для этого, вместо того, чтобы просто добавлять какие-то связи, можно попробовать взять одну связь, локально оторвать её и перенаправить в другое место. Тогда полное количество связей не меняется, поэтому средняя степень узла сохраняется, но получатся связи на большом расстоянии. Однако, при увеличении таких длинных связей, изменяется средняя степень узла в графе (добавляются новые связи). Можно попробовать сохранить эту среднюю степень узла фиксированной. Для этого, вместо того, чтобы просто добавлять какие-то связи, можно попробовать взять одну связь, локально оторвать её и перенаправить в другое место. Тогда полное количество связей не меняется, поэтому средняя степень узла сохраняется, но получатся связи на большом расстоянии.
Рассмотрим этапы построения модели Ваттса–Строгатса. Рассмотрим этапы построения модели Ваттса–Строгатса.
- имеется граф, представляющий собой регулярную решетку с некоторым количеством ближайших соседей; - имеется граф, представляющий собой регулярную решетку с некоторым количеством ближайших соседей;
- введем параметр $p$, при котором модель становится однопараметрической; - введем параметр $`p`$, при котором модель становится однопараметрической;
- когда $p = 0$ имеет место регулярная решетка (идеальное кольцо), а когда $p = 1$ получается случайный граф. - когда $`p = 0`$ имеет место регулярная решетка (идеальное кольцо), а когда $`p = 1`$ получается случайный граф.
Параметр $p$ отображает долю добавленных рёбер. Наглядный пример приводится на рис. 28. Параметр $`p`$ отображает долю добавленных рёбер. Наглядный пример приводится на рис. 28.
Если пересоединить все рёбра, то получится случайный граф. Если пересоединить все рёбра, то получится случайный граф.
@ -176,16 +176,16 @@ P(k) = \frac{2m^2}{k^3}.
В модели Ваттса–Строгатца виден переход от регулярного мира к случайному состоянию через состояние малого мира. Иначе говоря, одним параметром (параметром добавления случайных связей) можно регулярную решетку превратить в малый мир. Авторы модели провели численные расчёты характеристик: В модели Ваттса–Строгатца виден переход от регулярного мира к случайному состоянию через состояние малого мира. Иначе говоря, одним параметром (параметром добавления случайных связей) можно регулярную решетку превратить в малый мир. Авторы модели провели численные расчёты характеристик:
- распределение степеней вершин Пуассоновское; - распределение степеней вершин Пуассоновское;
- средняя длина пути $\lang L(p) \rang$: - средняя длина пути $`\lang L(p) \rang`$:
- $p \rightarrow \lang L(0) \rang = 2 n/k$ круговая решетка; - $`p \rightarrow \lang L(0) \rang = 2 n/k`$ круговая решетка;
- $p \rightarrow \lang L(1) \rang = log(n)/log(k)$ случайный граф; - $`p \rightarrow \lang L(1) \rang = log(n)/log(k)`$ случайный граф;
- кластерный коэффициент $C(p)$: - кластерный коэффициент $`C(p)`$:
- $p \rightarrow 0, C(0) = 3/4 = const$ круговая решетка; - $`p \rightarrow 0, C(0) = 3/4 = const`$ круговая решетка;
- $p \rightarrow 1, C(1) = k/n$ случайный граф. - $`p \rightarrow 1, C(1) = k/n`$ случайный граф.
В модели Ваттса–Строгатца не заложен никакой контроль над функцией распределения степеней узлов. Эта функция изменяется от пуассоновской для случайного графа к отдельной точке (значению степени узла) для регулярной решетки. Ни тот, ни другой крайний случай не соответствует эмпирическим распределениям степенного закона, наблюдаемым на практике, поэтому не стоит ожидать, что, смешав их, можно получить степенной закон. Поэтому функцию распределения по этой модели не вычисляют, а основное внимание уделяют вычислению средней длины пути и кластерного коэффициента. В модели Ваттса–Строгатца не заложен никакой контроль над функцией распределения степеней узлов. Эта функция изменяется от пуассоновской для случайного графа к отдельной точке (значению степени узла) для регулярной решетки. Ни тот, ни другой крайний случай не соответствует эмпирическим распределениям степенного закона, наблюдаемым на практике, поэтому не стоит ожидать, что, смешав их, можно получить степенной закон. Поэтому функцию распределения по этой модели не вычисляют, а основное внимание уделяют вычислению средней длины пути и кластерного коэффициента.
Интересно, что существует некоторый интервал значений $p$, в котором уже кластерный коэффициент не нулевой (недостаточно упал), а в то же время средняя длина пути уже становится достаточно маленькой. То есть можно с помощью одного параметра перейти из полного порядка к случайности и пройти через некоторую зону, где появляются эффекты малого мира. Интересно, что существует некоторый интервал значений $`p`$, в котором уже кластерный коэффициент не нулевой (недостаточно упал), а в то же время средняя длина пути уже становится достаточно маленькой. То есть можно с помощью одного параметра перейти из полного порядка к случайности и пройти через некоторую зону, где появляются эффекты малого мира.
Запишем основные особенности рассмотренных моделей (табл. 1). Запишем основные особенности рассмотренных моделей (табл. 1).
@ -204,4 +204,4 @@ P(k) = \frac{2m^2}{k^3}.
- https://twitter.com/barabasi - https://twitter.com/barabasi
[назад](README.md) [назад](README.md)

@ -13,7 +13,7 @@
```math ```math
w (A, B) = |\{i: i \in [0, n-1] \cup \exist A_i, B_i \cup rel(A_i, B_i)\}|, w (A, B) = |\{i: i \in [0, n-1] \cup \exist A_i, B_i \cup rel(A_i, B_i)\}|,
``` ```
где $rel(A, B)$ - функция, которая истина тогда и только тогда, когда профили $A$ и $B$ взаимосвязаны (установлено отношение дружбы или проявление активности). где $`rel(A, B)`$ - функция, которая истина тогда и только тогда, когда профили $`A`$ и $`B`$ взаимосвязаны (установлено отношение дружбы или проявление активности).
2. К полученному графу применяется алгоритм машинного обучения Label Propagation, реализованный внутри программного решения GraphX API, который решает задачу кластеризации и 2. К полученному графу применяется алгоритм машинного обучения Label Propagation, реализованный внутри программного решения GraphX API, который решает задачу кластеризации и
находит сообщества в графе. находит сообщества в графе.
@ -32,36 +32,36 @@ w (A, B) = |\{i: i \in [0, n-1] \cup \exist A_i, B_i \cup rel(A_i, B_i)\}|,
В вершинах графа содержится информация о профилях, которая используется при их сравнении. В вершинах графа содержится информация о профилях, которая используется при их сравнении.
Для сравнения двух профилей используется многослойная нейронная сеть. На входной слой сети подаётся вектор размерности 12, содержащий следующие данные: Для сравнения двух профилей используется многослойная нейронная сеть. На входной слой сети подаётся вектор размерности 12, содержащий следующие данные:
- Name $\leftrightarrow$ Name' - Name $`\leftrightarrow`$ Name'
- max(Name $\rightarrow$ Username', Name' $\rightarrow$ Username) - max(Name $`\rightarrow`$ Username', Name' $`\rightarrow`$ Username)
- max(Name $\rightarrow$ E-mail', Name' $\rightarrow$ E-mail) - max(Name $`\rightarrow`$ E-mail', Name' $`\rightarrow`$ E-mail)
- max(Name $\rightarrow$ Skype', Name' $\rightarrow$ Skype) - max(Name $`\rightarrow`$ Skype', Name' $`\rightarrow`$ Skype)
- Username $\leftrightarrow$ Username' - Username $`\leftrightarrow`$ Username'
- max(Username $\rightarrow$ E-mail', Username' $\rightarrow$ E-mail) - max(Username $`\rightarrow`$ E-mail', Username' $`\rightarrow`$ E-mail)
- Username $\leftrightarrow$ Skype' - Username $`\leftrightarrow`$ Skype'
- max(Skype $\rightarrow$ Username', Skype' $\rightarrow$ Username) - max(Skype $`\rightarrow`$ Username', Skype' $`\rightarrow`$ Username)
- max(Skype $\rightarrow$ E-mail', Skype' $\rightarrow$ E-mail) - max(Skype $`\rightarrow`$ E-mail', Skype' $`\rightarrow`$ E-mail)
- E-mail $\leftrightarrow$ E-mail' - E-mail $`\leftrightarrow`$ E-mail'
- Phone $\leftrightarrow$ Phone' - Phone $`\leftrightarrow`$ Phone'
- Website $\leftrightarrow$ Website' - Website $`\leftrightarrow`$ Website'
Определим операции $a \rightarrow b$ и $a \leftrightarrow b$: Определим операции $`a \rightarrow b`$ и $`a \leftrightarrow b`$:
1. полнота вхождения $a$ в $b$: 1. полнота вхождения $`a`$ в $`b`$:
```math ```math
a \rightarrow b = 1 - \frac{d + r + s}{len(a)} \in [0,1], a \rightarrow b = 1 - \frac{d + r + s}{len(a)} \in [0,1],
``` ```
где $d$ - количество операций удаления для преобразования $a$ в $b$; $r$ количество операций замены для преобразования $a$ в $b$; $s$ количество операций транспозиции для преобразования $a$ в $b$; $len(x)$ функция вычисления длины аргумента. где $`d`$ - количество операций удаления для преобразования $`a`$ в $`b`$; $`r`$ количество операций замены для преобразования $`a`$ в $`b`$; $`s`$ количество операций транспозиции для преобразования $`a`$ в $`b`$; $`len(x)`$ функция вычисления длины аргумента.
2. Сравнение $a$ и $b$: 2. Сравнение $`a`$ и $`b`$:
```math ```math
\forall i,j \in [1, len(a)], j \in [1, len(b)], d[i,j] = 1 - \frac{dist(a[i], b[j])}{len(b[j])} \in [0, 1], \\ \forall i,j \in [1, len(a)], j \in [1, len(b)], d[i,j] = 1 - \frac{dist(a[i], b[j])}{len(b[j])} \in [0, 1], \\
a \leftrightarrow b = \frac{\sum_{i=1}^{len(a)} d[i, fit(i)]}{\min(len(a), len(b))} \in [0, 1], a \leftrightarrow b = \frac{\sum_{i=1}^{len(a)} d[i, fit(i)]}{\min(len(a), len(b))} \in [0, 1],
``` ```
где $dist(a, b)$ функция, вычисляющая расстояние Дамерау-Левенштейна для строк $a$ и $b$; $fit(i)$ - функция, возвращающая индекс слова строки b, поставленного в соответствие слову $a[i]$. где $`dist(a, b)`$ функция, вычисляющая расстояние Дамерау-Левенштейна для строк $`a`$ и $`b`$; $`fit(i)`$ - функция, возвращающая индекс слова строки b, поставленного в соответствие слову $`a[i]`$.
Операция сравнения не учитывает порядок слов. Все слова исходных строк попарно сравниваются, а затем, при помощи алгоритма Куна-Манкреса, каждому слову строки a ставится в соответствие слово строки $b$ так, чтобы сумма схожести по всем парам слов была максимальной. Также не учитываются знаки препинания и прочие символы (за исключением букв и цифр). Операция сравнения не учитывает порядок слов. Все слова исходных строк попарно сравниваются, а затем, при помощи алгоритма Куна-Манкреса, каждому слову строки a ставится в соответствие слово строки $`b`$ так, чтобы сумма схожести по всем парам слов была максимальной. Также не учитываются знаки препинания и прочие символы (за исключением букв и цифр).
Перед обработкой все символы входных данных приводятся к латинским по правилам транслитерации. Для этого используется сводная таблица основных алфавитов (русский, украинский, болгарский, индийский, арабский). Перед обработкой все символы входных данных приводятся к латинским по правилам транслитерации. Для этого используется сводная таблица основных алфавитов (русский, украинский, болгарский, индийский, арабский).
@ -82,4 +82,4 @@ a \leftrightarrow b = \frac{\sum_{i=1}^{len(a)} d[i, fit(i)]}{\min(len(a), len(b
Данные, полученные на последнем этапе, записываются в ту же базу, где хранятся первичные данные. Однако они не используются в качестве входных данных для реализованного алгоритма ввиду своей недостоверности. Данные, полученные на последнем этапе, записываются в ту же базу, где хранятся первичные данные. Однако они не используются в качестве входных данных для реализованного алгоритма ввиду своей недостоверности.
[назад](README.md) [назад](README.md)

Loading…
Cancel
Save