Участник:Руслан/Плотностный алгоритм кластеризации
Плотностный алгоритм кластеризации DBSCAN | |
Последовательный алгоритм | |
Последовательная сложность | [math]O(n \log n)[/math] |
Объём входных данных | [math]n[/math] |
Объём выходных данных | [math]n[/math] |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | [math]O(|X| \log |X|)[/math] |
Ширина ярусно-параллельной формы | [math]O(m)[/math] |
Основной автор описания: Кучеров Р.И.
Алгоритм DBSCAN (Density Based Spatial Clustering of Applications with Noise) - плотностный алгоритм для кластеризации пространственных данных с присутствием шума), был предложен Мартином Эстер, Гансом-Питером Кригель и коллегами в 1996 году как решение проблемы разбиения (изначально пространственных) данных на кластеры произвольной формы. Большинство алгоритмов, производящих плоское разбиение, создают кластеры по форме близкие к сферическим, так как минимизируют расстояние до центра кластера. Авторы DBSCAN экспериментально показали, что их алгоритм способен распознать кластеры различной формы.
Содержание
- 1 ЧАСТЬ. Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 ЧАСТЬ. Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 ЧАСТЬ. Свойства и структура алгоритма
Кластеризация – это процесс разбиения множества элементов на непересекающиеся кластеры, так, чтобы в каждом кластере все элементы были схожи в каком-то смысле, а объекты разных кластеров существенно отличались.
1.1 Общее описание алгоритма
Идея, положенная в основу алгоритма, заключается в том, что внутри каждого кластера наблюдается типичная плотность точек (объектов), которая заметно выше, чем плотность снаружи кластера, а также плотность в областях с шумом ниже плотности любого из кластеров. Ещё точнее, что для каждой точки кластера её соседство заданного радиуса должно содержать не менее некоторого числа точек, это число точек задаётся пороговым значением. Алгоритм DBSCAN для заданных значений параметров [math]\varepsilon[/math] и MinPts исследует кластер следующим образом: сначала выбирает случайную точку, являющуюся ядровой, в качестве затравки, затем помещает в кластер саму затравку и все точки, плотно-достижимые из неё.
1.2 Математическое описание алгоритма
Исходные данные: объекты, которые нужно кластеризовать, параметры [math]MinPts, \ \varepsilon[/math] . Между объектами можно считать расстояния.
Вычисляемые данные: разбиение объектов по кластерам. Количество кластеров зависит от исходных данных.
Для построения оценки плотности, на основе соседства точек вводятся понятия достижимости и связности. Под [math]\varepsilon[/math] -соседями точки [math]x \in X[/math] понимается множество точек, расстояние до которых не превышает [math]\varepsilon[/math] , т. е. [math]N_\varepsilon (x) = \{y \in X | D(x, y) \le \varepsilon\}.[/math] Тогда точка y достижима из точки [math]x[/math], если существует последовательность точек [math]x^{(1)}=x, x^{(2)},... , x^{(p-1)}, x^{(p)}=y[/math], для которой выполнено:
[math]\begin{align} x^{(i+1)} \in N_\varepsilon (x^{(i)}), i=1,... ,p-1 \\ \mid N_\varepsilon (x^{(i)}) \mid \ge MinPts, i=1,... ,p-1 \end{align}[/math]
Здесь значение [math]MinPts[/math] задаётся пользователем и регулирует порог «шума». Согласно второму условию, у точек, находящихся внутри кластера, должно быть не менее [math]MinPts \ \varepsilon[/math] -соседей. Такие точки называются «ядрами». Остальные точки разделяются на граничные (имеющие менее [math]MinPts \ \varepsilon[/math] -cоседей, но достижимые из какого-либо «ядра») и шумовые. Две точки связны, если существует «ядро», из которого они обе достижимы. При такой постановке задачи, под кластером понимается максимальное связное подмножество множества X . Точки, не попавшие в какой-либо кластер (не принадлежащие [math]\varepsilon[/math] -окрестности какого-либо «ядра»), относятся к классу «шум».
1.3 Вычислительное ядро алгоритма
Вычислительное ядро последовательной версии зависти от поиска всех точек в [math]\varepsilon[/math]-окрестности конкретной точки. Из-за поиска [math]\varepsilon[/math]-соседства алгоритм имеет квадратичную вычислительную сложность [math]O(n^2)[/math] (где n - количество точек). Но если задействовать K-мерное дерево, то можно снизить сложность до [math]O(\text{n log n})[/math].
1.4 Макроструктура алгоритма
Алгоритм DBSCAN использует пространственную структуру данных для определения соседних объектов. Это может быть R*-дерево или k-d дерево. Такие структуры данных позволяют найти все объекты в пределах определенного расстояния от текущего объекта. Также для построения этих деревьев нужно уметь находить расстояние между объектами [math]\rho(u, v)[/math] , в, это расстояние можно вводить разными способами. Например, если [math]\rho(u,v)[/math] - метрика в евклидовом пространстве, [math]u=(u_1,...,u_n)[/math] и [math](v_1,...,v_n)[/math], то расстояние вычисляется следующим образом: [math]\rho(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}.[/math]
1.5 Схема реализации последовательного алгоритма
Алгоритм начинает работу с произвольной точки [math]x \in X[/math] и возвращает [math]\varepsilon[/math] -окрестность(строка 4). Если [math]\varepsilon[/math]-окрестность содержит, как минимум minpts точек, процедура выдает новый кластер C. Алгоритм извлекает все точки в X, которые являются плотность достижима из x и добавляет их в кластер C(строки 8-17). Если в [math]\varepsilon[/math]-окрестности x точек меньше, чем minpts, то x помечается как шум(строка 6). Однако, х все еще может быть добавлены в кластер, если она определится как пограничная точка во время изучения других основных точек(строки 16-17). Поиск точек в [math]\varepsilon[/math]-окрестности(функция GETNEIGHBORS)известен, как запрос в диапазоне значений и получает все плотностно достижимые точки от главной точки(строки 8-17) известный как алгоритм наращивания областей. Заметим что кластер может быть определен однозначно, начиная с любой "ядровой" точки[1].
1: procedure DBSCAN(X, eps, minpts) 2: for each unvisited point x ∈ X do 3: mark x as visited 4: N ← GETNEIGHBORS(x, eps) 5: if |N| < minpts then 6: mark x as noise 7: else 8: C ← {x} 9: for each point x' ∈ N do 10: N ← N \ x' 11: if x' is not visited then 12: mark x' as visited 13: N' ← GETNEIGHBORS(x', eps) 14: if |N'| ≥ minpts then 15: N ← N ∪ N' 16: if x' is not yet member of any cluster then 17: C ← C ∪ {x'}
1.6 Последовательная сложность алгоритма
В общем случае алгоритм DBSCAN имеет квадратичную вычислительную сложность [math]O(n^2)[/math](где n это количество точек в X) из-за поиска [math]\varepsilon[/math]-соседства. Но если использовать пространственную индексацию (например, использую k-мерное дерево[2] или R-дерево) для поиска [math]\varepsilon[/math]-соседства, сложность снижается до [math]O(n log n)[/math][3].
1.7 Информационный граф
На рисунке 1 представлен информационный граф алгоритма кластеризации DBSCAN. На входе у нас множество точек [math]P_i[/math] и мы пробегаем по всем непосещенным точкам. Далее мы, для каждой непосещенной точки, маркируем ее как посещенную и находим всех её [math]\varepsilon[/math]-соседей(на графике это узел [math]G[/math]). Добавляем точку к кластеру(узел [math]C[/math]). Затем, пробегаем по всем плотностно-достижимых точках([math]P_j[/math]) к нашей точке, и для каждой такой точки ищем [math]\varepsilon[/math]-сосдей и добавляем их в кластер, если они ещё не принадлежат никакому кластеру.
1.8 Ресурс параллелизма алгоритма
Поиск [math]\varepsilon[/math]-соседей требует вычисления n расстояний и выполнения n сравнений с [math]\varepsilon[/math]. Эти операции для каждой пары точек независимы и могут быть выполнены параллельно. Таким образом, при наличии неограниченного числа процессоров сложность поиска составит O(1). Так как поиск выполняется для каждой точки ровно один раз, параллельная сложность всего алгоритма составит O(n).
1.9 Входные и выходные данные алгоритма
Входные данные: набор точек x, пороговое расстояние [math]\varepsilon[/math], а также минимальное количество точек, необходимых для формирования кластера, minpts.
Выход: множество кластеров С.
Если указать маленькое значение [math]\varepsilon[/math], то все точки будут шумом. Если наоборот, сделать большое значение, то кластер не будет разбит, возьмет один кластер и включит в него все точки. Также, если взять minpts слишком большое или слишком маленькое, будет либо один кластер, либо все точки шумовые. Оптимальные значения находятся опытным путем.
1.10 Свойства алгоритма
Соотношение последовательной и параллельной сложностей алгоритма является линейным (отношение квадратичной к линейной). При этом вычислительная мощность, как отношение числа операций к суммарному объему входных и выходных данных линейна.
1.10.1 Преимущества алгоритма
- не требует указать априори количество кластеров, в отличие от K-средства
- алгоритм может разбить на произвольной формы кластеры. Даже может выявить кластер находящийся внутри другого, но не пересекающийся с ним. Из-за параметра MinPts снижается так называемый эффект однолокальности(single-link)
- алгоритм имеет понятие "шума" и устойчив к выбросам
- алгоритм требует всего два параметра и в основном нечувствительны к упорядоченности изначально данных точек
- параметры MinPts и [math]\varepsilon[/math] могут быть установлены, экспертами в какой-либо области, если данные хорошо изучены.
1.10.2 Недостатки алгоритма
- алгоритм не совсем детерминирован: пограничные точки, которые доступны из более чем одного кластера могут быть частью любого кластера, в зависимости от того, как происходит обработка данных. К счастью, эта ситуация не часто возникают, и мало влияет на результат кластеризации. На основных точках и точках "шума", алгоритм детерминирован. Есть DBSCAN[4] который представляет собой вариант, который рассматривает пограничные пункты как шум, и таким образом достигается полностью детерминированный результат, а также более последовательной статистической интерпретации плотности соединенных компонентов.
- качество алогоритма зависит от меры, которую мы рассматриваем в пространстве. Наиболее распространенная мера использует евклидово расстояние.
- если данные и масштаб не очень хорошо поняты, выбирание значимого расстояния порогового [math]\varepsilon[/math] может быть затруднено.
- алгоритм не может кластеризовать данные хорошо с большими различиями в плотности
2 ЧАСТЬ. Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
ELKI предлагает реализацию DBSCAN, а также GDBSCAN и другие варианты. Эта реализация может использовать различные структуры индексов для поквадратного выполнения и поддерживает произвольное расстояние функции и произвольные типы данных, но это можно обогнать низкоуровневой оптимизацией реализации на небольших наборах данных.
Scikit-Learn включает в себя реализацию Python для DBSCAN для произвольной метрики Минковского, который может быть ускорен с помощью KD-деревьев и шаровых деревьев, но который использует в худшем случае квадратичную память.
GNU R содержит DBSCAN в fpc пакете с поддержкой произвольных функций расстояния через матриц. Однако он не имеет поддержки индекса (и, соответственно, имеет квадратичное время выполнения и сложность по памяти) и довольно медленно из-за интерпретации R. Более быстрая версия реализована на языке C++ с использованием KD-деревьев (только когда расстояние Евклидово ) в пакете R dbscan.
SPMF предлагает GPL-V3 java-реализацию алгоритма DBSCAN с поддержкой KD-дерева (только для параметра расстояние Евклида).
Weka содержит (как дополнительный пакет в последних версиях) базовую реализацию DBSCAN, которая работает за квадратичное время и линейную память.
Apache Commons Мath содержит java-реализацию алгоритма выполняющегося за квадратичное время.
3 Литература
- Ester, Martin, et al. "A density-based algorithm for discovering clusters in large spatial databases with noise." Kdd. Vol. 96. No. 34. 1996.
- Воеводин В.В. Математические основы параллельных вычислений// М.: Изд. Моск. ун-та, 1991. 345 с.
- Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. – СПб.: БХВ - Петербург, 2002. – 608 с.
- Фролов А.В.. Принципы построения и описание языка Сигма. Препринт ОВМ АН N 236. М.: ОВМ АН СССР, 1989.