<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0+%D0%90%D0%BD%D0%BD%D0%B0</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0+%D0%90%D0%BD%D0%BD%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0"/>
	<updated>2026-10-22T20:32:32Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17392</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17392"/>
		<updated>2016-11-15T19:41:54Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; s &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 2: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 3: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 4: Дендрограмма агломеративных методов]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Т.к все действия алгорима (вычисления центроид для кластеров, расстояния между кластерами, представители кластеров и изменение положения представителей) на каждом шаге можно делать независимо (как от представителей данного кластера, так и представителей других кластеров), можно сделать вывод, что возможно распараллеливание&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;p&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; крастеров&lt;br /&gt;
&lt;br /&gt;
===Оптимальный выбор параметров для алгоритма===&lt;br /&gt;
&lt;br /&gt;
*размер случайной выборки &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; (&#039;&#039;а&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
При запуске CURE со случайными размерами выборки в пределах от 500 до 5000 видно, что при размерах до 2000 были найдены кластеры низкого качества, начиная с 2500 точек и выше (2,5% от установленного размера данных), CURE всегда правильно определяет кластеры.&lt;br /&gt;
&lt;br /&gt;
*число точек представителей  &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt; (&#039;&#039;b&#039;&#039;)&lt;br /&gt;
В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
*число разбиений выборки &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; (&#039;&#039;&#039;c&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; должно быть выбрано таким, что &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt; &amp;gt; &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*размерность (&#039;&#039;d&#039;&#039;)&lt;br /&gt;
CURE хорошо себя чувствует при больших размерностях&lt;br /&gt;
&lt;br /&gt;
*сжимающий фактор &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; &lt;br /&gt;
В оригинальной статье авторы показывают что  &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от 0.2 до 0.7 помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:4pic.png|800px|thumb|center| Рисунок 5: Влияние параметров &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; 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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17356</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17356"/>
		<updated>2016-11-15T18:54:06Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* CURE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; s &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 2: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 3: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 4: Дендрограмма агломеративных методов]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Т.к все действия алгорима (вычисления центроид для кластеров, расстояния между кластерами, представители кластеров и изменение положения представителей) на каждом шаге можно делать независимо (как от представителей данного кластера, так и представителей других кластеров), можно сделать вывод, что возможно распараллеливание&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;p&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; крастеров&lt;br /&gt;
&lt;br /&gt;
===Оптимальный выбор параметров для алгоритма===&lt;br /&gt;
&lt;br /&gt;
*размер случайной выборки &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; (&#039;&#039;а&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
При запуске CURE со случайными размерами выборки в пределах от 500 до 5000 видно, что при размерах до 2000 были найдены кластеры низкого качества, начиная с 2500 точек и выше (2,5% от установленного размера данных), CURE всегда правильно определяет кластеры.&lt;br /&gt;
&lt;br /&gt;
*число точек представителей  &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt; (&#039;&#039;b&#039;&#039;)&lt;br /&gt;
В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
*число разбиений выборки &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; (&#039;&#039;&#039;c&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; должно быть выбрано таким, что &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt; &amp;gt; &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*размерность (&#039;&#039;d&#039;&#039;)&lt;br /&gt;
CURE хорошо себя чувствует при больших размерностях&lt;br /&gt;
&lt;br /&gt;
*сжимающий фактор &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; &lt;br /&gt;
В оригинальной статье авторы показывают что  &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от 0.2 до 0.7 помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:4pic.png|800px|thumb|center| Рисунок 5: Влияние параметров &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; 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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17259</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17259"/>
		<updated>2016-11-15T13:42:59Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; s &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 2: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 3: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 4: Дендрограмма агломеративных методов]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Т.к все действия алгорима (вычисления центроид для кластеров, расстояния между кластерами, представители кластеров и изменение положения представителей) на каждом шаге можно делать независимо (как от представителей данного кластера, так и представителей других кластеров), можно сделать вывод, что возможно распараллеливание&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;p&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt; крастеров&lt;br /&gt;
&lt;br /&gt;
===Оптимальный выбор параметров для алгоритма===&lt;br /&gt;
&lt;br /&gt;
*размер случайной выборки &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; (&#039;&#039;а&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
При запуске CURE со случайными размерами выборки в пределах от 500 до 5000 видно, что при размерах до 2000 были найдены кластеры низкого качества, начиная с 2500 точек и выше (2,5% от установленного размера данных), CURE всегда правильно определяет кластеры.&lt;br /&gt;
&lt;br /&gt;
*число точек представителей  &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt; (&#039;&#039;b&#039;&#039;)&lt;br /&gt;
В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
*число разбиений выборки &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; (&#039;&#039;&#039;c&#039;&#039;&#039;)&lt;br /&gt;
&amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; должно быть выбрано таким, что &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt; &amp;gt; &amp;lt;math&amp;gt; k &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*размерность (&#039;&#039;d&#039;&#039;)&lt;br /&gt;
CURE хорошо себя чувствует при больших размерностях&lt;br /&gt;
&lt;br /&gt;
*сжимающий фактор &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; &lt;br /&gt;
В оригинальной статье авторы показывают что  &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от 0.2 до 0.7 помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:4pic.png|800px|thumb|center| Рисунок 5: Влияние параметров &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; c &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; 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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17250</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17250"/>
		<updated>2016-11-15T13:15:22Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; s &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{s}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 2: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 3: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 4: Дендрограмма агломеративных методов]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Т.к все действия алгорима (вычисления центроид для кластеров, расстояния между кластерами, представители кластеров и изменение положения представителей) на каждом шаге можно делать независимо (как от представителей данного кластера, так и представителей других кластеров), можно сделать вывод, что возможно распараллеливание&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Opt.png&amp;diff=17242</id>
		<title>Файл:Opt.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Opt.png&amp;diff=17242"/>
		<updated>2016-11-15T12:39:25Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17239</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17239"/>
		<updated>2016-11-15T12:24:50Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 2: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 3: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 4: Дендрограмма агломеративных методов]]&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Т.к все действия алгорима (вычисления центроид для кластеров, расстояния между кластерами, представители кластеров и изменение положения представителей) на каждом шаге можно делать независимо (как от представителей данного кластера, так и представителей других кластеров), можно сделать вывод, что возможно распараллеливание&lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17238</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17238"/>
		<updated>2016-11-15T12:24:27Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 2: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 3: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17237</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17237"/>
		<updated>2016-11-15T12:24:01Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа (происходит объединение ближайших кластеров). Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если расстояние между ближайшей парой кластеров больше некоторого парогового(критического) значения, то объединения не происходит.&lt;br /&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;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма представляет собой итерационное построение &amp;lt;math&amp;gt;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17213</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=17213"/>
		<updated>2016-11-15T10:44:22Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Входные параметры: набор входных данных &amp;lt;math&amp;gt;S&amp;lt;/math&amp;gt;, содержащий &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек в &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерном пространстве&lt;br /&gt;
и требуемое количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Начиная с отдельных точек в виде отдельных кластеров, на каждом шаге ближайшая пара кластеров объединяются, чтобы сформировать новый кластер.Процесс повторяется до тех пор, пока не достигнет &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
 &#039;&#039;&#039;procedure&#039;&#039;&#039; cluster(S,k)&lt;br /&gt;
 &#039;&#039;&#039;begin&#039;&#039;&#039;&lt;br /&gt;
 1. T:=build_kd_tree(S)&lt;br /&gt;
 2. Q:-build_heap(S)&lt;br /&gt;
 3. &#039;&#039;&#039;while&#039;&#039;&#039; size(Q)&amp;gt;k &#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 4.     u:=extract_min(Q)&lt;br /&gt;
 5.     v:= u.closest&lt;br /&gt;
 6.     delete(Q, V)&lt;br /&gt;
 7.     w := merge(u,v) &lt;br /&gt;
 8.     delete_rep(T, u); delete_rep(T, v); insert_rep(T, w) &lt;br /&gt;
 9.     w.closest := x /* x is an arbitrary cluster in Q */&lt;br /&gt;
 10.    &#039;&#039;&#039;for each&#039;&#039;&#039; x \in Q&#039;&#039;&#039;do&#039;&#039;&#039; {&lt;br /&gt;
 11.       &#039;&#039;&#039;if&#039;&#039;&#039; dist(w, x) &amp;lt; dist(w, w.closest) &lt;br /&gt;
 12.               w.closest := x &lt;br /&gt;
 13.       &#039;&#039;&#039;if&#039;&#039;&#039; x.closest is either u or w {  &lt;br /&gt;
 14.            &#039;&#039;&#039; if&#039;&#039;&#039; dist(x, x.closest) &amp;lt; dist(x, w)&lt;br /&gt;
 15.                 x.closest := closest_cluster(T, x, dist(x, w)) &lt;br /&gt;
 16.            &#039;&#039;&#039;else&#039;&#039;&#039;&lt;br /&gt;
 17.               x.closest := w&lt;br /&gt;
 18.             relocate(Q, x) &lt;br /&gt;
 19.        }&lt;br /&gt;
 20.       &#039;&#039;&#039;else if&#039;&#039;&#039; dist(x, x.closest) &amp;gt; d&amp;amp;(x, w) { &lt;br /&gt;
 21.             x.closest := w &lt;br /&gt;
 22.             relocate(Q, x)&lt;br /&gt;
 23.        }&lt;br /&gt;
 24.      }&lt;br /&gt;
 25.      insert(Q, w)&lt;br /&gt;
 26. }&lt;br /&gt;
 &#039;&#039;&#039;end&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Являясь представителем иерархических алгоритмов кластеризации, имеет сложность &amp;lt;math&amp;gt; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=16946</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=16946"/>
		<updated>2016-11-14T11:19:35Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* CURE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Назначение&#039;&#039;: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Ограничения&#039;&#039;: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Достоинства&#039;&#039;: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Недостатки&#039;&#039;: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=16941</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=16941"/>
		<updated>2016-11-14T11:07:38Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Понятие кластеризации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Классификация алгоритмов&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting) - характеризуются последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров. В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор,&lt;br /&gt;
пока все объекты не будут составлять один кластер. &lt;br /&gt;
&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis) - характеризуются последовательным разделением исходного кластера, состоящего из всех объектов, и соответствующим увеличением числа кластеров. В начале работы алгоритма все объекты принадлежат одному кластеру, который на последующих шагах делится на меньшие кластеры, в результате образуется последовательность расщепляющих групп. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=16938</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=16938"/>
		<updated>2016-11-14T11:00:34Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Понятие кластеризации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|IgorS}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039; строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы:&#039;&#039; строят одно разбиение объектов на кластеры.&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Алгоритмы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Четкие&#039;&#039; (непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру;&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;Нечеткие&#039;&#039; (пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line).&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=15381</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=15381"/>
		<updated>2016-10-31T21:05:29Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[U:Лукьянова Анна|А.Я. Лукьянова]]&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=13746</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=13746"/>
		<updated>2016-10-25T15:14:57Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=13288</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=13288"/>
		<updated>2016-10-20T17:45:07Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге 2.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=13284</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=13284"/>
		<updated>2016-10-20T17:39:47Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге &amp;quot;Инициализация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого кластера требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=13277</id>
		<title>Участник:Лукьянова Анна</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=13277"/>
		<updated>2016-10-20T17:28:14Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Студентка ВМК МГУ, каф. ОУ группа 613, &lt;br /&gt;
lukyanova-anna94@mail.ru&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=13276</id>
		<title>Участник:Лукьянова Анна</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=13276"/>
		<updated>2016-10-20T17:27:56Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Студентка ВМК МГУ, каф. ОУ группа 613&lt;br /&gt;
lukyanova-anna94@mail.ru&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=12053</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=12053"/>
		<updated>2016-10-15T20:58:08Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге &amp;quot;Инициализация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого алгоритма требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=12042</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=12042"/>
		<updated>2016-10-15T20:57:08Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге &amp;quot;Инициализация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого алгоритма требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=11926</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=11926"/>
		<updated>2016-10-15T20:45:09Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге &amp;quot;Инициализация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого алгоритма требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=11904</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=11904"/>
		<updated>2016-10-15T20:43:06Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге &amp;quot;Инициализация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
Из рисунка видно, что при меньших значениях &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; качество работы алгоритма ухудшается&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; требуемое количество &amp;lt;math&amp;gt; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого алгоритма требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=11867</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=11867"/>
		<updated>2016-10-15T20:39:29Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: А.Я. Лукьянова&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
Классификация алгоритмов&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу обработки данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Иерархические методы:&#039;&#039;&lt;br /&gt;
*Агломеративные методы AGNES (Agglomerative Nesting):&lt;br /&gt;
*Дивизимные методы DIANA (Divisive Analysis):&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Неиерархические методы.&#039;&#039;&lt;br /&gt;
*Итеративные&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по способу анализа данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Четкие;&lt;br /&gt;
&lt;br /&gt;
*Нечеткие. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по количеству применений алгоритмов кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*С одноэтапной кластеризацией;&lt;br /&gt;
&lt;br /&gt;
*С многоэтапной кластеризацией. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по возможности расширения объема обрабатываемых данных:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Масштабируемые;&lt;br /&gt;
&lt;br /&gt;
*Немасштабируемые&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Методы по времени выполнения кластеризации:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
*Потоковые (on-line);&lt;br /&gt;
&lt;br /&gt;
*Не потоковые (off-line). &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм &#039;&#039;&#039;CURE (Clustering Using REpresentatives)&#039;&#039;&#039; выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Относится к алгомеративным методам.&lt;br /&gt;
&lt;br /&gt;
Эта группа методов характеризуется последовательным объединением исходных элементов и соответствующим уменьшением числа кластеров.&lt;br /&gt;
&lt;br /&gt;
Назначение: кластеризация очень больших наборов числовых данных.&lt;br /&gt;
&lt;br /&gt;
Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. &lt;br /&gt;
&lt;br /&gt;
Достоинства: &lt;br /&gt;
*выполняет кластеризацию на высоком уровне даже при наличии выбросов;&lt;br /&gt;
*выделяет кластеры сложной формы и различных размеров, &lt;br /&gt;
*обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности.&lt;br /&gt;
&lt;br /&gt;
Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
Описание алгоритма :&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
[[file:Page1.png|thumb|center|1400px|Рисунок 1: Обзор CURE ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 1:&#039;&#039;&#039; Построение дерева кластеров, состоящего из каждой строки входного набора данных.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 2:&#039;&#039;&#039; Формирование «кучи» в оперативной памяти, расчет расстояния до ближайшего кластера (строки данных) для каждого кластера. При формировании кучи кластеры сортируются по возрастанию дистанции от кластера до ближайшего кластера. Расстояние между кластерами определяется по двум ближайшим элементам из соседних кластеров. Для определения расстояния между кластерами используются «манхеттенская», «евклидова» метрики или похожие на них функции.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Метрика Евклида:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) = \sqrt{\sum_{i=1}^n (p_{i} - k_{i})^2}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;«Манхеттенская» метрика:&#039;&#039; &amp;lt;math&amp;gt;\rho(p,k) =\sum_{i=1}^n |p_{i} - k_{i}|&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 3:&#039;&#039;&#039; Слияние ближних кластеров в один кластер. Новый кластер получает все точки входящих в него входных данных. Расчет расстояния до остальных кластеров для новообразованного кластера. Для расчета расстояния кластеры делятся на две группы: первая группа – кластеры, у которых ближайшими кластерами считаются кластеры, входящие в новообразованный кластер, остальные кластеры – вторая группа. И при этом для кластеров из первой группы, если расстояние до новообразованного кластера меньше чем до предыдущего ближайшего кластера, то ближайший кластер меняется на новообразованный кластер. В противном случае ищется новый ближайший кластер, но при этом не берутся кластеры, расстояния до которых больше, чем до новообразованного кластера. Для кластеров второй группы выполняется следующее: если расстояние до новообразованного  кластера ближе, чем предыдущий ближайший кластер, то ближайший кластер меняется. В противном случае ничего не происходит.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Шаг 4:&#039;&#039;&#039; Переход на шаг 3, если не получено требуемое количество кластеров.&lt;br /&gt;
&lt;br /&gt;
Выбранные точки сдвигаются на следующем шаге на &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; к центроиду кластера. Алгоритм становится основанным на методе поиска центроида при &amp;lt;math&amp;gt;\alpha = 1&amp;lt;/math&amp;gt;, и основанным на всех точках кластера при &amp;lt;math&amp;gt;\alpha = 0&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Factor_a.png|400px|thumb|center| Рисунок 2: Чувствительность алгоритма к параметру &amp;lt;math&amp;gt;\alpha &amp;lt;/math&amp;gt;.]]&lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Прежде всего, алгоритм использует случайное разбиение выборки из &amp;lt;math&amp;gt; n &amp;lt;/math&amp;gt; элементов на &amp;lt;math&amp;gt; p &amp;lt;/math&amp;gt; частей, которые могут поместиться в память отдельной машины кластера. Затем во время первого прохода алгоритм уменьшает число кластеров в каждой подвыборке до &amp;lt;math&amp;gt; \frac{n}{pq} &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt; q \geq 1 &amp;lt;/math&amp;gt; – некоторая константа. Для последующего шага на вход кластеризации подаются только представительные точки &amp;lt;math&amp;gt;c&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;k&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;k&amp;lt;/math&amp;gt; кластеров и нахождение точек-представителей для каждого кластера.&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
Псевдокод&lt;br /&gt;
&lt;br /&gt;
Input : A set of points S&lt;br /&gt;
&lt;br /&gt;
Output : &#039;&#039;k&#039;&#039; clusters&lt;br /&gt;
&lt;br /&gt;
*   For every cluster u (each input point), in u.mean and u.rep store the mean of the points in the cluster and a set of &#039;&#039;c&#039;&#039; representative points of the cluster (initially &#039;&#039;c&#039;&#039; = 1 since each cluster has one data point). Also u.closest stores the cluster closest to u.&lt;br /&gt;
*   All the input points are inserted into a k-d tree T&lt;br /&gt;
*   Treat each input point as separate cluster, compute u.closest for each u and then insert each cluster into the heap Q. (clusters are arranged in increasing order of distances between u and u.closest).&lt;br /&gt;
*   While size(Q) &amp;amp;gt; &#039;&#039;k&#039;&#039;&lt;br /&gt;
*       Remove the top element of Q(say u) and merge it with its closest cluster u.closest(say v) and compute the new representative points for the merged cluster w.&lt;br /&gt;
*       Remove u and v from T and Q.&lt;br /&gt;
*       For all the clusters x in Q, update x.closest and relocate x&lt;br /&gt;
*           insert w into Q&lt;br /&gt;
*       repeat &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; O(n^2 log(n)) &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;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
В начале работы алгоритма все объекты являются отдельными кластерами. На первом шаге наиболее похожие объекты объединяются в кластер. На последующих шагах объединение продолжается до тех пор, пока все объекты не будут составлять один кластер.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Metod.png|400px|thumb|center| Рисунок 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;
Входные данные: набор данных &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; , количество кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, число точек представителей &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt;, параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;m&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;\alpha&amp;lt;/math&amp;gt; для сжатия точек представления к центру кластера. В оригинальной статье авторы показывают что &amp;lt;math&amp;gt;\alpha&amp;lt;/math&amp;gt; от &amp;lt;math&amp;gt;0.2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;0.7&amp;lt;/math&amp;gt; помогает хорошо выявлять несферические кластеры и подавлять редкие выбросы.&lt;br /&gt;
&lt;br /&gt;
Параметр &amp;lt;math&amp;gt;\gamma&amp;lt;/math&amp;gt; задаёт какая часть от &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; точек будет использована при случайной выборке точек на шаге &amp;quot;Инициализация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Число точек представителей выбирается в зависимости от данных. Если возможно появление кластеров сложной формы, то точек должно быть больше, чтобы выявить их форму. В оригинальной статье авторы показывают что уже при &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt; равном &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt; достигается неплохая эффективность.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Param_c.png|400px|thumb|center| Рисунок 4: Результат работы алгоритка в зависимости от количесва представлений &amp;lt;math&amp;gt;c&amp;lt;/math&amp;gt;.]]&lt;br /&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; k &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;
Последовательная реализация CURE-алгоритма для кластеризации для Python/C++ представлена в пакете: [https://github.com/annoviko/pyclustering pyclustering].&lt;br /&gt;
&lt;br /&gt;
Также существует параллельная реализация алгоритма, описанная в сборнике [4]. Алгоритм предложенный в статье использует массив данных состоящий из размеров кластера, его центроида и репрезентативных точек, а при объединении кластеров информацию о новом кластере просто записывают в строчку предыдущего. Также для каждого алгоритма требуется считать индекс и расстояние до ближайшего кластера. Именно их поиск авторы статьи и предлагают распараллелить.&lt;br /&gt;
&lt;br /&gt;
= Литература =&lt;br /&gt;
&lt;br /&gt;
[1] Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&lt;br /&gt;
&lt;br /&gt;
[2] Theodoridis, Sergios; Koutroumbas, Konstantinos (2006). Pattern recognition. Academic Press. pp. 572–574. ISBN 978-0-12-369531-4.&lt;br /&gt;
&lt;br /&gt;
[3] Guha, Sudipto; Rastogi, Rajeev; Shim, Kyuseok (2001). &amp;quot;CURE: An Efficient Clustering Algorithm for Large Databases&amp;quot; (PDF). Information Systems. 26 (1): 35–58. doi:10.1016/S0306-4379(01)00008-4&lt;br /&gt;
&lt;br /&gt;
[4] Panagiotis E. Hadjidoukas, Laurent Amsaleg. OpenMP Shared Memory Parallel Programming.&lt;br /&gt;
Volume 4315 of the series Lecture Notes in Computer Science pp 289-299&lt;br /&gt;
Parallelization of a Hierarchical Data Clustering Algorithm Using OpenMP&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Metod.png&amp;diff=11551</id>
		<title>Файл:Metod.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Metod.png&amp;diff=11551"/>
		<updated>2016-10-15T19:49:10Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Param_c.png&amp;diff=11118</id>
		<title>Файл:Param c.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Param_c.png&amp;diff=11118"/>
		<updated>2016-10-15T18:31:16Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Factor_a.png&amp;diff=10993</id>
		<title>Файл:Factor a.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Factor_a.png&amp;diff=10993"/>
		<updated>2016-10-15T18:01:50Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Page1.png&amp;diff=9576</id>
		<title>Файл:Page1.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Page1.png&amp;diff=9576"/>
		<updated>2016-10-15T13:01:03Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=7064</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=7064"/>
		<updated>2016-10-14T00:25:29Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений2&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &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;
= ЧАСТЬ. Свойства и структура алгоритмa =&lt;br /&gt;
== Общее описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
===Понятие кластеризации===&lt;br /&gt;
&lt;br /&gt;
Кластеризация (или кластерный анализ) — это задача разбиения множества объектов на группы, называемые кластерами. Внутри каждой группы должны оказаться «похожие» объекты, а объекты разных группы должны быть как можно более отличны. Главное отличие кластеризации от классификации состоит в том, что перечень групп четко не задан и определяется в процессе работы алгоритма.&lt;br /&gt;
&lt;br /&gt;
Применение кластерного анализа в общем виде сводится к следующим этапам:&lt;br /&gt;
&lt;br /&gt;
#Отбор выборки объектов для кластеризации.&lt;br /&gt;
#Определение множества переменных, по которым будут оцениваться объекты в выборке. При необходимости – нормализация значений переменных.&lt;br /&gt;
#Вычисление значений меры сходства между объектами.&lt;br /&gt;
#Применение метода кластерного анализа для создания групп сходных объектов (кластеров).&lt;br /&gt;
#Представление результатов анализа.&lt;br /&gt;
&lt;br /&gt;
===Классификация алгоритмов===&lt;br /&gt;
&lt;br /&gt;
Для себя я выделил две основные классификации алгоритмов кластеризации.&lt;br /&gt;
&lt;br /&gt;
#Иерархические и плоские.&lt;br /&gt;
Иерархические алгоритмы (также называемые алгоритмами таксономии) строят не одно разбиение выборки на непересекающиеся кластеры, а систему вложенных разбиений. Т.о. на выходе мы получаем дерево кластеров, корнем которого      является вся выборка, а листьями — наиболее мелкие кластера.&lt;br /&gt;
Плоские алгоритмы строят одно разбиение объектов на кластеры.&lt;br /&gt;
#Четкие и нечеткие.&lt;br /&gt;
Четкие (или непересекающиеся) алгоритмы каждому объекту выборки ставят в соответствие номер кластера, т.е. каждый объект принадлежит только одному кластеру. Нечеткие (или пересекающиеся) алгоритмы каждому объекту ставят в соответствие набор вещественных значений, показывающих степень отношения объекта к кластерам. Т.е. каждый объект относится к каждому кластеру с некоторой вероятностью.&lt;br /&gt;
&lt;br /&gt;
===CURE===&lt;br /&gt;
&lt;br /&gt;
Алгоритм CURE(Clustering Using REpresentatives) выполняет иерархическую кластеризацию с использованием набора определяющих точек для определения объекта в кластер. Назначение: кластеризация очень больших наборов числовых данных. Ограничения: эффективен для данных низкой размерности, работает только на числовых данных. Достоинства: выполняет кластеризацию на высоком уровне даже при наличии выбросов, выделяет кластеры сложной формы и различных размеров, обладает линейно зависимыми требованиями к месту хранения данных и временную сложность для данных высокой размерности. Недостатки: есть необходимость в задании пороговых значений и количества кластеров. &lt;br /&gt;
&lt;br /&gt;
== Математическое описание алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Вычислительное ядро алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Макроструктура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Схема реализации последовательного алгоритма ==&lt;br /&gt;
&lt;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;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>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=6837</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=6837"/>
		<updated>2016-10-13T19:53:35Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений2&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &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;br /&gt;
== Последовательная сложность алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Информационный граф ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ресурс параллелизма алгоритма ==&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Входные и выходные данные алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;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>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=6342</id>
		<title>Участник:Лукьянова Анна/Алгоритм кластеризации с использованием представлений2</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D1%81_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%D0%BC_%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B92&amp;diff=6342"/>
		<updated>2016-10-13T10:05:54Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: Новая страница: «{{algorithm | name              = Алгоритм кластеризации с использованием представлений2 | serial_complexity = &amp;lt;m…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений2&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &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;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;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>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=6340</id>
		<title>Участник:Лукьянова Анна</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=6340"/>
		<updated>2016-10-13T10:05:17Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: Содержимое страницы заменено на «Студентка ВМК МГУ, каф. ОУ группа 613»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Студентка ВМК МГУ, каф. ОУ группа 613&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6081</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6081"/>
		<updated>2016-10-12T20:53:02Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
&lt;br /&gt;
Статья: [[Самоорганизующиеся карты Кохонена]];&lt;br /&gt;
Выполняет: [[Участник:Anton goy| Гой Антон]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Лесничий_Антон_Андреевич|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: Стандрик Антон Сергеевич (Astandrik)&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации с использованием представлений2]];&lt;br /&gt;
Выполняет: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6058</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6058"/>
		<updated>2016-10-12T20:28:06Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
&lt;br /&gt;
Статья: [[Самоорганизующиеся карты Кохонена]];&lt;br /&gt;
Выполняет: [[Участник:Anton goy| Гой Антон]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Лесничий_Антон_Андреевич|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: Стандрик Антон Сергеевич (Astandrik)&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений2]];&lt;br /&gt;
Выполняет: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6042</id>
		<title>Обсуждение участника:Lineprinter</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:Lineprinter&amp;diff=6042"/>
		<updated>2016-10-12T20:15:55Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Перенос ==&lt;br /&gt;
&lt;br /&gt;
Статья:[[ЕМ-алгоритм_(Тематическое_моделирование)]];&lt;br /&gt;
Выполняют: Мурат Апишев и Андрей Заночкин&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_Ланцоша_с_полной_переортогонализацией]];&lt;br /&gt;
Выполняет:[[Участник:Sfedotov| Федотов С.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_k-средних]]&lt;br /&gt;
Выполняют: [[Участник:Error2407|Богомазов Евгений]], [[Участник:Илья_Егоров|Егоров Илья]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Решение_задачи_Коши_для_системы_ОДУ_методом_Рунге-Кутты_4_порядка]];&lt;br /&gt;
Выполняют: [[Участник:Алимов_Дамир_Алиевич|Алимов Дамир]] и [[Участник:Лесничий_Антон_Андреевич|Антон Лесничий]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм кластеризации, основанный на минимальном остовном дереве]];&lt;br /&gt;
Выполняет: Стандрик Антон Сергеевич (Astandrik)&lt;br /&gt;
&lt;br /&gt;
Статья: [[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(3)|Нахождение собственных чисел квадратной матрицы методом QR разложения (3)]];&lt;br /&gt;
Выполняют: [[Участник:Смирнова_Александра|Смирнова А.С.]], [[Участник:Александра_Киямова|Киямова А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Якоби_вычисления_сингулярных_чисел_и_векторов]];&lt;br /&gt;
Выполняют: [[Участница:Почернина_Елена| Почернина Елена]] и [[Участница:Светлана|Костюкова Светлана]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод_Ньютона_для_решения_систем_нелинейных_уравнений(2)]];&lt;br /&gt;
Выполняют: [[Участник:Oleggium|Гирняк О.Р.]], [[Участник:Dimx19|Васильков Д.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений]];&lt;br /&gt;
Выполняют: [[Участник:Cookie|Шатков С.А.]], [[Антохина Ю.А.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_преобразование_Фурье_(FFT)|Быстрое преобразование Фурье (FFT)]];&lt;br /&gt;
Выполняют: [[Участник:Victoria_Stepanischeva|Степанищева Виктория]] и [[Участник:Igor_Munkin|Мунькин Игорь]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Быстрое_дискретное_преобразование_Фурье|Быстрое_дискретное_преобразование_Фурье]];&lt;br /&gt;
Выполняют: [[Участник:ivanov.kir.m | К.М.Иванов]], [[Участник:Pumpkin | А.C.Сапин]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_средних]]&lt;br /&gt;
Выполняют: [[Участник:Parkhomenko|Пархоменко Павел]], [[Участник:ivan.mashonskiy|Машонский Иван]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[EM-алгоритм_кластеризации]]&lt;br /&gt;
Выполняет: [[Участник:Noite|Зинченко Дмитрий]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_k_means]]&lt;br /&gt;
Выполняют: [[Участник:IanaV| Валуйская Яна]], [[Глотов Евгений]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Метод Якоби вычисления собственных значений симметричной матрицы ЗП |Метод Якоби вычисления собственных значений симметричной матрицы ЗП]];&lt;br /&gt;
Выполняют: [[Участник:Зиновьев Владимир|Зиновьев В.С.]], [[Участник:Пронин Андрей|Пронин А.М.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Алгоритм_кластеризации,_основанный_на_минимальном_покрывающем_дереве]]&lt;br /&gt;
Выполняет: [[Участник:Kanast74|Дмитриева Анастасия]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Нахождение_собственных_чисел_квадратной_матрицы_методом_QR_разложения_(4)]]&lt;br /&gt;
Выполняют: [[Участник:F-morozov|Морозов Ф. В.]], [[Участник:Nataliya|Пащенко Н. Ф.]]&lt;br /&gt;
&lt;br /&gt;
Статья:[[Хранение_ненулевых_элементов_разреженных_матриц._Умножение_разреженной_матрицы_на_вектор]];&lt;br /&gt;
Выполняют: [[Участник:Trrufina|Третьякова Р.М.]] и [[Участник:Екатерина_Буторина|Буторина Е.В.]]&lt;br /&gt;
&lt;br /&gt;
Статья: [[Алгоритм_кластеризации_с_использованием_представлений2]];&lt;br /&gt;
Выполняют: [[Участник:Лукьянова Анна|Лукьянова А.Я.]]&lt;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=5610</id>
		<title>Участник:Лукьянова Анна</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=5610"/>
		<updated>2016-10-12T08:44:31Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений2&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &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;br /&gt;
== Свойства алгоритма ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ЧАСТЬ. Программная реализация алгоритма =&lt;br /&gt;
&lt;br /&gt;
== Особенности реализации последовательного алгоритма ==&lt;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>Лукьянова Анна</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=5094</id>
		<title>Участник:Лукьянова Анна</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9B%D1%83%D0%BA%D1%8C%D1%8F%D0%BD%D0%BE%D0%B2%D0%B0_%D0%90%D0%BD%D0%BD%D0%B0&amp;diff=5094"/>
		<updated>2016-10-10T00:57:23Z</updated>

		<summary type="html">&lt;p&gt;Лукьянова Анна: Новая страница: «{{algorithm | name              = Алгоритм кластеризации с использованием представлений2 | serial_complexity = &amp;lt;m…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм кластеризации с использованием представлений2&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &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;/div&gt;</summary>
		<author><name>Лукьянова Анна</name></author>
	</entry>
</feed>