1632
правки
Изменения
м
Дерево строится <tex>\mu_a := init(X^m)</tex> <font color="gray"># Инициализируем произвольно начальное приближение для центров кластеров <tex>a \in Y</tex></font>. (Можно наиболее удалённые друг от листьев к корню. В начальный момент времени каждый объект содержится друга объекты выборки) <tex>A := [ -1 \: | \: for \: x_i \in X^m ]</tex> <font color="gray"># Инициализируем массив отображений из объектов выборки в собственном кластере.их кластеры</font> <tex>changed := True</tex>Далее происходит итеративный процесс слияния двух ближайших кластеров до тех пор, <font color="blue"><tex>while</tex></font> <tex>changed</tex>: <font color="gray"># Повторяем пока все кластеры не объединятся в один или не будет найдено необходимое число кластеров.<tex>A_i</tex> изменяются</font>На каждом шаге необходимо уметь вычислять расстояние между кластерами и пересчитывать расстояние между новыми кластерами. <tex>changed := False</tex>Расстояние между одноэлементными кластерами определяется через расстояние между объектами <font color="blue"><tex>for</tex></font> <tex>x_i \in X^m</tex>: <font color="gray"># Относим каждый <tex>x_i</tex> к ближайшему центру</font> <tex>\mathrmA_{Ri, old}(:= A_i</tex> <tex>A_i := arg \min_{xa \in Y}, ||x_i - \mu_a||</tex> <font color="blue"><tex>if</tex></font> <tex>A_i \neq A_{y\i, old}) </tex>: <tex>changed := True</tex> <font color= "blue"><tex>for</tex></font> <tex>a \rho(x, y)in Y</tex>.: <font color="gray"># Вычисляем новые положения центров</font>Для вычисления расстояния <tex>\mathrmmu_a := \frac{\sum_{i = 1}^{m}[A_i = a] x_i}{\sum_{Ri = 1}^{m}[A_i = a]}(U, V)</tex> между кластерами <font color="blue"><tex>\mathrm{U}return</tex> и </font> <tex>\mathrm{V}mu_a, \: A</tex> на практике используются различные функции в зависимости от специфики задачи. <font color="gray"># Возвращаем центры кластеров и распределение по ним объектов выборки</font>
=== Формула Ланса-Уильямса ===На каждом шаге необходимо уметь быстро подсчитывать расстояние от образовавшегося кластера вход алгоритму подаётся набор точек, параметры <tex>\mathrm{W}=\mathrm{U}\cup\mathrm{V}epsilon</tex> до любого другого кластера (радиус окружности) и <tex>\mathrm{S}m</tex>(минимальное число точек в окрестности). Для выполнения кластеризации потребуется поделить точки на четыре вида: основные точки, прямо достижимые, используя известные расстояния с предыдущих шаговдостижимые и шумовые.Это легко выполняется при использовании формулы* Точка является ''основной'', предложенной Лансом если в окружности с центром в этой точке и Уильямсом в 1967 году:радиусом <tex>\epsilon</tex> находится как минимум <tex>m</tex> точек. * Точка <centertex>a</tex> является ''прямо достижимой'' из основной точки <tex>b</tex>\mathrm{R}(W, S) = \alpha_U \cdot \mathrm{R}(Uесли <tex>a</tex> находится на расстоянии, S) + \alpha_V \cdot \mathrm{R}(V, S) + \beta \cdot \mathrmне большем <tex>{R}(U, V) + \gamma \cdot |\mathrm{Repsilon}(U, S) - \mathrm{R}(V, S)| </tex>от точки <tex>b</centertex>.* Точка <tex>a</tex> является ''достижимой'' из <tex>b</tex>, где если существует путь <tex>\alpha_Up_1, \alpha_Vdots, \betap_n</tex> с <tex>p_1 = a</tex> и <tex>p_n = b</tex>, \gamma где каждая точка </tex> p_{{---i+1}} числовые параметры</tex> прямо достижима из точки <tex>p_i</tex> .* Все остальные точки, которые не достижимы из основных точек, считаются ''шумовыми''.
Каждая Основная точка вместе со всеми достижимыми из указанных выше функций расстояния удовлетворяет формуле Ланса-Уильямса со следующими коэффициентами:* '''Метод одиночной связи''' (англ. ''single linkage''): <tex>\alpha_U = \dfrac{1}{2}, \alpha_V = \dfrac{1}{2}, \beta = 0, \gamma = -\dfrac{1}{2}</tex>* '''Метод полной связи''' (англ. ''complete linkage''): <tex>\alpha_U = \dfrac{1}{2}, \alpha_V = \dfrac{1}{2}, \beta = 0, \gamma = \dfrac{1}{2} </tex>* ''нее точками формирует 'Метод средней связи'кластер'' (англ. ''UPGMA (Unweighted Pair Group Method with Arithmetic mean)''): <tex>\alpha_U = \dfrac{|U|}{|W|}, \alpha_V = \dfrac{|V|}{|W|}, \beta = 0В кластер будут входить как основные, \gamma = 0 </tex>* '''Центроидный метод''' (англтак и неосновные точки. ''UPGMC (Unweighted Pair Group Method with Centroid average)''): <tex>\alpha_U = \dfrac{|U|}{|W|}, \alpha_V = \dfrac{|V|}{|W|}, \beta = -\alpha_U \cdot \alpha_VТаким образом, \gamma = 0</tex>* '''Метод Уорда''' (англкаждый кластер содержит по меньшей мере одну основную точку. ''Ward's method''): <tex>\alpha_U = \dfrac{|S|+|U|}{|S|+|W|}, \alpha_V = \dfrac{|S|+|V|}{|S|+|W|}, \beta = \dfrac{-|S|}{|S|+|W|}, \gamma = 0 </tex>
=== Свойство монотонности ===Введем обозначение Алгоритм начинается с произвольной точки из набора, которая еще не просматривалась. Для точки ищется <tex>{\mathrm{R_tepsilon}</tex> {{---}} расстояние между кластерамиокрестность. Если она не содержит как минимум <tex>m</tex> точек, то помечается как шумовая, иначе образуется кластер <tex>K</tex>, который включает все точки из окрестности. Если точка из окрестности уже является частью другого кластера <tex>C_j</tex>, выбранными на шаге то все точки данного кластера добавляются в кластер <tex>tK</tex> для объединения. Затем выбирается и обрабатывается новая, не посещённая ранее точка, что ведёт к обнаружению следующего кластера или шума.
Дендрограмма позволяет представлять зависимости между множеством объектов с любым числом заданных характеристикНа выходе получаем разбиение на двумерном графике, где по одной кластеры и шумовые объекты. Каждый из осей откладываются все объекты, а по другой {{---}} расстояние полученных кластеров <tex>\mathrm{R_t}C_j</tex>.является непустым множеством точек и удовлетворяет двум условиям:Если не накладывать на это расстояние никаких ограничений, * Любые две точки в кластере попарно связаны (то дендрограмма будет иметь большое число самопересечений и изображение перестанет быть наглядным.Чтобы любой кластер мог быть представлен есть найдется такая точка в виде непрерывного отрезка на оси объектов и ребра не пересекалиськластере,необходимо наложить ограничение монотонности на <tex>\mathrm{R_t}</tex>из которой достижимы обе этих точки).{{Определение|definition =Функция расстояния <tex>\mathrm{R}</tex> является '''монотонной'''* Если точка достижима из какой-либо точки кластера, если на каждом следующем шаге расстояние между кластерами не уменьшается:<tex>\mathrm{R_2} \leqslant \mathrm{R_3} \leqslant \dots \leqslant \mathrm{R_m}</tex>}}то она принадлежит кластеру.
Расстояние является монотонным, если для коэффициентов в формул Ланса-Уильямса верна теорема Миллигана.{{Теорема|author=Миллиган, 1979|statement=Если выполняются следующие три условия, то кластеризация является монотоннойРассмотрим код:# <tex>\alpha_U \geqslant 0, \alpha_V \geqslant 0 </tex>;# <tex>\alpha_U + \alpha_V + \beta \geqslant 1</tex>;# <tex>\min\{\alpha_U, \alpha_V\} + \gamma \geqslant 0 </tex>.}}
Из перечисленных выше расстояний теореме удовлетворяют всеПусть для каждого <tex>x \in X^m</tex> имеем посчитанной его <tex>\epsilon</tex>-окрестность <tex>U_{\epsilon}(x) = \{x' \in X^m \: | \: \rho(x, кроме центроидногоx') \lt \epsilon\}</tex>.
ОднакоDBSCAN находит практическое применение во многих реальных задачах, когда число кластеров заранее неизвестно например, в маркетинге: необходимо предложить покупателю релевантный товар, который подойдет под его заказ. Выбрать такой товар можно, если посмотреть на похожие заказы других покупателей {{---}} в таком случае похожие заказы образуют кластер вещей, которые часто берут вместе. Похожим образом с помощью DBSCAN можно исследовать и объектов в выборке не очень многонаходить общие интересы людей, делить их на социальные группы, бывает полезно изучить дендрограмму целикоммоделировать поведение посетителей сайта. Алгоритм также может использоваться для [[Сегментация изображений|сегментации изображений]].
=== Пример === <font color=darkgreen"gray"># Подключение библиотекimporting package and its' dependencies</font> from scipy.cluster.hierarchy import linkage, dendrogram from sklearn import datasetslibrary(ClusterR) import matplotlib.pyplot as plt <texfont color="gray"># reading data</texfont> data <- read.csv(<font color=darkgreen"green"># Создание полотна для рисования"data.csv"</font> fig = plt.figure(figsize=(15, 30)) fig.patch.set_facecolor('white') <texfont color="gray"># evaluating model</texfont> model <- KMeans_arma(data, <font color=darkgreen>"# Загрузка набора данных "Ирисы Фишера660099">clusters</font> iris = datasets.load_iris() <texfont color="blue">2</texfont> , <font color=darkgreen"#660099"># Реализация иерархической кластеризации при помощи функции linkagen_iter</font> mergings = linkage(iris.data<font color="blue">10</font>, method<font color='ward') "#660099">seed_mode<tex/font>= <font color="green">"random_subset"</texfont>, <font color=darkgreen"#660099"># Построение дендрограммы. Разными цветами выделены автоматически определенные кластерыverbose</font> R = dendrogram(mergingsT, labels<font color=[iris.target_names[i] for i in iris.target], orientation = 'left', leaf_font_size "#660099">CENTROIDS</font> = 12NULL) <tex></tex> <font color=darkgreen"gray"># Отображение дендрограммыpredicting results</font> plt.showpredictions <- predict_KMeans(test_data, model)
{| class="wikitable"
| style="text-align:center;" colspan = 4 |Дендрограммы кластеризации ирисов Фишера<ref>[https://ru.wikipedia.org/wiki/%D0%98%D1%80%D0%B8%D1%81%D1%8B_%D0%A4%D0%B8%D1%88%D0%B5%D1%80%D0%B0 Википедия {{---}} Ирисы Фишера]</ref> в зависимости от функции расстояния между кластерами
|-
| style="padding:5px;" |[[Файл:hierarchy_min.png|270px|Расстояние минимума.]]
| style="padding:5px;" |[[Файл:hierarchy_max.png|270px|Расстояние максимума.]]
| style="padding:5px;" |[[Файл:hierarchy_avg.png|270px|Расстояние среднего.]]
| style="padding:5px;" |[[Файл:hierarchy_ward.png|270px|Расстояние Уорда.]]
|-
| style="text-align:center;" | Метод одиночной связи
| style="text-align:center;" | Метод полной связи
| style="text-align:center;" | Метод средней связи
| style="text-align:center;" | Метод Уорда
|}
Лучше всего с задачей справился == См. также ==* [[Оценка_качества_в_задаче_кластеризации|Оценка качества в задаче кластеризации]]* [[EM-алгоритм|EM-алгоритм с использованием расстояния Уорда]]* [[Иерархическая_кластеризация|Иерархическая кластеризация]]* [[k-средних|<tex>\mathrm{k}</tex>-средних]]<sup>[на 28. Он точно выделил класс ''Iris setosa'' и заметно отделили вид ''Iris virginica'' от ''Iris versicolor''01.18 не создан]</sup>
* [https://ru.wikipedia.org/wiki/%D0%98%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F Википедия {{---}} Иерархическая кластеризация]
* [https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html Scipy Documentation {{---}} Hierarchical clustering (scipy.cluster.hierarchy)]
rollbackEdits.php mass rollback
[[Файл:clusters.png|thumb|300px|Пример кластеризации]]
'''Кластеризация''' (англ. ''cluster analysis'') {{---}} задача группировки множества объектов на подмножества ('''кластеры''') таким образом,
чтобы объекты из одного кластера были более похожи друг на друга, чем на объекты из других кластеров по какому-либо критерию.
Задача кластеризации относится к классу задач обучения без учителя.
== Постановка задачи кластеризации ==
Пусть <tex>X</tex> {{---}} множество объектов, <tex>Y</tex> {{---}} множество идентификаторов (меток) кластеров.
Решение задачи кластеризации объективно неоднозначно по ряду причин:
* не Не существует однозначного критерия качества кластеризации. Известен ряд алгоритмов, осуществляющих разумную кластеризацию "по построению", однако все они могут давать разные результаты. Следовательно, для определения качества кластеризации и оценки выделенных кластеров необходим эксперт предметной области.;* число Число кластеров, как правило, заранее не известно и выбирается по субъективным критериям. Даже если алгоритм не требует изначального знания о числе классов, конкретные реализации зачастую требуют указать этот параметр<ref>[https://scikit-learn.org/0.20stable/modules/clustering.html scikit-learn {{---}} Clustering]</ref>.;* результат Результат кластеризации существенно зависит от метрики. Однако существует ряд рекомендаций по выбору метрик для определенных классов задач.<ref>Cornwell, B. (2015). Linkage Criteria for Agglomerative Hierarchical Clustering. Social Sequence Analysis, 270–274</ref>. Число кластеров фактически является гиперпараметром для алгоритмов кластеризации. Подробнее про другие гиперпараметры и их настройку можно прочитать в статье<ref>Shalamov Viacheslav, Valeria Efimova, Sergey Muravyov, and Andrey Filchenkov. "Reinforcement-based Method for Simultaneous Clustering Algorithm Selection and its Hyperparameters Optimization." Procedia Computer Science 136 (2018): 144-153.</ref>. == Теорема невозможности Клейнберга ==Для формализации алгоритмов кластеризации была использована аксиоматическая теория. Клейнберг постулировал три простых свойства в качестве аксиом кластеризации и доказал теорему, связывающую эти свойства.{{Определение|definition =Алгоритм кластеризации <tex>a</tex> является '''масштабно инвариантным''' (англ. ''scale-invariant''), если для любой функции расстояния <tex>\rho</tex> и любой константы <tex>\alpha > 0</tex> результаты кластеризации с использованием расстояний <tex>\rho</tex> и <tex>\alpha\cdot\rho</tex> совпадают.}} Первая аксиома интуитивно понятна. Она требует, чтобы функция кластеризации не зависела от системы счисления функции расстояния и была нечувствительна к линейному растяжению и сжатию метрического пространства обучающей выборки.{{Определение|definition ='''Полнота''' (англ. ''Richness''). Множество результатов кластеризации алгоритма <tex>a</tex> в зависимости от изменения функции расстояния <tex>\rho</tex> должно совпадать со множеством всех возможных разбиений множества объектов <tex>X</tex>.}} Вторая аксиома утверждает, что алгоритм кластеризации должен уметь кластеризовать обучающую выборку на любое фиксированное разбиение для какой-то функции расстояния <tex>\rho</tex>.{{Определение|definition =Функция расстояния <tex>{\rho}'</tex> является '''допустимым преобразованием''' функции расстояния <tex>\rho</tex>, если#<tex>{\rho}'(x_i, x_j) \leqslant \rho(x_i, x_j)</tex>, если <tex>x_i</tex> и <tex>x_j</tex> лежат в одном кластере;#<tex>{\rho}'(x_i, x_j) \geqslant \rho(x_i, x_j)</tex>, если <tex>x_i</tex> и <tex>x_j</tex> лежат в разных кластерах.}}{{Определение|definition =Алгоритм кластеризации является '''согласованным''' (англ. ''consistent''), если результат кластеризации не изменяется после допустимого преобразования функции расстояния.}} Третья аксиома требует сохранения кластеров при уменьшении внутрикластерного расстояния и увеличении межкластерного расстояния. {| class="wikitable"| style="text-align:center; font-weight:bold;" colspan=3|Примеры преобразований с сохранением кластеров|-| style="padding:5px;" |[[Файл:cluster_0.png|300px]]| style="padding:5px;" |[[Файл:clusters_scale_inv.png|300px]]| style="padding:5px;" |[[Файл:cluster_consist.png|300px]]|-| style="text-align:center;width:305px;" | Исходное расположение объектов и их кластеризация| style="text-align:center;width:305px;" | Пример масштабной инвариантности. Уменьшен масштаб по оси ординат в два раза.| style="text-align:center;width:305px;" | Пример допустимого преобразования. Каждый объект в два раза приближен к центроиду своего класса. Внутриклассовое расстояние уменьшилось, межклассовое увеличилось.|} Исходя из этих аксиом Клейнберг сформулировал и доказал теорему:{{Теорема|author=Клейнберга|about=о невозможности|statement=Для множества объектов, состоящего из двух и более элементов, не существует алгоритма кластеризации, который был бы одновременно масштабно-инвариантным, согласованным и полным.}}Несмотря на эту теорему Клейнберг показал<ref>[https://www.cs.cornell.edu/home/kleinber/nips15.pdf Kleinberg J. An Impossibility Theorem for Clustering]</ref>, что иерархическая кластеризация по методу одиночной связи с различными критериями останова удовлетворяет любым двум из трех аксиом.
== Типология задач кластеризации ==
=== Типы входных данных ===
* Признаковое описание объектов. Каждый объект описывается набором своих характеристик, называемых признаками (англ. ''features''). Признаки могут быть как числовыми, так и нечисловыми.категориальными;
* Матрица расстояний между объектами. Каждый объект описывается расстоянием до всех объектов из обучающей выборки.
=== Цели кластеризации ===
* Классификация объектов. Попытка понять зависимости между объектами путем выявления их кластерной структуры. Разбиение выборки на группы схожих объектов упрощает дальнейшую обработку данных и принятие решений, позволяет применить к каждому кластеру свой метод анализа (стратегия «разделяй и властвуй»). В данном случае стремятся уменьшить число кластеров для выявления наиболее общих закономерностей.;* Сжатие данных. Можно сократить размер исходной выборки, взяв один или несколько наиболее типичных представителей каждого кластера. Здесь важно наиболее точно очертить границы каждого кластера, их количество не является важным критерием.;
* Обнаружение новизны (обнаружение шума). Выделение объектов, которые не подходят по критериям ни в один кластер. Обнаруженные объекты в дальнейшем обрабатывают отдельно.
=== Методы кластеризации ===
* Графовые алгоритмы кластеризации. Наиболее примитивный класс алгоритмов. В настоящее время практически не применяется на практике.;* Вероятностные алгоритмы кластеризации. Каждый объект из обучающей выборки относится к каждому из кластеров с определенной степенью вероятности:** [[EM-алгоритм]];* [[Иерархическая_кластеризация|Иерархические алгоритмы кластеризации]].Упорядочивание данных путем создания иерархии вложенных кластеров;** [[K-средних|Алгоритм <tex>\mathrm{k-}</tex>-средних ]]<sup>[на 28.01.19 не создан]</sup> (англ. ''<tex>\mathrm{k-}</tex>-means''). Итеративный алгоритм, основанный на минимизации суммарного квадратичного отклонения точек кластеров от центров этих кластеров;* Распространение похожести (англ. ''affinity propagation''). Распространяет сообщения о похожести между парами объектов для выбора типичных представителей каждого кластера;* Сдвиг среднего значения (англ. ''mean shift''). Выбирает центроиды кластеров в областях с наибольшей плотностью;* Спектральная кластеризация (англ. ''spectral clustering''). Использует собственные значения матрицы расстояний для понижения размерности перед использованием других методов кластеризации;* Основанная на плотности пространственная кластеризация для приложений с шумами (англ. ''Density-based spatial clustering of applications with noise'', ''DBSCAN''). Алгоритм группирует в один кластер точки в области с высокой плотностью. Одиноко расположенные точки помечает как шум. [[Файл:cluster_comparison.png|thumb|800px|center|<div style="text-align:center">Сравнение алгоритмов кластеризации из пакета scikit-learn<ref>[https://scikit-learn.org/stable/auto_examples/cluster/plot_cluster_comparison.html scikit-learn {{---}} Comparing different clustering algorithms on toy datasets]</ref></div>]] == Меры качества кластеризации ==Для оценки качества кластеризации задачу можно переформулировать в терминах задачи дискретной оптимизации. Необходимо так сопоставить объектам из множества <tex>X</tex> метки кластеров, чтобы значение выбранного функционала качества приняло наилучшее значение. В качестве примера, стремятся достичь минимума среднего внутрикластерного расстояния <tex>F_0 = \dfrac{\sum_{i<j}{[y_i=y_j]\cdot\rho(x_i, x_j)}}{\sum_{i<j}[y_i=y_j]}</tex> или максимума среднего межкластерного расстояния <tex>F_1 = \dfrac{\sum_{i<j}{[y_i\neq y_j]\cdot\rho(x_i, x_j)}}{\sum_{i<j}[y_i\neq y_j]}</tex>. Подробнее про меры качества можно прочитать в статье [[Оценка_качества_в_задаче_кластеризации|оценка качества в задаче кластеризации]]. == Применение ===== Биология и биоинформатика ===*В области экологии кластеризация используется для выделения пространственных и временных сообществ организмов в однородных условиях;* Кластерный анализ используется для группировки схожих геномных последовательностей в семейство генов, которые являются консервативными структурами для многих организмов и могут выполнять схожие функции;* Кластеризация помогает автоматически определять генотипы по различным частям хромосом;* EMАлгоритмы применяются для выделения небольшого числа групп генетических вариации человеческого генома.=== Медицина ===* Используется в позитронно-алгоритмэмиссионной томографии для автоматического выделения различных типов тканей на трехмерном изображении;* Иерархические алгоритмы кластеризацииПрименяется для выявления шаблонов устойчивости к антибиотикам; для классификации антибиотиков по типу антибактериальной активности. Упорядочивание === Маркетинг ===Кластеризация широко используется при изучении рынка для обработки данных , полученных из различных опросов.Может применяться для выделения типичных групп покупателей, разделения рынка для создания персонализированных предложений, разработки новых линий продукции.=== Интернет ===* Выделение групп людей на основе графа связей в социальных сетях;* Повышение релевантности ответов на поисковые запросы путем создания иерархии вложенных группировки веб-сайтов по смысловым значениям поискового запроса.=== Компьютерные науки ===* Кластеризация используется в сегментации изображений для определения границ и распознавания объектов;* Кластерный анализ применяется для определения образовавшихся популяционных ниш в ходе работы эволюционных алгоритмов для улучшения параметров эволюции;* Подбор рекомендаций для пользователя на основе предпочтений других пользователей в данном кластере;* Определение аномалий путем построения кластерови выявления неклассифицированных объектов. == Псевдокод некоторых алгоритмов кластеризации ===== Метод K-средних (Алгоритм Ллойда) ===Основная идея заключается в том, что на каждой итерации перевычисляется центр масс для каждого кластера, полученного на предыдущем шаге, затем объекты снова разбиваются на кластеры в соответствии с тем, какой из новых центров оказался ближе по выбранной метрике. Алгоритм завершается, когда на какой-то итерации не происходит изменения внутрикластерного расстояния. Алгоритм минимизирует сумму квадратов внутрикластерных расстояний:<tex> \sum_{i = 1}^{m} ||x_i - \mu_{a_i}||^2 \: \to \: \min_{ \{a_i\}, \{\mu_a\}}, \: \: ||x_i - \mu_a||^2 = \sum_{j = 1}^{n} (f_j(x_i) - \mu_{a_j})^2</tex>
На вход алгоритму подаётся выборка <tex>X^m == Иерархическая кластеризация ==\{{Определение|definition ='''Иерархическая кластеризация''' (англ. ''hierarchical clustering'') — множество алгоритмов кластеризацииx_1, \dots, направленных на создание иерархии вложенных разбиений исходного множества объектов.x_m \}}Иерархические алгоритмы кластеризации часто называют '''алгоритмами таксономии'''</tex> и количество кластеров <tex>K = |Y|</tex>.Для визуального представления результатов кластеризации используется '''дендрограмма''' {{---}} дерево, построенное по матрице мер близости между кластерами. В узлах дерева находятся подмножества объектов из обучающей выборки.При этом на каждом ярусе дерева множество объектов из всех узлов составляет исходное множество объектов.Объединение узлов между ярусами соответствует слиянию двух На выходе получаем центры кластеров <tex>\mu_a</tex> для кластеров. При этом длина ребра соответствует расстоянию между кластерами<tex>a \in Y</tex>.
=== Функции расстояния между кластерами DBSCAN ===* '''Метод одиночной связи''' (англ. ''single linkage''): <tex>\mathrm{R_{min}}(U, V) = \displaystyle\min_{u \in UОсновная идея метода заключается в том, v \in V} \rho(uчто алгоритм разделит заданный набор точек в некотором пространстве на группы точек, v)</tex>* '''Метод полной связи''' (англкоторые лежат друг от друга на большом расстоянии. ''complete linkage''): <tex>\mathrm{R_{max}}(UОбъекты, V) = \displaystyle\max_{u \in Uкоторые лежат отдельно от скоплений с большой плотностью, v \in V} \rho(u, v)</tex>* '''Метод средней связи''' (англбудут помечены как шумовые. ''UPGMA (Unweighted Pair Group Method with Arithmetic mean)''): <tex>\mathrm{R_{avg}}(U, V) = \displaystyle\dfrac{1}{|U| \cdot |V|}\sum_{u \in U} \sum_{v \in V} \rho(u, v)</tex>* '''Центроидный метод''' (англ. ''UPGMC (Unweighted Pair Group Method with Centroid average)''): <tex>\mathrm{R_{c}}(U, V) = \displaystyle\rho^2\left(\sum_{u \in U}\dfrac{u}{|U|}, \sum_{v \in V}\dfrac{v}{|V|}\right)</tex>* '''Метод Уорда''' (англ. ''Ward's method''): <tex>\mathrm{R_{ward}}(U, V) = \displaystyle\dfrac{|U| \cdot |V|}{|U| + |V|}\rho^2\left(\sum_{u \in U}\dfrac{u}{|U|}, \sum_{v \in V}\dfrac{v}{|V|}\right)</tex>
<tex>U := X^m</tex> <font color="gray"># Непомеченные объекты</font> <tex>A := [ -1 \: | \: for \: x_i \in X^m ]</tex> <font color="gray"># Инициализируем массив отображений из объектов выборки в их кластеры</font> <tex>a :=0</tex> <font color= Определение числа "gray"># Количество кластеров </font> <font color="blue"><tex>while</tex></font> <tex>U \neq \varnothing</tex>: <font color="gray"># Пока в выборке есть непомеченные объекты</font> <tex>x :=rand(U)</tex> <font color="gray"># Берём случайную непомеченную точку</font>Для определения числа кластеров находится интервал максимальной длины <font color="blue"><tex>if</tex></font> <tex>|U_{\mathrmepsilon}(x) < m|</tex>: <tex>mark[x]</tex> <tex>:=</tex> "<tex>noise</tex>" <font color="gray"># Пометим <tex>x</tex> как, возможно, шумовой</font> <font color="blue"><tex>else</tex></font>: <tex>K := U_{R_{t\epsilon}(x)</tex> <tex>a := a +1}} - </tex> <font color="gray"># Создадим новый кластер K</font> <font color="blue"><tex>for</tex></font> <tex>x' \in K</tex>: <font color="blue"><tex>if</tex></font> <tex>x' \mathrmin U</tex> || <tex>mark[x']</tex> <tex>==</tex> "<tex>noise</tex>": <font color="gray"># Если <tex>x'</tex> не помечен или помечен как шумовой</font> <font color="blue"><tex>if</tex></font> <tex>|U_{R_t\epsilon}(x')|\geq m</tex>.:В качестве итоговых кластеров выдаются кластеры, полученные на шаге <tex>mark[x'] :=</tex> "<tex>interior</tex>" <font color="gray"># Пометим <tex>x'</tex> как внутренний кластера <tex>K</tex></font> <tex>K := K \mathrmcup U_{t\epsilon}(x')</tex>. <font color="gray"># Добавим вместе с <tex>x'</tex> всю его окрестность</font>При этом число кластеров равно <font color="blue"><tex>else</tex></font>: <tex>mark[x'] :=</tex> "<tex>frontier</tex>" <font color="gray"># Пометим <tex>x'</tex> как граничный кластера <tex>K</tex></font> <font color="blue"><tex>for</tex></font> <tex>x_i \in K</tex>: <tex>A_i := a</tex> <tex>U := U \setminus K</tex> <font color="blue"><tex>return</tex></font> <tex>m - t + 1a, \: A, \: mark</tex>. <font color="gray"># Возвращаем количество кластеров, распределение по кластерам и метки объектов (внутренние, граничные или шумовые)</font>
==Пример кода = Псевдокод === <font color=darkgreen>// алгоритм принимает множество объектов и возвращает множество кластеров для каждого шага </font> '''function''' hierarchy(X: '''Set<Object>'''): '''Set<Set<Object>>''' t Пример на языке R = 1 <tex>\mathrm{C_t} = {{x_1}, \dots, {x_m}}</tex> '''for''' i = 2 '''to''' m <tex>\langle U, V \rangle = \displaystyle \arg \min_{U \neq V, U \in C_{i-1}, V \in C_{i-1}} Main|Примеры кода на R(U, V)</tex> <tex>\mathrm{R_{t}} = \mathrm{R}(U, V)</tex> <tex>\mathrm{C_{i}} = \mathrm{C_{i-1}} \cup \{\mathrm{W}\} \setminus \{\mathrm{U}, \mathrm{V}\}</tex> Для реализации алгоритма '''for'k-средних'' используется пакет <texcode> S ClusterR</texcode> '''in''' . В нем реализовано 2 функции: <texcode> C_t KMeans_arma()</texcode> и <texcode>\mathrm{R_{i}}KMeans_rcpp(W, S) = \alpha_U \cdot \mathrm{R_{i-1}}(U, S) + \alpha_V \cdot \mathrm{R_{i-1}}(V, S) + \beta \cdot \mathrm{R_{i-1}}(U, V) + \gamma \cdot |\mathrm{R_{i-1}}(U, S) - \mathrm{R{i-1}}(V, S)| </texcode> '''return''' . В примере далее рассмотрена реализация с использованием функции <texcode> C KMeans_arma()</texcode>.
== Примечания ==
* [https://en.wikipedia.org/wiki/Cluster_analysis Wikipedia {{---}} Cluster analysis]
* [http://www.machinelearning.ru/wiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F MachineLearning {{---}} Кластеризация]
* [http://www.machinelearning.ru/wiki/images/c/ca/Voron-ML-Clustering.pdf К.В.Воронцов Лекции по алгоритмам кластеризации и многомерного шкалирования]
* G[https://www. Ncs. Lance, Wcornell. Tedu/home/kleinber/nips15. Williams; A General Theory of Classificatory Sorting Strategies: 1pdf Kleinberg J. Hierarchical Systems, The Computer Journal, Volume 9, Issue 4, 1 February 1967, Pages 373–380An Impossibility Theorem for Clustering]
[[Категория: Машинное обучение]]
[[Категория: Кластеризация]]