<?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=Dmitry</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=Dmitry"/>
	<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/Dmitry"/>
	<updated>2026-10-22T17:07:40Z</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22481</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22481"/>
		<updated>2017-02-08T19:58:19Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 5. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
Было проведено исследование масштабируемости параллельной реализации алгоритма DBSCAN. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;. Исследовалась параллельная реализация алгоритма, написанная с использованием стандарта MPI. Распараллеливание проводилось по числу входных объектов. Программа реализована на языке C++.&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1 : 128] с шагом по степеням двойки;&lt;br /&gt;
*	число входных объектов [1000 : 40000].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:График масштабируемостиv2.png|thumb|center|800px|Рис. 6. График масштабируемости DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 6 показан график масштабируемости DBSCAN, из которого можно сделать следующие выводы:&lt;br /&gt;
&lt;br /&gt;
* При увеличении размерности системы при фиксированном количестве процессов на области изменений значений параметров наблюдается увеличение эффективности.&lt;br /&gt;
&lt;br /&gt;
* При увеличении числа процессов наблюдается уменьшение эффективности на всей области рассматриваемых значений параметров. При этом с ростом числа процессов снижение эффективности замедляется.&lt;br /&gt;
&lt;br /&gt;
* При одновременном увеличении количества процессов и размерности системы наблюдается уменьшение эффективности. При этом скорость убывания эффективности крайне низкая.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ByDmitryT/DBSCAN Реализация на языке C++]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22479</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22479"/>
		<updated>2017-02-08T19:46:40Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 5. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
Было проведено исследование масштабируемости параллельной реализации алгоритма DBSCAN. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;. Исследовалась параллельная реализация алгоритма, написанная с использованием стандарта MPI. Распараллеливание проводилось по числу входных объектов. Программа реализована на языке C++.&lt;br /&gt;
&lt;br /&gt;
Набор и границы значений изменяемых параметров запуска реализации алгоритма: &lt;br /&gt;
&lt;br /&gt;
*	число процессоров [1 : 128] с шагом по степеням двойки;&lt;br /&gt;
*	число входных объектов [1000 : 40000].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:График масштабируемости.png|thumb|center|800px|Рис. 6. График масштабируемости DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 6 показан график масштабируемости DBSCAN, из которого можно сделать следующие выводы:&lt;br /&gt;
&lt;br /&gt;
* При увеличении размерности системы при фиксированном количестве процессов на области изменений значений параметров наблюдается увеличение эффективности.&lt;br /&gt;
&lt;br /&gt;
* При увеличении числа процессов наблюдается уменьшение эффективности на всей области рассматриваемых значений параметров. При этом с ростом числа процессов снижение эффективности замедляется.&lt;br /&gt;
&lt;br /&gt;
* При одновременном увеличении количества процессов и размерности системы наблюдается уменьшение эффективности. При этом скорость убывания эффективности крайне низкая.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/ByDmitryT/DBSCAN Реализация на языке C++]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22443</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22443"/>
		<updated>2017-02-07T16:47:58Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 5. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
Было проведено исследование масштабируемости параллельной реализации алгоритма DBSCAN. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;. Исследовалась параллельная реализация алгоритма, написанная с использованием стандарта MPI. Распараллеливание проводилось по числу входных объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:График масштабируемости.png|thumb|center|800px|Рис. 6. График масштабируемости DBSCAN]]&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22442</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22442"/>
		<updated>2017-02-07T16:47:35Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 5. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
Было проведено исследование масштабируемости параллельной реализации алгоритма DBSCAN. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;. Исследовалась параллельная реализация алгоритма, написанная с использованием стандарта MPI. Распараллеливание проводилось по числу входных объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:График масштабируемости.png|thumb|center|800px|Рис. 5. График масштабируемости DBSCAN]]&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22441</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22441"/>
		<updated>2017-02-07T16:46:43Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
Было проведено исследование масштабируемости параллельной реализации алгоритма DBSCAN. Исследование проводилось на суперкомпьютере &amp;quot;Ломоносов&amp;quot;. Исследовалась параллельная реализация алгоритма, написанная с использованием стандарта MPI. Распараллеливание проводилось по числу входных объектов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:График масштабируемости.png|thumb|center|800px|Рис. 5. График масштабируемости DBSCAN]]&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22440</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22440"/>
		<updated>2017-02-07T16:45:11Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
[[Файл:График масштабируемости.png|thumb|center|800px|Рис. 5. График масштабируемости DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22415</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22415"/>
		<updated>2017-02-07T13:32:45Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Основную часть алгоритма на верхнем уровне составляют множественные вычисления расстояния между объектами.&lt;br /&gt;
&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22142</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22142"/>
		<updated>2017-02-05T12:24:29Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22141</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22141"/>
		<updated>2017-02-05T12:23:50Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MCP&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MCP_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MCP = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22015</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22015"/>
		<updated>2017-02-01T19:35:18Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22013</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22013"/>
		<updated>2017-02-01T19:33:33Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;Haykin S. Neural Networks. A Comprehensive Foun-dation. – Upper Saddle River, N.1: Prentice Hall, Inc., 1999. – 1104 с.&amp;lt;/ref&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22011</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22011"/>
		<updated>2017-02-01T19:32:02Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа&amp;lt;ref&amp;gt;Jiawei Han, Micheline Kamber. Data Mining: Con-cepts and Techniques: – Academic Press, 2001. – Р. 363-370.&amp;lt;/ref&amp;gt;. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22010</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22010"/>
		<updated>2017-02-01T19:30:25Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Возможность обрабатывать большой объем данных.&lt;br /&gt;
* Результат не зависит от порядка ввода данных.&lt;br /&gt;
* Не требуется указывать количество кластеров.&lt;br /&gt;
* Возможность выделять кластеры в присутствии выбросов.&lt;br /&gt;
* Число итераций определено заранее&amp;lt;ref&amp;gt;http://cyberleninka.ru/article/n/algoritmy-klasterizatsii-v-zadachah-segmentatsii-sputnikovyh-izobrazheniy&amp;lt;/ref&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22008</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22008"/>
		<updated>2017-02-01T19:27:48Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;&amp;lt;ref&amp;gt;https://en.wikipedia.org/wiki/DBSCAN Density-based spatial clustering of applications with noise (DBSCAN)&amp;lt;/ref&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22007</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22007"/>
		<updated>2017-02-01T19:24:40Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Scikit-learn Scikit-Learn]&amp;lt;/span&amp;gt; включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.&lt;br /&gt;
&lt;br /&gt;
[//www.philippe-fournier-viger.com/spmf/SPMF SPMF] предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Apache_Commons Apache Commons Мath]&amp;lt;/span&amp;gt; содержит java-реализацию алгоритма выполняющегося за квадратичное время.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/ELKI ELKI]&amp;lt;/span&amp;gt; предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Weka_(machine_learning) Weka]&amp;lt;/span&amp;gt; содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/R_(programming_language) GNU R]&amp;lt;/span&amp;gt; содержит DBSCAN в [//cran.r-project.org/web/packages/fpc/index.html fpc] пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R [//cran.r-project.org/web/packages/dbscan/index.html dbscan].&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22006</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22006"/>
		<updated>2017-02-01T19:21:57Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Представление алгоритма DBSCAN в виде информационного графа показано на рисунке 4.&lt;br /&gt;
&lt;br /&gt;
* Задаются параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На входе алгоритма набор данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; разбивается на множество точек &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; - количество точек. &lt;br /&gt;
* Для каждой точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; с помощью функции &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяется расстояние между остальными точками.&lt;br /&gt;
* Далее алгоритм объединяет точки &amp;lt;math&amp;gt;X_n&amp;lt;/math&amp;gt;, образуя подмножества &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt;, объекты которого удовлетворяют условию: &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Если подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; состоит из &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; и больше объектов (т. е. &amp;lt;math&amp;gt;M_\varepsilon(X_n) \ge MPC&amp;lt;/math&amp;gt;), то подмножество &amp;lt;math&amp;gt;M_\varepsilon(X_n)&amp;lt;/math&amp;gt; образует кластер &amp;lt;math&amp;gt;G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Подмножество &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; включает в себя все объекты, которые не принадлежат ни одному из подмножеств &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл:DBSCAN.png|thumb|center|800px|Рис. 4. Информационный граф алгоритма DBSCAN]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22004</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=22004"/>
		<updated>2017-02-01T19:13:36Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \ge MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21995</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21995"/>
		<updated>2017-02-01T18:02:45Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21994</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21994"/>
		<updated>2017-02-01T18:01:55Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные данные: множество объектов &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, для которых задана метрическая функция расстояния &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;. Объём входных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выходные данные: размеченное множество объектов, где каждому объекту сопоставлен порядковый номер кластера, в который попал данный объект, либо объект отмечается как выброс. Объём выходных данных: &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Количество кластеров и шума в выходных данных зависят от входных данных и параметров алгоритма. Более компактное расположение объектов, меньшие значения параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;, большие значения параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; ведут к образования меньшего числа кластеров, вплоть до одного единственного кластера. Если варьировать данные параметры в противоположную сторону, то количество кластеров и выбросов будет расти, вплоть до момента, когда все объекты будут являться выбросом.&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21991</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21991"/>
		<updated>2017-02-01T17:55:33Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Плотностный алгоритм кластеризации DBSCAN&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21989</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21989"/>
		<updated>2017-02-01T17:47:21Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Ширина ярусно-параллельной формы алгоритма &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, где m - количество частей, на которые разбиваются все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Высотой ярусно-параллельной формы алгоритма является &amp;lt;math&amp;gt;O(|X| \log |X|)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\mid X \mid&amp;lt;/math&amp;gt; - максимальное количество среди числа объектов в каждой части разбиения. Именно такую сложность имеет алгоритм DBSCAN, применяемый к каждой отдельной части разбиения.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21987</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21987"/>
		<updated>2017-02-01T17:43:10Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_m, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_m&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&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;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21985</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21985"/>
		<updated>2017-02-01T17:23:27Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&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;
* Число настраиваемых параметров равно двум: &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Вычислительная сложность алгоритма &amp;lt;math&amp;gt;O(\text{n log n})&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;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21972</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21972"/>
		<updated>2017-02-01T15:55:23Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; задаются пользователем.&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Сложность алгоритма зависит от поиска всех точек в &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-окрестности конкретной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Из-за поиска &amp;quot;соседствующих&amp;quot; точек алгоритм имеет квадратичную вычислительную сложность &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; (где n - количество точек). Но если использовать K-мерное дерево, то можно снизить сложность до &amp;lt;math&amp;gt;O(\text{n log n})&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;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21971</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21971"/>
		<updated>2017-02-01T15:47:12Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
параметры &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&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;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21970</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21970"/>
		<updated>2017-02-01T15:46:22Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/p}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма DBSCAN может быть разделена на два этапа. В первую очередь из всего набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; необходимо выделить те точки, которые являются окруженными. Затем выполнять следующую процедуру: для каждого объекта &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; определить:&lt;br /&gt;
&lt;br /&gt;
1) принадлежит ли текущий объект к какому-нибудь из кластеров;&lt;br /&gt;
&lt;br /&gt;
2) является ли текущий объект окруженной точкой.&lt;br /&gt;
&lt;br /&gt;
Если текущий объект – окруженная точка, то все объекты, достижимые по плотности от текущего объекта, соединяем в новый кластер. В противном случае, если объект не является окруженной точкой и не достижим по плотности ни от какого объекта, то текущий объект – выброс. Псевдокод алгоритма DBSCAN можно представить следующим образом:&lt;br /&gt;
&lt;br /&gt;
 for &amp;lt;math&amp;gt;\forall X \in D&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
     if &amp;lt;math&amp;gt; (X \in G_i, i= \overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
     &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
        if &amp;lt;math&amp;gt; (X_i \in M_\varepsilon(X))&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          find &amp;lt;math&amp;gt;X_i \in D&amp;lt;/math&amp;gt; достижимы по плотности&lt;br /&gt;
          from &amp;lt;math&amp;gt;X_i \in M_\varepsilon(X)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
        else if &amp;lt;math&amp;gt; (X_i \notin M_\varepsilon(X)&amp;lt;/math&amp;gt; and &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижим от любого другого объекта &amp;lt;math&amp;gt;)&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\{&amp;lt;/math&amp;gt;&lt;br /&gt;
          &amp;lt;math&amp;gt;X \in N&amp;lt;/math&amp;gt;&lt;br /&gt;
        &amp;lt;math&amp;gt;\}&amp;lt;/math&amp;gt;&lt;br /&gt;
  &amp;lt;math&amp;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;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21968</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21968"/>
		<updated>2017-02-01T15:20:05Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
Вычисление расстояния между двумя объектами из выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; осуществляется при помощи различных метрик. В большинстве случаев вычисляется метрика Евклида: &amp;lt;math&amp;gt;dist(u,v)=\sqrt{(u_1-v_1)^2+(u_2-v_2)^2+...+(u_n-v_n)^2} = \sqrt{\sum_{k=1}^n(u_k-v_k)^2}.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Также возможно использование метрики Минковского, что является обобщением евклидова расстояния:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;dist(x,y) = \left(\sum_{i=1}^n |x_i-y_i|^p\right)^{1/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;
&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;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21964</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21964"/>
		<updated>2017-02-01T15:14:55Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Euclidean_distance евклидово расстояние]&amp;lt;/span&amp;gt; или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&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;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21953</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21953"/>
		<updated>2017-02-01T14:44:37Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как евклидово расстояние или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является поиск всех &amp;quot;соседствующих&amp;quot; точек для каждой точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; входного множества &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Основное время работы алгоритма используется на функцию &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt;, определяющую расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и сравнение расстояния с заданной &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; для того, чтобы определить &amp;quot;соседствующие&amp;quot; точки.&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;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21948</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21948"/>
		<updated>2017-02-01T14:15:16Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как евклидово расстояние или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; соединена (связана) по плотности с точкой &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если существует точка &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; такая, что обе точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; являются достижимыми от точки &amp;lt;math&amp;gt;e&amp;lt;/math&amp;gt; (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) (рис. 4). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Соединение_по_плотности.png|thumb|center|300px|Рис. 4. Соединение по плотности]]&lt;br /&gt;
&lt;br /&gt;
Кластер, сформированный на основе размещения объектов по плотности должен удовлетворять таким свойствам: максимальность; связность. &lt;br /&gt;
&lt;br /&gt;
В этом случае, под кластером понимается непустое подмножество точек &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, которое удовлетворяет вышеупомянутым свойствам, причем, максимальность интерпретируется таким образом: если &amp;lt;math&amp;gt;X \in G&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности от точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, тогда и &amp;lt;math&amp;gt;f \in G&amp;lt;/math&amp;gt;, это значит, что обе точки принадлежат одному кластеру. &lt;br /&gt;
&lt;br /&gt;
Свойство связности гласит, что каждый объект в подмножестве &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt; соединен по плотности со всеми объектами кластера (при заданных &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Все объекты из набора данных &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; представляют собой совокупность подмножеств:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;D= \{ G_1, G_2,..., G_n, N \}&amp;lt;/math&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
где  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&amp;lt;/math&amp;gt; – кластеры, образованные по плотности; &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; – некоторое подмножество, объекты которого не принадлежат ни одному из подмножеств  &amp;lt;math&amp;gt;G_1, G_2,..., G_n&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;
&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;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21945</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21945"/>
		<updated>2017-02-01T13:47:59Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M_\varepsilon(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;, для которых следующее неравенство будет истинно: &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;dist(X,f_i) \le \varepsilon&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция &amp;lt;math&amp;gt;dist(var1, var2)&amp;lt;/math&amp;gt; определяет расстояние между объектами выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Это расстояние может вычисляться различными способами, например, как евклидово расстояние или с помощью &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[//en.wikipedia.org/wiki/Minkowski_distance метрики Минковского]&amp;lt;/span&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Вторым параметром определения плотности точек является &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; – это минимальное количество точек, которые расположены ближе всего к данной точке согласно определенному радиусу &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; будет являться окруженной точкой (согласно &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt;) если:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;M_\varepsilon(X) \le MPC&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это значит, что точка &amp;lt;math&amp;gt;f_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(i=\overline{1,n})&amp;lt;/math&amp;gt; окруженная, если количество «соседствующих» точек выборки &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; окажется большим, либо равным значению параметра &amp;lt;math&amp;gt;MCP&amp;lt;/math&amp;gt; (рис. 1).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Окруженная_точка_при_MPC_=_5.png|thumb|center|300px|Рис. 1. Окруженная точка при MPC = 5]]&lt;br /&gt;
&lt;br /&gt;
Точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; является прямо достижимой по плотности от точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (при соответствующих &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;MPC&amp;lt;/math&amp;gt;), если точка &amp;lt;math&amp;gt;X \in M(X)&amp;lt;/math&amp;gt;, т.е. точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; – это одна из точек &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; для другого окружения (соседства), где &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Точка_X_прямо_достижима_по_плотности_от_точки_f.png|thumb|center|300px|Рис. 2. Точка X прямо достижима по плотности от точки f]]&lt;br /&gt;
&lt;br /&gt;
Достижимость по плотности – это транзитивное замыкание прямо достижимой по плотности точки. Точка &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; достижима по плотности из точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, но точка &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; не достижима по плотности из точки &amp;lt;math&amp;gt;f&amp;lt;/math&amp;gt; (рис. 3). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Достижимость_по_плотности.png|thumb|center|300px|Рис. 3. Достижимость по плотности]]&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;
== Возможные способы и особенности параллельной реализации алгоритма ==&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;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21629</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21629"/>
		<updated>2017-01-20T02:52:21Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&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;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Плотность точек для данной точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; определяется двумя параметрами. Первым из них является&lt;br /&gt;
&amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; – радиус «соседства» (приближенности) точки &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. Тогда множество &amp;lt;math&amp;gt;M(X)&amp;lt;/math&amp;gt; будет включать в себя такие точки&lt;br /&gt;
  n,1i,f&lt;br /&gt;
i &lt;br /&gt;
, для которых следующее не-&lt;br /&gt;
равенство будет истинно&lt;br /&gt;
    n,1i,f,Xdist&lt;br /&gt;
i  . (1).&lt;br /&gt;
Функция&lt;br /&gt;
)2var,1(vardist&lt;br /&gt;
 определяет расстоя-&lt;br /&gt;
ние между объектами выборки&lt;br /&gt;
D&lt;br /&gt;
. Это расстояние&lt;br /&gt;
может вычисляться различными способами,&lt;br /&gt;
например, как евклидово расстояние или с помо-&lt;br /&gt;
щью метрики Минковского.&lt;br /&gt;
Вторым параметром определения плотности&lt;br /&gt;
точек является MCP – это минимальное количество&lt;br /&gt;
точек, которые расположены ближе всего к данной&lt;br /&gt;
точке согласно определенному радиусу .&lt;br /&gt;
Точка&lt;br /&gt;
  n,1i,f&lt;br /&gt;
i &lt;br /&gt;
 будет являться окруженной&lt;br /&gt;
точкой (согласно&lt;br /&gt;
&lt;br /&gt;
и&lt;br /&gt;
MCP&lt;br /&gt;
) если&lt;br /&gt;
&lt;br /&gt;
   MCPX . (2)&lt;br /&gt;
Это значит, что точка&lt;br /&gt;
  n,1i,f&lt;br /&gt;
i &lt;br /&gt;
 окружен-&lt;br /&gt;
ная, если количество «соседствующих» точек вы-&lt;br /&gt;
борки&lt;br /&gt;
D&lt;br /&gt;
 окажется большим, либо равным значе-&lt;br /&gt;
нию параметра&lt;br /&gt;
MCP&lt;br /&gt;
 (рис. 1).&lt;br /&gt;
Точка Х является прямо достижимой по плот-&lt;br /&gt;
ности от точки&lt;br /&gt;
f&lt;br /&gt;
 (при соответствующих  и&lt;br /&gt;
MCP&lt;br /&gt;
), если точка&lt;br /&gt;
   XX , т.е. точка Х – это&lt;br /&gt;
одна из точек f для другого окружения (соседства),&lt;br /&gt;
где f – окруженная точка (рис. 2).&lt;br /&gt;
&lt;br /&gt;
Рис. 1. Окруженная&lt;br /&gt;
точка при МСР = 5&lt;br /&gt;
Рис. 2. Точка Х прямо достижима&lt;br /&gt;
по плотности от точки f&lt;br /&gt;
Достижимость по плотности – это транзитив-&lt;br /&gt;
ное замыкание прямо достижимой по плотности&lt;br /&gt;
точки. Точка&lt;br /&gt;
f&lt;br /&gt;
 достижима по плотности из точки&lt;br /&gt;
X&lt;br /&gt;
, но точка&lt;br /&gt;
X&lt;br /&gt;
 не достижима по плотности из точ-&lt;br /&gt;
ки&lt;br /&gt;
f&lt;br /&gt;
 (рис. 3). &lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма является нахождение &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей каждой точки входного множества &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Для решения этой задачи требуется найти расстояния между любыми двумя точками множества &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; по заданной метрике. Например, если используется расстояние Минковского порядка &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, то расстояние между точками &amp;lt;math&amp;gt;p=(p_1,...,p_n) \in X&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;q=(q_1,...,q_n) \in X&amp;lt;/math&amp;gt; вычисляется как &amp;lt;math&amp;gt;D(p, q) = (\sum_{i = 1}^{n}|p_i - q_i|^k)^{1 / k}&amp;lt;/math&amp;gt;, частным случаем которой при &amp;lt;math&amp;gt;k = 2&amp;lt;/math&amp;gt; является широко распространённая евклидова метрика &amp;lt;math&amp;gt;D(p, q) = \sqrt{\sum_{i = 1}^{n} (p_i - q_i)^2}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Как записано и в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вызовы функции &amp;lt;math&amp;gt;request\_neighbours&amp;lt;/math&amp;gt; получения &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей и нахождение расстояний между точками множества &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;DBSCAN&amp;lt;/math&amp;gt; проходит через все точки множества &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и определяет, являются ли они шумом или началом нового кластера. &lt;br /&gt;
В последнем случае новому кластеру присваивается уникальный номер и вызывается функция расширения кластера.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;math&amp;gt;DBSCAN(\varepsilon, MinPts)&amp;lt;/math&amp;gt;&lt;br /&gt;
   &amp;lt;math&amp;gt;C = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
   for &amp;lt;math&amp;gt;\forall p \in X&amp;lt;/math&amp;gt;&lt;br /&gt;
      if &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; is visited then&lt;br /&gt;
         continue&lt;br /&gt;
      mark &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; as visited&lt;br /&gt;
      &amp;lt;math&amp;gt;neighbours&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;request\_neighbours(p, \varepsilon)&amp;lt;/math&amp;gt;&lt;br /&gt;
      if &amp;lt;math&amp;gt;| neighbours | &amp;lt; MinPts&amp;lt;/math&amp;gt; then&lt;br /&gt;
         mark &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; as &amp;lt;math&amp;gt;NOISE&amp;lt;/math&amp;gt;&lt;br /&gt;
      else&lt;br /&gt;
         &amp;lt;math&amp;gt;C = next\_cluster&amp;lt;/math&amp;gt;&lt;br /&gt;
         &amp;lt;math&amp;gt;expand\_cluster(p, neighbours, C, \varepsilon, MinPts)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;expand\_cluster&amp;lt;/math&amp;gt; рекурсивно проходит через все точки множества &amp;lt;math&amp;gt;neighbours&amp;lt;/math&amp;gt; - соседей точки &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt;, &lt;br /&gt;
и определяет, принадлежат ли эти точки тому же кластеру &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;, тем самым расширяя этот кластер.&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;math&amp;gt;expand\_cluster(p, neighbours, C, \varepsilon, MinPts)&amp;lt;/math&amp;gt;&lt;br /&gt;
   add &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; to cluster &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;&lt;br /&gt;
   for &amp;lt;math&amp;gt;\forall p&#039; \in neighbours&amp;lt;/math&amp;gt;&lt;br /&gt;
      if &amp;lt;math&amp;gt;p&#039;&amp;lt;/math&amp;gt; is not visited &lt;br /&gt;
         mark &amp;lt;math&amp;gt;p&#039;&amp;lt;/math&amp;gt; as visited&lt;br /&gt;
         &amp;lt;math&amp;gt;neighbours&#039;&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;request\_neighbours(p, \varepsilon)&amp;lt;/math&amp;gt;&lt;br /&gt;
         if &amp;lt;math&amp;gt;| neighbours&#039; | \ \ge MinPts&amp;lt;/math&amp;gt;&lt;br /&gt;
            &amp;lt;math&amp;gt;neighbours&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;neighbours \cup neighbours&#039;&amp;lt;/math&amp;gt;  &lt;br /&gt;
      if &amp;lt;math&amp;gt;p&#039;&amp;lt;/math&amp;gt; is not yet member of any cluster&lt;br /&gt;
         add &amp;lt;math&amp;gt;p&#039;&amp;lt;/math&amp;gt; to cluster &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;request\_neighbours&amp;lt;/math&amp;gt; возвращает для точки &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; множество всех её &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей, &lt;br /&gt;
используя функцию расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;&lt;br /&gt;
 &amp;lt;math&amp;gt;request\_neighbours(p, \varepsilon)&amp;lt;/math&amp;gt;&lt;br /&gt;
    return &amp;lt;math&amp;gt;\{ p&#039; \ | \ \forall p&#039; \in X: D(p, p&#039;) &amp;lt; \varepsilon \}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
DBSCAN проходит через каждую точку входного множества, возможно, по несколько раз. Временная сложность зависит в большей степени от вызова функции &amp;lt;math&amp;gt;request\_neighbours&amp;lt;/math&amp;gt; (нахождение &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей для заданной точки). Эта функция вызывается ровно один раз для каждой точки множества &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если использовать индексированную структуру данных (например, R-деревья), выполняющую операцию &amp;lt;math&amp;gt;request\_neighbours&amp;lt;/math&amp;gt; за &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt;, то суммарная сложность алгоритма в среднем составит &amp;lt;math&amp;gt;O(n \log n)&amp;lt;/math&amp;gt;, с учётом хорошо подобранного параметра &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;, такого что в среднем &amp;lt;math&amp;gt;request\_neighbours&amp;lt;/math&amp;gt; возвращает &amp;lt;math&amp;gt;O(\log n)&amp;lt;/math&amp;gt; точек. Без использования ускоряющих структур или на вырожденных данных (таких, что все точки находятся на расстоянии меньшем, чем &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt; друг от друга) сложность по времени в худшем случае будет &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Расстояния между точками можно вычислить заранее за &amp;lt;math&amp;gt;O(\frac {n(n - 1)}{2})&amp;lt;/math&amp;gt;, например в виде матрицы расстояний, но это потребует &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt; памяти. Иначе, расстояния будут вычисляться при каждом запуске функции &amp;lt;math&amp;gt;request\_neighbours&amp;lt;/math&amp;gt; за &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; и потребуют &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt; памяти. Итоговая сложность вычисления расстояний в таком случае составляет &amp;lt;math&amp;gt;O(n^2)&amp;lt;/math&amp;gt;. Сложность рассчета расстояний зависит от природы объектов из &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и заданной метрики &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Например, если &amp;lt;math&amp;gt;X\subset\mathbb{R}^m&amp;lt;/math&amp;gt;, то сложность равна &amp;lt;math&amp;gt;O(m)&amp;lt;/math&amp;gt;, но оценка может быть улучшена при использовании векторных операций.&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
Опишем граф алгоритма&amp;lt;ref&amp;gt;Воеводин В.В.  Математические основы параллельных вычислений// М.: Изд. Моск. ун-та, 1991. 345 с.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ - Петербург, 2002. – 608 с.&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;Фролов А.В.. Принципы построения и описание языка Сигма. Препринт ОВМ АН N 236. М.: ОВМ АН СССР, 1989.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Dbscan abstract.png |thumb|right|320px| Рис. 2. Внешний цикл алгоритма.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На рис. 2 изображен информационный граф внешнего цикла алгоритма, который соответствует коду основной функции &amp;lt;math&amp;gt;DBSCAN&amp;lt;/math&amp;gt;:&lt;br /&gt;
*Макрооперация &#039;&#039;Init&#039;&#039; заключается в получении множества &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; и инициирования вспомогательных структур. &lt;br /&gt;
*Макрооперация &#039;&#039;Choose&#039;&#039; производит выбор непосещенной точки из &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;.&lt;br /&gt;
*Макрооперация &#039;&#039;Build cluster&#039;&#039; строит кластер, если точка ядровая, или объявляет ее шумом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Переход от &#039;&#039;Build cluster&#039;&#039; к &#039;&#039;Choose&#039;&#039; заключает в себе зависимость данных о принадлежности некоторых точек к текущему кластеру или шуму и об их посещенности.&lt;br /&gt;
&lt;br /&gt;
[[File:Expand cluster 2.png |thumb|right|600px| Рис. 3. Расширение кластера.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На рис. 3 изображен информационный граф алгоритма расширения кластера из начальной точки кластера:&lt;br /&gt;
*Макрооперация &#039;&#039;Init&#039;&#039; заключается в создании кластера из его начальной вершины.&lt;br /&gt;
*Макрооперация &#039;&#039;Nε&#039;&#039; вычисляет множество &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей.&lt;br /&gt;
*Желтым цветом обозначены узлы, в которых точки из &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей классифицируются на ядровые, граничные точки и шум. В рамках операции для конкретного соседа вычисляется множество его &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей.&lt;br /&gt;
*Макрооперации &#039;&#039;Ñε&#039;&#039;, &#039;&#039;Ňε&#039;&#039;, ... производят объединение входных множеств.&lt;br /&gt;
*Макрооперация &#039;&#039;Ø&#039;&#039; выполняется тогда, когда объединение входных множеств является пустым.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:N eps 3.png         |thumb|right|320px| Рис. 4. Подсчет &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей.]]&lt;br /&gt;
&lt;br /&gt;
На рис. 4 изображен информационный граф алгоритма вычисления множества &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей:&lt;br /&gt;
*Операция &#039;&#039;D&#039;&#039; - вычисление расстояния между точками.&lt;br /&gt;
*Операция &#039;&#039;ε&#039;&#039; - сравнение расстояния с ε.&lt;br /&gt;
*Операция &#039;&#039;U&#039;&#039; - объединение результатов.&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Поиск &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;-соседей требует вычисления &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; расстояний (функция &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;) и выполнения &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; сравнений с &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;. Эти операции для каждой пары точек независимы и могут быть выполнены параллельно. Таким образом, при наличии неограниченного числа процессоров сложность поиска составит &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt;. Т.к. поиск выполняется для каждой точки ровно один раз, параллельная сложность всего алгоритма составит &amp;lt;math&amp;gt;O(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вход алгоритма: множество точек X из n-мерного пространства, на котором определена функция расстояния D. В наиболее распространенном случае пространственной кластеризации используется Евлидово расстояние между векторами из &amp;lt;math&amp;gt;\mathbb{R}^n&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Выход алгоритма: размеченное множество точек &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, в котором каждой точке соответствует номер ее кластера. Обычно каждой точке из &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt; сопоставляется ее номер, а на выходе алгоритм дает отображение номеров точек в номера соответствующих им кластеров, например в виде вектора размера &amp;lt;math&amp;gt;|X|&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;
# параллельная реализация сбалансирована по количеству и виду производимых операций (вычисление расстояния, сравнение с &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Недостатки алгоритма ===&lt;br /&gt;
&lt;br /&gt;
# не детерминирован: граничные точки, достижимые из более, чем одного кластера, могут быть частью любого из них в зависимости от порядка обрабатываемых данных. Однако такая ситуация возникает редко, а относительно ядровых точек и шума DBSCAN детерминирован. Впрочем, от недетерминизма можно избавиться, если считать все граничные точки шумом (алгоритм DBSCAN*);&lt;br /&gt;
# качество алгоритма зависит от используемой функции расстояния &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;. Наиболее часто используемое Евклидово расстояние в многомерных множествах может оказаться практически бесполезным из-за так называемого &amp;quot;проклятия размерности&amp;quot;, значительно затрудняя нахождение подходящего значения &amp;lt;math&amp;gt;\varepsilon&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;
!!! ЭКСПЕРИМЕНТЫ ДО 15 НОЯБРЯ !!!&lt;br /&gt;
&lt;br /&gt;
== Динамические характеристики и эффективность реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Выводы для классов архитектур ==&lt;br /&gt;
&lt;br /&gt;
== Существующие реализации алгоритма ==&lt;br /&gt;
&lt;br /&gt;
* [http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html Scikit learn (Python)]&lt;br /&gt;
* [https://cran.r-project.org/web/packages/dbscan/dbscan.pdf R-project] ([https://github.com/mhahsler/dbscan github])&lt;br /&gt;
* [https://www.mathworks.com/matlabcentral/fileexchange/52905-dbscan-clustering-algorithm Matlab]&lt;br /&gt;
* P-DBSCAN (Parallel DBSCAN)&amp;lt;ref&amp;gt;Chen, Min, Xuedong Gao, and HuiFei Li. &amp;quot;Parallel DBSCAN with priority r-tree.&amp;quot; Information Management and Engineering (ICIME), 2010 The 2nd IEEE International Conference on. IEEE, 2010.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Parallel DBSCAN with MPI&amp;lt;ref&amp;gt;Savvas, Ilias K., and Dimitrios Tselios. &amp;quot;Parallelizing DBSCaN Algorithm Using MPI.&amp;quot; Enabling Technologies: Infrastructure for Collaborative Enterprises (WETICE), 2016 IEEE 25th International Conference on. IEEE, 2016.&amp;lt;/ref&amp;gt;&lt;br /&gt;
* PDSDBSCAN (Parallel Disjoint-Set DBSCAN)&amp;lt;ref&amp;gt;Patwary, Md Mostofa Ali, et al. &amp;quot;A new scalable parallel DBSCAN algorithm using the disjoint-set data structure.&amp;quot; High Performance Computing, Networking, Storage and Analysis (SC), 2012 International Conference for. IEEE, 2012.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21403</id>
		<title>Участник:Dmitry/Плотностный алгоритм кластеризации</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:Dmitry/%D0%9F%D0%BB%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%BD%D1%8B%D0%B9_%D0%B0%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&amp;diff=21403"/>
		<updated>2016-12-19T15:35:05Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: Новая страница: «Авторы описания:  Титов Д.Е.  = Свойства и структура алгоритма =  == Общее оп…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: [[Участник:Dmitry | Титов Д.Е.]]&lt;br /&gt;
&lt;br /&gt;
= Свойства и структура алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Общее описание алгоритма ==&lt;/div&gt;</summary>
		<author><name>Dmitry</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:Dmitry&amp;diff=21402</id>
		<title>Участник:Dmitry</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:Dmitry&amp;diff=21402"/>
		<updated>2016-12-19T15:20:41Z</updated>

		<summary type="html">&lt;p&gt;Dmitry: Новая страница: «Титов Дмитрий Евгеньевич, студент факультета ВМК МГУ имени М.В. Ломоносова, 619 группа»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Титов Дмитрий Евгеньевич, студент факультета ВМК МГУ имени М.В. Ломоносова, 619 группа&lt;/div&gt;</summary>
		<author><name>Dmitry</name></author>
	</entry>
</feed>