<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB+%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB+%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2"/>
	<updated>2026-10-22T18:06:02Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29703</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29703"/>
		<updated>2024-12-11T08:48:15Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Операция: Разделение входного набора данных X на подмножества &amp;lt;math&amp;gt; X_1, X_2, ..., X_n &amp;lt;/math&amp;gt;.&lt;br /&gt;
* Входные данные: Набор точек X (объем: N точек, где N — общее количество точек в наборе данных).&lt;br /&gt;
* Выходные данные: Подмножества &amp;lt;math&amp;gt; X_1, X_2, ..., X_n &amp;lt;/math&amp;gt; (объем: примерно N/n точек на одно подмножество, где n — количество подмножеств).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Применение DBSCAN к подмножествам&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Операция: Применение алгоритма DBSCAN к каждому подмножеству &amp;lt;math&amp;gt; X_i &amp;lt;/math&amp;gt; (где i = 1, 2, ..., n).&lt;br /&gt;
* Входные данные: Подмножество &amp;lt;math&amp;gt; X_i &amp;lt;/math&amp;gt; (объем: примерно N/n точек).&lt;br /&gt;
* Выходные данные: Кластеризованные подмножества &amp;lt;math&amp;gt; C_1, C_2, ..., C_n &amp;lt;/math&amp;gt; (каждое содержит метки кластеров для точек в &amp;lt;math&amp;gt;  X_i &amp;lt;/math&amp;gt;, включая -1 для шумовых точек).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;&lt;br /&gt;
* Операция: Объединение кластеров из всех подмножеств в единый набор кластеров.&lt;br /&gt;
* Входные данные: Кластеризованные подмножества &amp;lt;math&amp;gt; C_1, C_2, ..., C_n &amp;lt;/math&amp;gt; (общий объем: N меток кластеров).&lt;br /&gt;
* Выходные данные: Итоговые кластеризованные данные (объем: N точек с соответствующими метками кластеров, где -1 указывает на шумовые точки).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Зависимости&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Выходные данные этапа &amp;quot;Разбиение данных&amp;quot; используются в качестве входных для каждой операции &amp;quot;Применение DBSCAN к подмножеству&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Выходные данные всех операций &amp;quot;Применение DBSCAN к подмножеству&amp;quot; используются в качестве входных для операции &amp;quot;Объединение кластеров&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* Документация Scikit-learn DBSCAN: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* Документация HDBSCAN: https://hdbscan.readthedocs.io/en/latest/&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* Документация cuML DBSCAN: https://docs.rapids.ai/api/cuml/stable/&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* Документация Spark MLlib: https://spark.apache.org/mllib/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29702</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29702"/>
		<updated>2024-12-11T08:47:36Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Операция: Разделение входного набора данных X на подмножества &amp;lt;math&amp;gt; X_1, X_2, ..., X_n &amp;lt;/math&amp;gt;.&lt;br /&gt;
* Входные данные: Набор точек X (объем: N точек, где N — общее количество точек в наборе данных).&lt;br /&gt;
* Выходные данные: Подмножества &amp;lt;math&amp;gt; X_1, X_2, ..., X_n &amp;lt;/math&amp;gt; (объем: примерно N/n точек на одно подмножество, где n — количество подмножеств).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Применение DBSCAN к подмножествам&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Операция: Применение алгоритма DBSCAN к каждому подмножеству &amp;lt;math&amp;lt; X_i &amp;lt;/math&amp;gt; (где i = 1, 2, ..., n).&lt;br /&gt;
* Входные данные: Подмножество &amp;lt;math&amp;gt; X_i &amp;lt;/math&amp;gt; (объем: примерно N/n точек).&lt;br /&gt;
* Выходные данные: Кластеризованные подмножества &amp;lt;math&amp;gt; C_1, C_2, ..., C_n &amp;lt;/math&amp;gt; (каждое содержит метки кластеров для точек в &amp;lt;math&amp;gt;  X_i &amp;lt;/math&amp;gt;, включая -1 для шумовых точек).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;&lt;br /&gt;
* Операция: Объединение кластеров из всех подмножеств в единый набор кластеров.&lt;br /&gt;
* Входные данные: Кластеризованные подмножества &amp;lt;math&amp;gt; C_1, C_2, ..., C_n &amp;lt;/math&amp;gt; (общий объем: N меток кластеров).&lt;br /&gt;
* Выходные данные: Итоговые кластеризованные данные (объем: N точек с соответствующими метками кластеров, где -1 указывает на шумовые точки).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Зависимости&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Выходные данные этапа &amp;quot;Разбиение данных&amp;quot; используются в качестве входных для каждой операции &amp;quot;Применение DBSCAN к подмножеству&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
* Выходные данные всех операций &amp;quot;Применение DBSCAN к подмножеству&amp;quot; используются в качестве входных для операции &amp;quot;Объединение кластеров&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* Документация Scikit-learn DBSCAN: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* Документация HDBSCAN: https://hdbscan.readthedocs.io/en/latest/&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* Документация cuML DBSCAN: https://docs.rapids.ai/api/cuml/stable/&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* Документация Spark MLlib: https://spark.apache.org/mllib/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29701</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29701"/>
		<updated>2024-12-11T08:41:20Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* Документация Scikit-learn DBSCAN: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* Документация HDBSCAN: https://hdbscan.readthedocs.io/en/latest/&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* Документация cuML DBSCAN: https://docs.rapids.ai/api/cuml/stable/&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* Документация Spark MLlib: https://spark.apache.org/mllib/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29700</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29700"/>
		<updated>2024-12-11T08:39:24Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* Документация Scikit-learn DBSCAN: https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* Документация HDBSCAN: https://hdbscan.readthedocs.io/en/latest/&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* Документация cuML DBSCAN: https://rapids.ai/&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* Документация Spark MLlib: https://spark.apache.org/mllib/&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29699</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29699"/>
		<updated>2024-12-11T08:38:25Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* (Документация Scikit-learn DBSCAN)&amp;lt;ref&amp;gt;https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* [Документация HDBSCAN](https://hdbscan.readthedocs.io/en/latest/)&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* [Документация cuML DBSCAN](https://rapids.ai/)&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* [Документация Spark MLlib](https://spark.apache.org/mllib/)&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29698</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29698"/>
		<updated>2024-12-11T08:37:42Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* (Документация Scikit-learn DBSCAN)&amp;lt;ref&amp;gt;https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html&amp;lt;ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* [Документация HDBSCAN](https://hdbscan.readthedocs.io/en/latest/)&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* [Документация cuML DBSCAN](https://rapids.ai/)&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* [Документация Spark MLlib](https://spark.apache.org/mllib/)&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29697</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29697"/>
		<updated>2024-12-11T08:29:16Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
* [Документация Scikit-learn DBSCAN](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html)&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
* [Документация HDBSCAN](https://hdbscan.readthedocs.io/en/latest/)&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
* [Документация cuML DBSCAN](https://rapids.ai/)&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
* [Документация Spark MLlib](https://spark.apache.org/mllib/)&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29696</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29696"/>
		<updated>2024-12-11T08:26:03Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве. Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру). Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29695</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29695"/>
		<updated>2024-12-11T08:25:20Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Входные данные&#039;&#039;&#039;: Множество точек &amp;lt;math&amp;gt; X = \{x_1, x_2, \ldots, x_n\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; представлена в &amp;lt;math&amp;gt; d &amp;lt;/math&amp;gt;-мерном пространстве.  &lt;br /&gt;
Объем данных: n — количество точек, d — размерность пространства. В типичных задачах n может быть порядка &amp;lt;math&amp;gt; 10^3 – 10^6 &amp;lt;/math&amp;gt;, а d — от нескольких единиц до сотен.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Выходные данные&#039;&#039;&#039;: Размеченное множество точек X, где каждой точке &amp;lt;math&amp;gt; x_i &amp;lt;/math&amp;gt; сопоставлен номер кластера &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;. Значение &amp;lt;math&amp;gt; C_i = -1 &amp;lt;/math&amp;gt; означает, что точка является шумовой (не принадлежит ни одному кластеру).  &lt;br /&gt;
Объем выходных данных: n меток кластеров, каждая из которых занимает O(1) памяти, что в сумме составляет O(n).&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29682</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29682"/>
		<updated>2024-12-10T14:35:26Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29681</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29681"/>
		<updated>2024-12-10T14:35:06Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
Программа трестировалась на датасете make_circles из 50000 точек&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29675</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29675"/>
		<updated>2024-12-06T20:00:35Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN с параллельной обработкой данных имеет иерархическую структуру параллелизма, которая позволяет эффективно распределить вычисления между несколькими процессами или узлами. В предположении доступности неограниченного числа процессоров, параллельная сложность алгоритма определяется числом шагов, необходимых для обработки данных:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Деление на регионы&#039;&#039;&#039;: На этом шаге пространственные данные делятся на подрегионы, что можно выполнить за &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; шагов, где M — количество подрегионов.&lt;br /&gt;
# &#039;&#039;&#039;Параллельный поиск соседей и кластеризация&#039;&#039;&#039;: Каждый подрегион обрабатывается независимо, что позволяет достичь хорошего параллелизма, поскольку для каждого региона можно запускать отдельные потоки. Это даёт сложность &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt;, где N — число точек в каждом &lt;br /&gt;
# &#039;&#039;&#039;Объединение кластеров&#039;&#039;&#039;: Слияние кластеров на границах может быть выполнено с использованием параллельного обмена данными, что также позволяет эффективно использовать параллельные ресурсы.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность алгоритма близка к &amp;lt;math&amp;gt; O(\log M) &amp;lt;/math&amp;gt; для деления и &amp;lt;math&amp;gt; O(\log N) &amp;lt;/math&amp;gt; для обработки данных в каждом подрегионе. Ресурс параллелизма выражается через массовый параллелизм, где каждый процесс работает с отдельным подрегионом, а скошенный параллелизм проявляется в объединении кластеров на границах регионов.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29674</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29674"/>
		<updated>2024-12-06T19:56:58Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Масштабируемость с точки зрения числа точек&#039;&#039;&#039; - в случае использования пространственных структур (например, KD-деревьев), сложность поиска соседей уменьшается, что улучшает производительность при увеличении числа точек&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29673</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29673"/>
		<updated>2024-12-06T19:54:55Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм DBSCAN в данной реализации обладает хорошей масштабируемостью благодаря использованию параллельной обработки данных с разделением на подрегионы. Каждый регион обрабатывается независимо, что позволяет эффективно распределить вычисления между несколькими процессами или узлами&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Горизонтальная масштабируемость:&#039;&#039;&#039; Разделение на подрегионы позволяет легко увеличивать количество вычислительных узлов, так как каждый подрегион может обрабатываться отдельно без значительных затрат на синхронизацию.&lt;br /&gt;
# &#039;&#039;&#039;Масштабируемость с точки зрения числа измерений:&#039;&#039;&#039; С увеличением числа измерений сложность поиска соседей и обработки точек может возрасти, однако правильное деление пространства помогает снизить эти затраты.&lt;br /&gt;
&lt;br /&gt;
Таким образом, алгоритм сохраняет свою эффективность при увеличении объема данных и числа вычислительных узлов.&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29672</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29672"/>
		<updated>2024-12-06T19:51:28Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
Краткое описание библиотек с указанием, поддерживают ли они распараллеливание:&lt;br /&gt;
&lt;br /&gt;
1. Scikit-learn (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Нет.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Стандартная реализация DBSCAN для малых и средних данных.&lt;br /&gt;
&lt;br /&gt;
2. HDBSCAN (Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Расширенная версия DBSCAN, поддерживает параллельную обработку и улучшает работу с разреженными данными.&lt;br /&gt;
&lt;br /&gt;
3. cuML (GPU-ускоренная библиотека от NVIDIA):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, использует GPU для ускорения вычислений.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: GPU-ускоренная реализация DBSCAN, подходящая для больших объемов данных.&lt;br /&gt;
&lt;br /&gt;
4. Apache Spark MLlib (Java/Scala/Python):&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Распараллеливание&#039;&#039;&#039;: Да, для распределенной обработки данных в кластере.&lt;br /&gt;
* &#039;&#039;&#039;Описание&#039;&#039;&#039;: Распределенная версия DBSCAN для кластеризации на больших данных.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29671</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29671"/>
		<updated>2024-12-06T19:42:59Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|600px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29670</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29670"/>
		<updated>2024-12-06T19:42:34Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Снимок экрана 2024-12-06 в 22.36.56.png|300px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29669</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29669"/>
		<updated>2024-12-06T19:40:35Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[Файл:Информационный граф.png|300px|мини|центр|Информационный граф DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_2024-12-06_%D0%B2_22.36.56.png&amp;diff=29668</id>
		<title>Файл:Снимок экрана 2024-12-06 в 22.36.56.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA_%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0_2024-12-06_%D0%B2_22.36.56.png&amp;diff=29668"/>
		<updated>2024-12-06T19:38:15Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Информационный граф распараллеленного алгоритма DBSCAN&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29667</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29667"/>
		<updated>2024-12-06T19:17:34Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29666</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29666"/>
		<updated>2024-12-06T19:16:33Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
# Радиус eps &amp;gt; 0.&lt;br /&gt;
# Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
# Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
# Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
# Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29665</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29665"/>
		<updated>2024-12-06T19:15:14Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29664</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29664"/>
		<updated>2024-12-06T19:14:34Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
* Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Ядровые точки&#039;&#039;&#039;: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Граничные точки&#039;&#039;&#039;: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Шумовые точки&#039;&#039;&#039;: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
* Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
* Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
* Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
* Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29663</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29663"/>
		<updated>2024-12-06T19:12:36Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
* Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
* Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29662</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29662"/>
		<updated>2024-12-06T19:12:00Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
* Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29661</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29661"/>
		<updated>2024-12-06T19:11:35Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
* Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
* Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29660</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29660"/>
		<updated>2024-12-06T19:10:54Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# Входные данные: множество точек X&lt;br /&gt;
&lt;br /&gt;
# Выходные данные: размеченное входное множество точек, где каждой точке сопоставлен номер кластера (-1 означает, что точка шумовая)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29659</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29659"/>
		<updated>2024-12-06T18:47:48Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;br /&gt;
&lt;br /&gt;
4. https://www.researchgate.net/publication/321753740_Research_on_the_Parallelization_of_the_DBSCAN_Clustering_Algorithm_for_Spatial_Data_Mining_Based_on_the_Spark_Platform?_sg=sLsJGr4rRPHH_yKCzJjOA3_NPYQ98BJnaYxptBE7MlNtYNgsfQIEAb5i0EMTloO3iIz4vFp2h0H6HmE&amp;amp;_tp=eyJjb250ZXh0Ijp7ImZpcnN0UGFnZSI6InB1YmxpY2F0aW9uIiwicGFnZSI6Il9kaXJlY3QifX0&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29658</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29658"/>
		<updated>2024-12-06T18:45:35Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
[[Файл:Объединение в кластеры.png|thumb|center|Рис.2. Объединение кластеров из разных процессов]]&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D1%8B.png&amp;diff=29657</id>
		<title>Файл:Объединение в кластеры.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9E%D0%B1%D1%8A%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D1%8B.png&amp;diff=29657"/>
		<updated>2024-12-06T18:44:05Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Иллюстрация объединения кластеров из разных процессов&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29656</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29656"/>
		<updated>2024-12-06T18:38:57Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|300px|thumb|center|Рис.1. Разбиение данных]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29655</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29655"/>
		<updated>2024-12-06T18:36:16Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной&lt;br /&gt;
&lt;br /&gt;
[[Файл:Разбиение данных.png|мини]]&lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.png&amp;diff=29654</id>
		<title>Файл:Разбиение данных.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B0%D0%B7%D0%B1%D0%B8%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85.png&amp;diff=29654"/>
		<updated>2024-12-06T18:35:36Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Иллюстрация разбиения данных по процессам&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29653</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29653"/>
		<updated>2024-12-06T18:22:06Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;br /&gt;
&lt;br /&gt;
3. https://oaji.net/articles/2023/3603-1677291405.pdf&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29652</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29652"/>
		<updated>2024-12-06T18:07:36Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;. В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29651</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29651"/>
		<updated>2024-12-06T18:07:03Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt;, так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет O(N^2). В параллельной версии с P процессами временная сложность для каждого процесса составляет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;. Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно &amp;lt;math&amp;gt;O(N^2/P)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29650</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29650"/>
		<updated>2024-12-06T18:06:14Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности &amp;lt;math&amp;gt;O(N^2)&amp;lt;/math&amp;gt; для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет &amp;lt;math&amp;gt;O((N/P)^2)&amp;lt;/math&amp;gt;, где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность O(N^2), так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет O(N^2). В параллельной версии с P процессами временная сложность для каждого процесса составляет O((N/P)^2). Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно O(N^2/P).&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29649</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29649"/>
		<updated>2024-12-06T18:05:22Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция для разбиения имеет временную сложность O(N), так как она проходит по всем точкам и проверяет их принадлежность к региону.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Кластеризация точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Основная часть алгоритма — это функция кластеризация DBSCAN, которая выполняет поиск соседних точек и расширение кластера. В худшем случае, алгоритм может обрабатывать все точки, что приводит к временной сложности O(N^2) для одного процесса. Поскольку алгоритм параллельный и точки распределены между процессами, временная сложность для каждого процесса будет O((N/P)^2), где P — количество процессов.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объединение пересекающихся кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
# Функция объединения кластеров имеет временную сложность O(N^2), так как она проходит по всем точкам и проверяет совпадение координат для граничных точек.&lt;br /&gt;
&lt;br /&gt;
Общая временная сложность алгоритма для одного процесса составляет O(N^2). В параллельной версии с P процессами временная сложность для каждого процесса составляет O((N/P)^2). Однако, учитывая накладные расходы на коммуникацию между процессами, общая временная сложность параллельного алгоритма будет примерно O(N^2/P).&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29648</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29648"/>
		<updated>2024-12-06T17:51:57Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Псевдокод для реализации алгоритма DBSCAN&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Инициализация&lt;br /&gt;
clusters = []&lt;br /&gt;
visited = set()&lt;br /&gt;
noise = set()&lt;br /&gt;
&lt;br /&gt;
# Основная итерация&lt;br /&gt;
for P in dataset:&lt;br /&gt;
    if P in visited:&lt;br /&gt;
        continue&lt;br /&gt;
    visited.add(P)&lt;br /&gt;
    &lt;br /&gt;
    # Поиск соседей&lt;br /&gt;
    neighbors = find_neighbors(P, epsilon)&lt;br /&gt;
    &lt;br /&gt;
    if len(neighbors) &amp;lt; MinPts:&lt;br /&gt;
        noise.add(P)&lt;br /&gt;
        continue&lt;br /&gt;
    &lt;br /&gt;
    # Создание нового кластера&lt;br /&gt;
    cluster = []&lt;br /&gt;
    clusters.append(cluster)&lt;br /&gt;
    cluster.append(P)&lt;br /&gt;
    &lt;br /&gt;
    # Расширение кластера&lt;br /&gt;
    expand_cluster(P, neighbors, cluster, visited, epsilon, MinPts)&lt;br /&gt;
&lt;br /&gt;
# Возврат результатов&lt;br /&gt;
return clusters, noise&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29647</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29647"/>
		<updated>2024-12-06T17:46:39Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29646</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29646"/>
		<updated>2024-12-06T17:46:12Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется проверка пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
# &#039;&#039;&#039;Разбиение данных на подмножества&#039;&#039;&#039;: На этом этапе набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Кластеризация&#039;&#039;&#039;: Основной этап алгоритма. Для каждого полученного подмножества применяется алгоритм кластеризации DBSCAN&lt;br /&gt;
# &#039;&#039;&#039;Слияние кластеров на границах&#039;&#039;&#039;: Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29645</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29645"/>
		<updated>2024-12-06T17:32:55Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров. После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Если граничная точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется проверка пересечения кластеров&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29644</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29644"/>
		<updated>2024-12-06T17:30:04Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* **Вычислительное ядро алгоритма** */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров&lt;br /&gt;
После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется проверка пересечения кластеров:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\text{Если } P \text{ и } Q \in D_j \text{ находятся на расстоянии } \leq \varepsilon, \text{ то их кластеры объединяются.}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29643</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29643"/>
		<updated>2024-12-06T17:26:57Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== **Вычислительное ядро алгоритма** ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. **Разделение данных**  &lt;br /&gt;
   Набор данных &#039;&#039;&#039;&amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&#039;&#039;&#039; разбивается на несколько непересекающихся подмножеств &#039;&#039;&#039;&amp;lt;math&amp;gt;D_1, D_2, \ldots, D_k&amp;lt;/math&amp;gt;&#039;&#039;&#039;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной системы.&lt;br /&gt;
&lt;br /&gt;
2. **Локальное выполнение DBSCAN**  &lt;br /&gt;
   На каждом подмножестве &#039;&#039;&#039;&amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;&#039;&#039;&#039; выполняется локальная версия алгоритма DBSCAN:  &lt;br /&gt;
   - Поиск &#039;&#039;&#039;&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&#039;&#039;&#039;-соседей для каждой точки в &#039;&#039;&#039;&amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;&#039;&#039;&#039;.  &lt;br /&gt;
   - Проверка, является ли точка плотностным ядром в рамках текущего подмножества &#039;&#039;&#039;&amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;&#039;&#039;&#039;.  &lt;br /&gt;
   - Формирование локальных кластеров.  &lt;br /&gt;
&lt;br /&gt;
   Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом узле.&lt;br /&gt;
&lt;br /&gt;
3. **Слияние границ кластеров**  &lt;br /&gt;
   После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &#039;&#039;&#039;&amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;&#039;&#039;&#039; и &#039;&#039;&#039;&amp;lt;math&amp;gt;D_j&amp;lt;/math&amp;gt;&#039;&#039;&#039;. Это достигается путём:  &lt;br /&gt;
   - Обмена информации о точках на границах подмножеств между процессами.  &lt;br /&gt;
   - Слияния пересекающихся кластеров в единый кластер.&lt;br /&gt;
&lt;br /&gt;
**Основное вычислительное ядро**&lt;br /&gt;
&lt;br /&gt;
С учётом разделения данных вычислительное ядро состоит из двух ключевых частей:&lt;br /&gt;
&lt;br /&gt;
1. **Локальный поиск** &#039;&#039;&#039;&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;&#039;&#039;&#039;-**соседей и формирование кластеров в каждом** &#039;&#039;&#039;&amp;lt;math&amp;gt;D_i&amp;lt;/math&amp;gt;&#039;&#039;&#039;:  &lt;br /&gt;
   &amp;lt;math&amp;gt;&lt;br /&gt;
   N_i(P) = \{ Q \in D_i \mid dist(P, Q) \leq \varepsilon \}&lt;br /&gt;
   &amp;lt;/math&amp;gt;  &lt;br /&gt;
   где &#039;&#039;&#039;&amp;lt;math&amp;gt;dist(P, Q)&amp;lt;/math&amp;gt;&#039;&#039;&#039; — метрика расстояния.&lt;br /&gt;
&lt;br /&gt;
2. **Слияние кластеров на границах**:  &lt;br /&gt;
   Если точка &#039;&#039;&#039;&amp;lt;math&amp;gt;P \in D_i&amp;lt;/math&amp;gt;&#039;&#039;&#039; имеет соседей в &#039;&#039;&#039;&amp;lt;math&amp;gt;D_j&amp;lt;/math&amp;gt;&#039;&#039;&#039;, то выполняется проверка пересечения кластеров:  &lt;br /&gt;
   &amp;lt;math&amp;gt;&lt;br /&gt;
   \text{Если } P \text{ и } Q \in D_j \text{ находятся на расстоянии } \leq \varepsilon, \text{ то их кластеры объединяются.}&lt;br /&gt;
   &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29642</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29642"/>
		<updated>2024-12-06T17:22:04Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров&lt;br /&gt;
После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
- Обмена информации о точках на границах подмножеств между процессами.&lt;br /&gt;
&lt;br /&gt;
- Слияния пересекающихся кластеров в единый кластер.&lt;br /&gt;
&lt;br /&gt;
Основное вычислительное ядро&lt;br /&gt;
&lt;br /&gt;
С учётом разделения данных вычислительное ядро состоит из двух ключевых частей:&lt;br /&gt;
&lt;br /&gt;
1. Локальный поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей и формирование кластеров в каждом &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
N_i(P) = \{ Q \in D_i \mid dist(P, Q) \leq \varepsilon \}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt; dist(P, Q) &amp;lt;/math&amp;gt; — метрика расстояния.&lt;br /&gt;
&lt;br /&gt;
2. Слияние кластеров на границах:&lt;br /&gt;
&lt;br /&gt;
Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется проверка пересечения кластеров:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
\text{Если } P \text{ и } Q \in D_j \text{ находятся на расстоянии } \leq \varepsilon, \text{ то их кластеры объединяются.}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29641</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29641"/>
		<updated>2024-12-06T17:20:17Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Основные этапы ядра алгоритма:&lt;br /&gt;
&lt;br /&gt;
1. Разделение данных&lt;br /&gt;
   Набор данных &amp;lt;math&amp;gt;  D &amp;lt;/math&amp;gt; разбивается на несколько непересекающихся подмножеств &amp;lt;math&amp;gt;  D_1, D_2, \ldots, D_k &amp;lt;/math&amp;gt;. При этом каждая часть данных обрабатывается независимо, что позволяет эффективно распределить вычисления между узлами параллельной &lt;br /&gt;
&lt;br /&gt;
2. Локальное выполнение DBSCAN&lt;br /&gt;
   На каждом подмножестве &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; выполняется локальная версия алгоритма DBSCAN:&lt;br /&gt;
&lt;br /&gt;
   - Поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей для каждой точки в &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
   - Проверка, является ли точка плотностным ядром в рамках текущего подмножества &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
   - Формирование локальных кластеров.&lt;br /&gt;
&lt;br /&gt;
   Эти операции аналогичны стандартному алгоритму DBSCAN, но выполняются только на локальных подмножествах, что снижает вычислительную сложность в каждом &lt;br /&gt;
&lt;br /&gt;
3. Слияние границ кластеров&lt;br /&gt;
   После обработки всех подмножеств необходимо объединить кластеры, пересекающие границы &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;. Это достигается путём:&lt;br /&gt;
&lt;br /&gt;
   - Обмена информации о точках на границах подмножеств между процессами.&lt;br /&gt;
&lt;br /&gt;
   - Слияния пересекающихся кластеров в единый кластер.&lt;br /&gt;
&lt;br /&gt;
Основное вычислительное ядро&lt;br /&gt;
&lt;br /&gt;
С учётом разделения данных вычислительное ядро состоит из двух ключевых частей:&lt;br /&gt;
&lt;br /&gt;
1. Локальный поиск &amp;lt;math&amp;gt; \varepsilon &amp;lt;/math&amp;gt;-соседей и формирование кластеров в каждом &amp;lt;math&amp;gt; D_i &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;math&amp;gt;&lt;br /&gt;
   N_i(P) = \{ Q \in D_i \mid dist(P, Q) \leq \varepsilon \}&lt;br /&gt;
   &amp;lt;/math&amp;gt;&lt;br /&gt;
   где &amp;lt;math&amp;gt; dist(P, Q) &amp;lt;/math&amp;gt; — метрика расстояния.&lt;br /&gt;
&lt;br /&gt;
2. Слияние кластеров на границах:&lt;br /&gt;
&lt;br /&gt;
   Если точка &amp;lt;math&amp;gt; P \in D_i &amp;lt;/math&amp;gt; имеет соседей в &amp;lt;math&amp;gt; D_j &amp;lt;/math&amp;gt;, то выполняется проверка пересечения кластеров:&lt;br /&gt;
   &amp;lt;math&amp;gt;&lt;br /&gt;
   \text{Если } P \text{ и } Q \in D_j \text{ находятся на расстоянии } \leq \varepsilon, \text{ то их кластеры объединяются.}&lt;br /&gt;
   &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29612</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29612"/>
		<updated>2024-11-03T15:37:05Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29611</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29611"/>
		<updated>2024-11-03T15:36:49Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;br /&gt;
2. https://www.sciencedirect.com/science/article/pii/S0165178123002159#sec0002&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29610</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29610"/>
		<updated>2024-11-03T15:34:49Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется множество точек &amp;lt;math&amp;gt; \mathcal{D} = \{p_1, p_2, \dots, p_n\} &amp;lt;/math&amp;gt; в d-мерном пространстве, где каждая точка &amp;lt;math&amp;gt; p_i \in \mathbb{R}^d &amp;lt;/math&amp;gt; характеризуется d признаками. Определим формально параметры:&lt;br /&gt;
&lt;br /&gt;
1. Радиус eps &amp;gt; 0.&lt;br /&gt;
&lt;br /&gt;
2. Параметр плотности &amp;lt;math&amp;gt; minPts \in \mathbb{N} &amp;lt;/math&amp;gt;, указывающий минимальное количество точек, необходимых для формирования кластера.&lt;br /&gt;
&lt;br /&gt;
Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;, определим её eps-окрестность:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\varepsilon}(p_i) = \{p_j \in \mathcal{D} \mid d(p_i, p_j) \leq \varepsilon\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;lt;math&amp;gt; d(p_i, p_j) &amp;lt;/math&amp;gt; — метрика расстояния, например, Евклидово расстояние.&lt;br /&gt;
&lt;br /&gt;
Для определения точек в терминах DBSCAN вводятся следующие условия:&lt;br /&gt;
&lt;br /&gt;
- Ядровая точка: точка &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; считается ядровой, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_i)| \geq minPts &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
- Граничная точка: точка &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; считается граничной, если &amp;lt;math&amp;gt; p_j &amp;lt;/math&amp;gt; находится в \eps-окрестности ядровой точки, но сама не является ядровой.&lt;br /&gt;
&lt;br /&gt;
- Шумовая точка: точка &amp;lt;marh&amp;gt; p_k &amp;lt;/math&amp;gt; не является ни ядровой, ни граничной, если &amp;lt;math&amp;gt; |N_{\varepsilon}(p_k)| &amp;lt; minPts &amp;lt;/math&amp;gt; и она не принадлежит eps-окрестности ни одной из ядровых точек.&lt;br /&gt;
&lt;br /&gt;
Процесс кластеризации:&lt;br /&gt;
&lt;br /&gt;
1. Для каждой точки &amp;lt;math&amp;gt; p_i \in \mathcal{D} &amp;lt;/math&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
- Если &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; является ядровой точкой, то создаётся новый кластер C.&lt;br /&gt;
&lt;br /&gt;
- Все точки в eps-окрестности &amp;lt;math&amp;gt; p_i &amp;lt;/math&amp;gt; добавляются в кластер C.&lt;br /&gt;
&lt;br /&gt;
- Процесс расширения продолжается рекурсивно для всех ядровых точек в окрестности.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки добавляются в кластеры, если они находятся в окрестности eps хотя бы одной ядровой точки, но не создают новые кластеры.&lt;br /&gt;
&lt;br /&gt;
3. Все оставшиеся точки, не принадлежащие ни одному кластеру, считаются шумовыми.&lt;br /&gt;
&lt;br /&gt;
Таким образом, DBSCAN создает множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \dots, C_k\} &amp;lt;/math&amp;gt;, где k — количество обнаруженных кластеров, а точки, не входящие ни в один из &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, классифицируются как шумовые точки.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29609</id>
		<title>Участник:Даниил Глазков/Алгоритм кластеризации DBSCAN</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%94%D0%B0%D0%BD%D0%B8%D0%B8%D0%BB_%D0%93%D0%BB%D0%B0%D0%B7%D0%BA%D0%BE%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_DBSCAN&amp;diff=29609"/>
		<updated>2024-11-03T15:28:26Z</updated>

		<summary type="html">&lt;p&gt;Даниил Глазков: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Алгоритм DBSCAN (Density-Based Spatial Clustering of Applications with Noise) — это алгоритм кластеризации, предназначенный для решения задачи обнаружения плотных областей в пространстве данных и выделения их как кластеров. Этот алгоритм относится к классу алгоритмов плотностной кластеризации, где основным критерием для объединения точек в кластеры является их плотность. &lt;br /&gt;
&lt;br /&gt;
В отличие от алгоритмов, основанных на минимизации расстояний между точками (например, K-средних), DBSCAN автоматически определяет количество кластеров и не требует задания их количества заранее. Кроме того, DBSCAN хорошо справляется с шумами и выбросами, поскольку точки, не принадлежащие к плотным областям, маркируются как шумовые.&lt;br /&gt;
&lt;br /&gt;
Особенности объектов, с которыми работает DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- Входные данные представлены набором точек в пространстве, где каждая точка характеризуется набором признаков. Для двухмерного пространства точки могут быть представлены как (x, y), но алгоритм также применим и для данных с большим числом признаков.&lt;br /&gt;
&lt;br /&gt;
- Алгоритм подходит для плотностных структур, где кластеры имеют разную форму и размеры, что делает его особенно полезным для географических и пространственных данных.&lt;br /&gt;
&lt;br /&gt;
Основные параметры DBSCAN:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;eps&#039;&#039; — радиус, в пределах которого точки считаются соседними и могут быть включены в один кластер.&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;minPts&#039;&#039; — минимальное количество точек, необходимых для того, чтобы область считалась &amp;quot;плотной&amp;quot; и могла образовать кластер.&lt;br /&gt;
&lt;br /&gt;
Алгоритм выделяет три типа точек:&lt;br /&gt;
&lt;br /&gt;
1. Ядровые точки: точки, которые имеют по меньшей мере minPts соседей в радиусе eps. Эти точки образуют ядро кластера.&lt;br /&gt;
&lt;br /&gt;
2. Граничные точки: точки, которые находятся в радиусе eps от ядровой точки, но сами не обладают достаточным количеством соседей, чтобы быть ядровыми.&lt;br /&gt;
&lt;br /&gt;
3. Шумовые точки: точки, которые не принадлежат ни к одному кластеру, так как не попадают в плотные области.&lt;br /&gt;
&lt;br /&gt;
DBSCAN широко применяется в задачах с нерегулярной структурой данных и особенно полезен в задачах обработки пространственных данных и аномалий.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;&#039;Определение eps-окрестности&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
Для точки &amp;lt;math&amp;gt; p \in \mathbb{R}^d &amp;lt;/math&amp;gt; её eps-окрестностью называется множество точек, находящихся на расстоянии не более eps от точки p:&lt;br /&gt;
&amp;lt;math&amp;gt;N_{\text{eps}}(p) = \{ q \in \mathbb{R}^d \mid \text{dist}(p, q) \leq \text{eps} \}&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt; \text{dist}(p, q) &amp;lt;/math&amp;gt; — расстояние между точками p и q (обычно используется евклидово расстояние).&lt;br /&gt;
&lt;br /&gt;
2. &#039;&#039;&#039;Типы точек&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;Основная точка&#039;&#039;: Точка p считается основной, если в её eps-окрестности находится как минимум minPts точек, включая её саму:&lt;br /&gt;
&amp;lt;math&amp;gt;|N_{\text{eps}}(p)| \geq \text{minPts}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;Граничная точка&#039;&#039;: Точка p является граничной, если она принадлежит eps-окрестности основной точки, но сама не удовлетворяет условию для основной точки:&lt;br /&gt;
&amp;lt;math&amp;gt;0 &amp;lt; |N_{\text{eps}}(p)| &amp;lt; \text{minPts}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
- &#039;&#039;Шумовая точка&#039;&#039;: Точка p, которая не является ни основной, ни граничной, то есть для неё выполняется условие:&lt;br /&gt;
&amp;lt;math&amp;gt;|N_{\text{eps}}(p)| &amp;lt; \text{minPts}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;&#039;Формирование кластеров&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
- Алгоритм начинает с произвольной нерассмотренной точки и проверяет, является ли она основной.&lt;br /&gt;
&lt;br /&gt;
- Если точка p является основной, то на основе её eps-окрестности начинается формирование нового кластера C.&lt;br /&gt;
&lt;br /&gt;
- Все точки из eps-окрестности добавляются в кластер C. Для каждой добавленной основной точки алгоритм рекурсивно включает её соседей, расширяя кластер до тех пор, пока все eps-соседи всех основных точек кластера не будут исчерпаны.&lt;br /&gt;
&lt;br /&gt;
- Граничные точки, связанные с основной точкой, добавляются в кластер, но не инициируют дальнейшее расширение.&lt;br /&gt;
&lt;br /&gt;
4. &#039;&#039;&#039;Функция принадлежности кластерам&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
- В результате работы алгоритма получается множество кластеров &amp;lt;math&amp;gt; \{C_1, C_2, \ldots, C_k\} &amp;lt;/math&amp;gt;, где каждая точка &amp;lt;math&amp;gt; p \in C_i &amp;lt;/math&amp;gt; принадлежит одному из кластеров или считается шумовой (если не включена ни в один кластер).&lt;br /&gt;
&lt;br /&gt;
5. &#039;&#039;&#039;Алгоритм завершения&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
- Алгоритм повторяет шаги кластеризации для всех нерассмотренных точек в выборке, пока все точки либо не будут отнесены к одному из кластеров, либо помечены как шум.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
===  Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
1. Воеводин Вл., Жуматий С., Соболев С., Антонов А., Брызгалов П., Никитенко Д., Стефанов К., Воеводин Вад. Практика суперкомпьютера «Ломоносов» // Открытые системы, 2012, № 7, С. 36-39.&lt;/div&gt;</summary>
		<author><name>Даниил Глазков</name></author>
	</entry>
</feed>