<?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=Final</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=Final"/>
	<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/Final"/>
	<updated>2026-10-22T20:23:47Z</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14579</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14579"/>
		<updated>2016-10-28T18:59:57Z</updated>

		<summary type="html">&lt;p&gt;Final: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис.1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рис.1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&lt;br /&gt;
В схематичном описании на Рис. 2 пара транзакций на входе, далее подсчет стоимости их добавления на один из кластеров или через пустой кластер осуществляется перемещение транзакций на новый кластер. Фаза с удалением транзакции с кластера включает еще и стоимость удаления, поэтому представлен граф только для добавления.&lt;br /&gt;
&lt;br /&gt;
[[file:Inf Gra.jpg|thumb|center|500px|Рис.2. Cтадия &amp;quot;Инициаллизации&amp;quot;]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14576</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14576"/>
		<updated>2016-10-28T18:57:44Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис.1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рис.1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&lt;br /&gt;
В схематичном описании на Рис. 2 пара транзакций на входе, далее подсчет стоимости их добавления на один из кластеров или через пустой кластер осуществляется перемещение транзакций на новый кластер. Фаза с удалением транзакции с кластера включает еще и стоимость удаления, поэтому представлен граф только для добавления.&lt;br /&gt;
&lt;br /&gt;
[[file:Inf Gra.jpg|thumb|center|500px|Рис.2. Cтадия &amp;quot;Инициаллизации&amp;quot;]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14575</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14575"/>
		<updated>2016-10-28T18:57:28Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис.1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рис.1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&lt;br /&gt;
В схематичном описании на Рис. 2 пара транзакций на входе, далее подсчет стоимости их добавления на один из кластеров или через пустой кластер осуществляется перемещение транзакций на новый кластер. Фаза с удалением транзакции с кластера включает еще и стоимость удаления, поэтому представлен граф только для добавления.&lt;br /&gt;
&lt;br /&gt;
[[file:Inf Gra.jpg|thumb|center|500px|Рис.2. Cтадиz &amp;quot;Инициаллизации&amp;quot;]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14574</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14574"/>
		<updated>2016-10-28T18:56:35Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис.1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&lt;br /&gt;
В схематичном описании на Рис. 2 пара транзакций на входе, далее подсчет стоимости их добавления на один из кластеров или через пустой кластер осуществляется перемещение транзакций на новый кластер. Фаза с удалением транзакции с кластера включает еще и стоимость удаления, поэтому представлен граф только для добавления.&lt;br /&gt;
&lt;br /&gt;
[[file:Inf Gra.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14571</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14571"/>
		<updated>2016-10-28T18:38:27Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис.1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&lt;br /&gt;
В схематичном описании на Рис. 2 пара транзакций на входе, далее подсчет стоимости их добавления на один из кластеров или через пустой кластер осуществляется перемещение транзакций на новый кластер. Фаза с удалением транзакции с кластера включает еще и стоимость удаления, поэтому представлен граф только для добавления.&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14570</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14570"/>
		<updated>2016-10-28T18:38:02Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис.1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&lt;br /&gt;
В схематичном описании на Рис. 2 пара транзакций на входе, далее подсчет стоимости их добавления на один из кластеров или через пустой кластер осуществляется перемещение транзакций на новый кластер. Фаза с удалением транзакции с кластера включает еще и стоимость удаления, поэтому представлен граф только для добавления.&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE init scheme.png|thumb|center|800px|Рисунок 2. Схема шага Init алгоритма CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14564</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14564"/>
		<updated>2016-10-28T17:32:59Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Подробнее рассмотрим стадию &amp;quot;Инициаллизации&amp;quot;.&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14317</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14317"/>
		<updated>2016-10-28T00:09:57Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14316</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14316"/>
		<updated>2016-10-28T00:09:43Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
* Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
* Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14315</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14315"/>
		<updated>2016-10-28T00:09:15Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14314</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14314"/>
		<updated>2016-10-28T00:06:54Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Поскольку алгоритм CLOPE является достаточно новым, то сейчас нет его массовой реализации, как и в отечественных, так и западных пакетах.&lt;br /&gt;
&lt;br /&gt;
[http://weka.sourceforge.net/doc.stable/weka/clusterers/CLOPE.html WEKA] - библиотека алгоритмов машинного обучения и анализа данных на языке Java.&lt;br /&gt;
&lt;br /&gt;
Имеются частные пользовательские реализации алгоритма.&lt;br /&gt;
&lt;br /&gt;
Имеются публикации, посвященные данному алгоритму:&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14313</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14313"/>
		<updated>2016-10-27T23:59:40Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
Количество итераций может быть задано пользователем, а может остаться не известным. Второе лучше отразится на качестве кластеризации, но не будет известно количество итераций.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14312</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14312"/>
		<updated>2016-10-27T23:56:25Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14311</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14311"/>
		<updated>2016-10-27T23:55:22Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14310</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14310"/>
		<updated>2016-10-27T23:54:05Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
Обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14309</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14309"/>
		<updated>2016-10-27T23:52:53Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Соотношение последовательной и параллельной сложности является линейной: k.&lt;br /&gt;
&lt;br /&gt;
При этом вычислительная мощность алгоритма, как отношение числа операций к суммарному объему входных и выходных данных – линейна.&lt;br /&gt;
&lt;br /&gt;
Алгоритм не устойчив из-за того, что результат его работы зависит от начального распределения по кластерам. А так как алгоритм зависит от порядка обхода кластеров, то строго нельзя говорить и о его детерминированности. &lt;br /&gt;
&lt;br /&gt;
В связи с ориентиром на категориальные данные, алгоритм не предназначен к работе с числами. (Большая разница в числах отнесет их к разным категориям.)&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14308</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14308"/>
		<updated>2016-10-27T23:46:14Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
В инициализации происходит распределение по кластерам, далее происходят итерации максимизирующие функцию стоимости и так происходит обход до тех пор, пока не перестанут происходить изменения.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14307</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14307"/>
		<updated>2016-10-27T23:43:50Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14306</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14306"/>
		<updated>2016-10-27T23:41:39Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Входные и выходные данные алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;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;
* набор из &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины не более &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объем входных данных&#039;&#039;&#039;:&lt;br /&gt;
* &amp;lt;math&amp;gt;N * A&amp;lt;/math&amp;gt; символов, строк или чисел (зависит от того, в каком виде представляются категории) и &amp;lt;math&amp;gt;1&amp;lt;/math&amp;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;
* &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; положительных целых чисел - номера кластеров, соответствующих каждой из транзакций.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14305</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14305"/>
		<updated>2016-10-27T23:41:13Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&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;A&amp;lt;/math&amp;gt;, тогда сложность параллельного алгоритма будет &amp;lt;math&amp;gt;O(N*A)&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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14304</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14304"/>
		<updated>2016-10-27T23:37:59Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На Рис. 1 общая схема реализации алгоритма.&lt;br /&gt;
На входе у нас имеется следующий набор: &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt; транзакций длины &amp;lt;math&amp;gt;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
Во время &amp;quot;Инициаллизации&amp;quot; происходит распределение транзакций по кластерам. Далее происходит проверка до тех пор, пока происходят перемещения, ведущие к увеличению общей стоимости.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14302</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14302"/>
		<updated>2016-10-27T23:13:09Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&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;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|500px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14301</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14301"/>
		<updated>2016-10-27T23:12:48Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&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;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|400px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14300</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14300"/>
		<updated>2016-10-27T23:12:35Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&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;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|200px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14299</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14299"/>
		<updated>2016-10-27T23:11:53Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&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;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.jpg|thumb|center|800px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14298</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14298"/>
		<updated>2016-10-27T23:10:37Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&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;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:CLOPE.png|thumb|center|800px|Рисунок 1. Общая схема CLOPE]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14294</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14294"/>
		<updated>2016-10-27T22:39:11Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*A), (что вытекает из количества операций согласно [[#Вычислительное ядро алгоритма|описанию вычислительного ядра алгоритма]]), показывающая, что скорость работы алгоритма растет линейно с ростом кластеров и размера таблицы. Это делает алгоритм быстрым и эффективным на больших объемах.&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;A&amp;lt;/math&amp;gt; и коэффициент отталкивания &amp;lt;math&amp;gt;r&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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14293</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14293"/>
		<updated>2016-10-27T22:37:22Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14292</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14292"/>
		<updated>2016-10-27T22:36:57Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14291</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14291"/>
		<updated>2016-10-27T22:35:51Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14290</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14290"/>
		<updated>2016-10-27T22:14:51Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14289</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14289"/>
		<updated>2016-10-27T22:13:20Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют вычисление цены добавления/удаления транзакции.&lt;br /&gt;
&lt;br /&gt;
Выполняются на каждой итерации для каждой транзакции (всего они выполняются N*(k-1) и N раз соответственно на каждой итерации).&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14288</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14288"/>
		<updated>2016-10-27T22:11:35Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Как записано в [[#Вычислительное ядро алгоритма|описании ядра алгоритма]], основную часть метода составляют множественные (всего &amp;lt;math&amp;gt;\frac{n (n - 1)}{2}&amp;lt;/math&amp;gt;) вычисления сумм&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;a_{ji}-\sum_{p=1}^{i-1}l_{ip} l_{jp}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14287</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14287"/>
		<updated>2016-10-27T22:05:30Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&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;\frac{n (n - 1)}{2}&amp;lt;/math&amp;gt;) вычисления сумм&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;a_{ji}-\sum_{p=1}^{i-1}l_{ip} l_{jp}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14285</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14285"/>
		<updated>2016-10-27T21:59:44Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в многократном вычислении цены добавления и удаления транзакции, которые выполняются на каждой итерации для каждой транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера&lt;br /&gt;
После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14284</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14284"/>
		<updated>2016-10-27T21:48:40Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации цены добавления/удаления транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера&lt;br /&gt;
После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14283</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14283"/>
		<updated>2016-10-27T21:38:30Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
вычисление цены добавления/удаления транзакции — выражения &amp;lt;math&amp;gt;Cost^{\pm}(C_i, t_n) = \frac{\overline{S} (C_i) * (|C_i| \pm 1)}{\overline{W}(C_i)^r} - \frac{S(C_i) * |C_i|}{W(C_i)^r}&amp;lt;/math&amp;gt; &amp;amp;nbsp; (2 операции умножения, 2 операции деления, 2 возведения в степень и 1 инкремент/декремент)&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера&lt;br /&gt;
После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14282</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=14282"/>
		<updated>2016-10-27T21:35:16Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13745</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13745"/>
		<updated>2016-10-25T14:59:48Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для начала формализуем рассматриваемую задачу кластеризации для категорийных данных. Все изложение будет идти как будто бы у нас в наличии имеется база транзакционных данных, а в конце материала будет показано, как с помощью CLOPE разбивать на кластеры любые категорийные массивы, работая с ними как с транзакционными.&lt;br /&gt;
&lt;br /&gt;
Под термином транзакция здесь понимается некоторый произвольный набор объектов, будь это список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга - в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13744</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13744"/>
		<updated>2016-10-25T14:58:48Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для начала формализуем рассматриваемую задачу кластеризации для категорийных данных. Все изложение будет идти как будто бы у нас в наличии имеется база транзакционных данных, а в конце материала будет показано, как с помощью CLOPE разбивать на кластеры любые категорийные массивы, работая с ними как с транзакционными.&lt;br /&gt;
&lt;br /&gt;
Под термином транзакция здесь понимается некоторый произвольный набор объектов, будь это список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга - в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть средняя длина транзакции равна A, общее число транзакций N, максимально возможное число кластеров K. Временная сложность одной итерации равна O(N*K*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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13743</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13743"/>
		<updated>2016-10-25T14:57:22Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для начала формализуем рассматриваемую задачу кластеризации для категорийных данных. Все изложение будет идти как будто бы у нас в наличии имеется база транзакционных данных, а в конце материала будет показано, как с помощью CLOPE разбивать на кластеры любые категорийные массивы, работая с ними как с транзакционными.&lt;br /&gt;
&lt;br /&gt;
Под термином транзакция здесь понимается некоторый произвольный набор объектов, будь это список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга - в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть поисковые профили хранятся в таблице базы данных. Для построения начального разбиения, определяемого функцией Profit(C,r) требуется первый проход по таблице профилей. После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице, изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
При построении начального разбиения из таблицы читается очередной профиль и создается новый кластер (отдельная таблица) или помещается в уже существующий кластер, который дает максимум Profit(C,r).&lt;br /&gt;
На итерационном этапе просматривается таблица профилей и для каждого профиля решается задача определения кластера, если новый кластер  максимизирует Profit(C,r), то профиль переносится в этот кластер. В начале каждого цикла устанавливается индикатор перемещения moved := false. Если в цикле происходит перемещение профиля индикатор перемещения изменяется moved :=true. Итерации завершаются, если значение moved=false не изменится. После завершения итераций удаляются все пустые кластеры.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Предположим, что транзакции хранятся в таблице базы данных. Лучшее решение ищется в течение последовательного итеративного перебора записей базы данных. Поскольку критерий оптимизации имеет глобальный характер, основанный только на расчете H и W, производительность и скорость алгоритма будет значительно выше, чем при попарном сравнении транзакций.&lt;br /&gt;
&lt;br /&gt;
Реализация алгоритма требует первого прохода по таблице транзакций для построения начального разбиения, определяемого функцией Profit(C,r). После этого требуется незначительное (1-3) количество дополнительных сканирований таблицы для повышения качества кластеризации и оптимизации функции стоимости. Если в текущем проходе по таблице изменений не произошло, то алгоритм прекращает свою работу.&lt;br /&gt;
&lt;br /&gt;
Для завершения реализации алгоритма нам нужны еще две функции, рассчитывающие прирост Profit(C,r) при добавлении и удалении транзакции из кластера.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13741</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13741"/>
		<updated>2016-10-25T14:45:29Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для начала формализуем рассматриваемую задачу кластеризации для категорийных данных. Все изложение будет идти как будто бы у нас в наличии имеется база транзакционных данных, а в конце материала будет показано, как с помощью CLOPE разбивать на кластеры любые категорийные массивы, работая с ними как с транзакционными.&lt;br /&gt;
&lt;br /&gt;
Под термином транзакция здесь понимается некоторый произвольный набор объектов, будь это список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга - в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13740</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13740"/>
		<updated>2016-10-25T14:45:13Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
В результате кластеризации поисковый профиль конечного пользователя i окажется в определенном кластере .&lt;br /&gt;
&lt;br /&gt;
что составляет основную часть метода (подсчет операций основы)&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13722</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13722"/>
		<updated>2016-10-25T13:17:31Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Свойства и структура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13718</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13718"/>
		<updated>2016-10-25T13:15:05Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Вычислительное ядро алгоритма состоит в вычислении на каждой итерации функции стоимости&lt;br /&gt;
Вычислительное ядро последовательной версии метода Холецкого можно составить из&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13713</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13713"/>
		<updated>2016-10-25T13:04:32Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &amp;lt;/math&amp;gt;, то действие алгоритма заканчивается. &amp;lt;ref&amp;gt; Нейский И.М. Классификация и сравнение методов кластеризации.  http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf &amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13710</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13710"/>
		<updated>2016-10-25T13:02:54Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть имеется база транзакций &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt;, состоящая из множества транзакций &amp;lt;math&amp;gt;\{t_{1},t_{2},...,t_{n}\}&amp;lt;/math&amp;gt;. Каждая транзакция есть набор объектов &amp;lt;math&amp;gt;\{i_1,...,i_A\} &amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Множество кластеров &amp;lt;math&amp;gt;\{C_1,...,C_k\} &amp;lt;/math&amp;gt; есть разбиение множества &amp;lt;math&amp;gt;\{t_1,...t_n\} &amp;lt;/math&amp;gt;, такое, что &amp;lt;math&amp;gt;C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\ne&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\empty&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\land&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\cap&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;C_j= \empty&amp;lt;/math&amp;gt;, для &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt; j&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; \le&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt; k&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Каждый элемент &amp;lt;math&amp;gt; C_i&amp;lt;/math&amp;gt; называется &#039;&#039;кластером&#039;&#039;    , &amp;lt;math&amp;gt; n&amp;lt;/math&amp;gt; — количество транзакций, &amp;lt;math&amp;gt;A &amp;lt;/math&amp;gt; — длина транзакции, &amp;lt;math&amp;gt;k &amp;lt;/math&amp;gt; — число кластеров.&lt;br /&gt;
&lt;br /&gt;
При этом задан параметр &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
&lt;br /&gt;
Характеристики кластера &amp;lt;math&amp;gt;C_j &amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; — множество уникальных объектов;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Occ(i,C_j) &amp;lt;/math&amp;gt; — количество вхождений объекта &amp;lt;math&amp;gt; i&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt; C_j&amp;lt;/math&amp;gt; ;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;W(C_j) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \mid&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;D(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;\mid&amp;lt;/math&amp;gt; — высота кластера;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;H(C_j)&amp;lt;/math&amp;gt; = &amp;lt;math&amp;gt;S(C_j)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;/&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;W(C_j)&amp;lt;/math&amp;gt; — ширина кластера.&lt;br /&gt;
&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации &amp;lt;math&amp;gt;C = \{C_1, \ldots C_k\}&amp;lt;/math&amp;gt;, обозначаемой, как &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция &amp;lt;math&amp;gt; Profit(C)&amp;lt;/math&amp;gt; была максимальной.&lt;br /&gt;
&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы &amp;lt;math&amp;gt; Profit(C) \longrightarrow max&amp;lt;/math&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость &amp;lt;math&amp;gt; Profit(C) &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;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13708</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13708"/>
		<updated>2016-10-25T13:02:15Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Пусть имеется база транзакций D, состоящая из множества транзакций \{t_{1},t_{2},...,t_{n}\}. Каждая транзакция есть набор объектов \{i_1,...,i_A\} .&lt;br /&gt;
Множество кластеров \{C_1,...,C_k\}  есть разбиение множества \{t_1,...t_n\} , такое, что C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\} и C_i \ne \empty \land C_i \cap C_j= \empty, для 1 \le i,  j  \le  k.&lt;br /&gt;
Каждый элемент  C_i называется кластером ,  n — количество транзакций, A  — длина транзакции, k  — число кластеров.&lt;br /&gt;
При этом задан параметр r - коэффициент отталкивания.&lt;br /&gt;
Характеристики кластера C_j  :&lt;br /&gt;
D(C_j) — множество уникальных объектов;&lt;br /&gt;
Occ(i,C_j)  — количество вхождений объекта  i в кластер  C_j ;&lt;br /&gt;
S(C_j) = \sum_{i \in D(C_j)} Occ(i,C_j) = \sum _{t_i \in C_j} \mid t_i \mid &lt;br /&gt;
W(C_j)   =   \mid D(C_j) \mid — высота кластера;&lt;br /&gt;
H(C_j) = S(C_j) / W(C_j) — ширина кластера.&lt;br /&gt;
Формула для вычисления глобального критерия — функции стоимости текущей кластеризации C = \{C_1, \ldots C_k\}, обозначаемой, как  Profit(C) :&lt;br /&gt;
 Profit(C)=\frac{\sum^{k}_{i=1} G(C_i) \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid}   =  \frac{\sum^{k}_{i=1} \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid} {\sum^{k}_{i=1} \mid C_i \mid} &lt;br /&gt;
Для построения начального распределения транзакций по кластерам необходимо сделать первый проход по таблице (фаза инициализации). В время нее для каждой транзакции выбирается кластер таким образом, чтобы функция  Profit(C) была максимальной.&lt;br /&gt;
Далее происходят &amp;quot;уточняющие&amp;quot; проходы (фаза итерации), где для каждой транзакции производится попытка перемещения в другой кластер так, чтобы  Profit(C) \longrightarrow max.&lt;br /&gt;
Если больше не существует перемещений транзакций, увеличивающих глобальную стоимость  Profit(C) , то действие алгоритма заканчивается.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13706</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13706"/>
		<updated>2016-10-25T13:01:28Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
Качество кластеризации достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Он легко рассчитывается и интерпретируется. Во время работы алгоритм хранит в RAM небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром – коэффициентом отталкивания.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13702</id>
		<title>Участник:Пискунов Константин/ Алгоритм кластеризации категориальных данных (Clustering with sLOPE, CLOPE)</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%9F%D0%B8%D1%81%D0%BA%D1%83%D0%BD%D0%BE%D0%B2_%D0%9A%D0%BE%D0%BD%D1%81%D1%82%D0%B0%D0%BD%D1%82%D0%B8%D0%BD/_%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_%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_(Clustering_with_sLOPE,_CLOPE)&amp;diff=13702"/>
		<updated>2016-10-25T12:58:20Z</updated>

		<summary type="html">&lt;p&gt;Final: /* Литература */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{algorithm&lt;br /&gt;
| name              = Алгоритм CLOPE&lt;br /&gt;
| serial_complexity = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_height         = &amp;lt;math&amp;gt;O(N*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| pf_width          = &amp;lt;math&amp;gt;O(N*k*A)&amp;lt;/math&amp;gt;&lt;br /&gt;
| input_data        = &amp;lt;math&amp;gt;N*A+1&amp;lt;/math&amp;gt;&lt;br /&gt;
| output_data       = &amp;lt;math&amp;gt;N&amp;lt;/math&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Основные авторы описания: [[Участник:Final|К.А.Пискунов]]&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Задачи кластеризации больших массивов категорийных данных весьма актуальна для систем анализа данных. Категорийные данные встречаются в любых областях: производство, коммерция, маркетинг, медицина… Категорийные данные включают в себя и так называемые транзакционные данные: чеки в супермаркетах, логи посещений веб-ресурсов. Сюда же относится анализ и классификация текстовых документов (Text Mining). &amp;lt;ref&amp;gt; &amp;quot;Кластеризация категорийных данных: масштабируемый алгоритм CLOPE&amp;quot; https://basegroup.ru/clusterization/clope.htm&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категорийными данными понимаются качественные характеристики объектов, измеренные в шкале наименований. Напомним: при использовании шкалы наименований указывается только, одинаковы или нет объекты относительно измеряемого признака.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE. Предназначен для кластеризации огромных наборов категорийных данных. К достоинствам относятся высокие масштабируемость и скорость работы и качество кластеризации, что достигается использованием глобального критерия оптимизации на основе максимизации градиента высоты гистограммы кластера. Отличается простотой программной реализации. Во время работы алгоритм хранит в памяти небольшое количество информации по каждому кластеру и требует минимальное число сканирований набора данных. CLOPE автоматически подбирает количество кластеров, причем это регулируется одним единственным параметром   коэффициентом отталкивания. CLOPE предложен в 2002 году группой китайских ученых &amp;lt;ref&amp;gt; Yang, Y., Guan, H., You. J. CLOPE: A fast and Effective Clustering Algorithm for Transactional Data In Proc. of SIGKDD’02, July 23-26, 2002, Edmonton, Alberta, Canada. &amp;lt;/ref&amp;gt;. При этом он обеспечивает более высокую производительность и лучшее качество кластеризации в сравнении с многими иерархическими алгоритмами.&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE является масштабируемым, поскольку способен работать в ограниченном объеме оперативной памяти компьютера. Во время работы в оперативной памяти хранится только текущая транзакция и небольшое количество информации по каждому кластеру, которая состоит из: количества транзакций N, числа уникальных объектов (или ширины кластера) W, простой хэш-таблицы для расчета Occ(i,C) и значения S площади кластера.&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость алгоритма ====&lt;br /&gt;
&lt;br /&gt;
==== Масштабируемость реализации алгоритма ====&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&lt;br /&gt;
Wang, K., Xu, C.. Liu, B. Clustering transactions using large items. In Proc. CIKM’99, Kansas, Missouri, 1999.&lt;br /&gt;
&lt;br /&gt;
Fasulo D. «An Analysis Of Recent Work on Clustering Algorithms». Department of Computer Science &amp;amp; Engineering.» / D. Fasulo// University of Washington,1999.&lt;/div&gt;</summary>
		<author><name>Final</name></author>
	</entry>
</feed>