<?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=Ilya365365</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=Ilya365365"/>
	<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/Ilya365365"/>
	<updated>2026-10-23T02:42:36Z</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:Ilya365365/%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&amp;diff=22042</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=22042"/>
		<updated>2017-02-02T18:10:34Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: /* Свойства и структура алгоритма CLOPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных транзакционных данных. Алгоритм основан на эвристическом методе повышения близости транзакций в кластерах при помощи оптимизации параметров кластерной гистограммы.  Авторы (Yiling Yang Xudong Guan Jinyuan You )&amp;lt;ref&amp;gt;Y. Yang, X. Guan J. You. CLOPE: A Fast and Effective Clustering Algorithm for Transactional Data. http://www.inf.ufrgs.br/~alvares/CMP259DCBD/clope.pdf&amp;lt;/ref&amp;gt; предложили эффективный, масштабируемый алгоритм, не требующий хранения обучающей выборки в оперативной памяти.    &lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; (количество уникальных объектов кластера), общее число объектов в кластере &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; и высоту &amp;lt;math&amp;gt;H(C_i) = \frac{S(C_i)}{W(C_i)}&amp;lt;/math&amp;gt;.  Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, M - число транзакций в выборке, &amp;lt;math&amp;gt;G(C_i) = \frac{S(C_i)}{W^r(C_i)}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания. Чем больше &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;, тем больше кластеров будет сгенерировано. &lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
====Постановка задачи ====&lt;br /&gt;
Даны конечное множество объектов &amp;lt;math&amp;gt;O = \{o_1, \dots, o_N\}&amp;lt;/math&amp;gt;, выборка транзакций &amp;lt;math&amp;gt;D = \{t_1, \dots, t_M\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
Транзакция - вектор произвольной длины, каждая компонента которого является объектом из &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;.&lt;br /&gt;
Требуется найти кластеризацию &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; - конечное покрытие &amp;lt;math&amp;gt;D&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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Оптимизация функционала====&lt;br /&gt;
Авторы алгоритма CLOPE предложили жадную стратегию оптимизации &amp;lt;math&amp;gt;Profit&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём функции &amp;lt;math&amp;gt;Delete(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при удалении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; из кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;Add(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при добавлении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при перемещении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; из кластера &amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;. Ширину &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; пустого кластера примем равной 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Delete(C_i, t_j, r) = G(\{C_i \backslash t_j\})\times\mid C_i \backslash \{t_j\}\mid - G(C_i)\times\mid C_i\mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) - size(t_j)}{{W(C_i \backslash \{t_j\})}^r} \times (\mid C_i \mid - 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Add(C_i, t_j, r) = G(C_i \cup \{t_j\}) \times \mid C_i \cup \{t_j\} \mid - G(C_i)\times\mid C_i\mid&amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) + size(t_j)}{{W(C_i \cup \{t_j\})}^r} \times (\mid C_i \mid + 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r) = Add(C_i, t_j, r) + Delete(C_l, t_j, r)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; - кластер, к которому отнесена &amp;lt;math&amp;gt;t_j&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;
Далее происходят уточняющие проходы по выборке. Во время уточняющего прохода каждая транзакция перемещается в существующий или пустой кластер таким образом, чтобы максимизировать &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;. Если во время уточняющего прохода не было перемещено ни одной транзакции, алгоритм останавливается.&lt;br /&gt;
&lt;br /&gt;
Авторы CLOPE доказали следующую &#039;&#039;&#039;теорему&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;C_i = argmax_{C_k \in C}DeltaAdd(C_k,t, r)&amp;lt;/math&amp;gt;, то перемещение &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; даст наибольший прирост функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Доказательство&#039;&#039;&#039;: Рассмотрим некоторую кластеризацию &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; и кластеризацию &amp;lt;math&amp;gt;C^{new}&amp;lt;/math&amp;gt;, полученную из  &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; перемещением &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;Profit(C^{new}) - Profit(C) = \frac{Add(C_i, t, r) + Delete(C_l, t, r)}{M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{DeltaAdd(C_i, t, r)}{M};&amp;lt;/math&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;max_{C_k \in C} Profit(C^{new}) - Profit(C) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;  max_{C_k \in C} \frac{DeltaAdd(C_k, t, r)}{M} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;  max_{C_k \in C} DeltaAdd(C_k,t, r)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Следствие 1&#039;&#039;&#039;: Алгоритм CLOPE сходится при любых &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D&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;Доказательство следствия 1&#039;&#039;&#039;: Так как &amp;lt;math&amp;gt;DeltaAdd(C_l, t, r) = 0 &amp;lt;/math&amp;gt;  (&amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; - кластер, к которому отнесена &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;), любое перемещение транзакции увеличивает &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;, следовательно, алгоритм CLOPE сходится при любых &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r&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;
&amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r) = \frac {S(C_l) - size(t_j)}{{W(C_l \backslash \{t_j\})}^r} \times (\mid C_l \mid - 1) - \frac {S(C_l)}{{W(C_l)}^r} \times \mid C_l \mid  &amp;lt;/math&amp;gt; &amp;amp;nbsp;+&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) + size(t_j)}{{W(C_i \cup \{t_j\})}^r} \times (\mid C_i \mid + 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма являются функции &amp;lt;math&amp;gt;Delete&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Add&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Самая сложная операция при реализации вычислительного ядра - вычисление ширины кластера. Так как для большинства известных задач кластеризации транзакционных данных средняя длина транзакции &amp;lt;math&amp;gt;A = \frac{\sum_{i = 1}^{M}t_i}{M} &amp;lt;&amp;lt; \mid O \mid&amp;lt;/math&amp;gt;, авторы алгоритма рекомендуют хранить информацию об объектах кластера в ассоциативном массиве (словаре), ключом которого является номер объекта, а данными - число вхождений соответствующего объекта в кластер. При реализации словаря авторы CLOPE рекомендуют использовать хэш-таблицу.&lt;br /&gt;
Таким образом при добавлении или удалении транзакции &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;size(t)&amp;lt;/math&amp;gt; раз обратиться к соответствующему словарю для поиска элементов и, в худшем случае, добавить или удалить &amp;lt;math&amp;gt;size(t)&amp;lt;/math&amp;gt; элементов. Эффективная реализация ассоциативного массива является важнейшей и самой частью реализации алгоритма CLOPE. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
====Класс Transaction====&lt;br /&gt;
Класс Transaction - структура данных, описывающая транзакцию. Содержит следующие поля:&lt;br /&gt;
* size - количество объектов в транзакции&lt;br /&gt;
* objects - массив с номерами объектов&lt;br /&gt;
* id - уникальный номер транзакции. Равен 0, если транзакция не отнесена к какому-либо кластеру&lt;br /&gt;
* cluster_id - номер кластера, в котором находится транзакция.&lt;br /&gt;
Класс Transaction имеет метод add(Cluster)&lt;br /&gt;
    add(Cluster):&lt;br /&gt;
        cluster_id = Cluster.id;&lt;br /&gt;
&lt;br /&gt;
====Класс Cluster====&lt;br /&gt;
Класс Cluster - структура данных, описывающая кластер. Содержит следующие поля:&lt;br /&gt;
*repultion - коэффициент отталкиваня r. Входной параметр CLOPE.&lt;br /&gt;
*transaction_map - хэш-таблица, хранящая номера входящих в кластер транзакций&lt;br /&gt;
*object_map - словарь, хранящий количество вхождений объектов.&lt;br /&gt;
*transaction_quantity - число транзакций, входящих в кластер&lt;br /&gt;
*power - число объектов в кластере&lt;br /&gt;
*width - ширина кластера (число уникальных объектов)&lt;br /&gt;
*profit_summand - вклад кластера в функционал profit&lt;br /&gt;
*id - уникальный номер кластера&lt;br /&gt;
Класс Cluster содержит следующие методы:&lt;br /&gt;
* calculate_profit_summand(power, width, transaction_quantity) вычисляет вклад кластера с заданными параметрами в функционал Profit&lt;br /&gt;
     calculate_profit_summand(power, width, transaction_quantity)&lt;br /&gt;
         &#039;&#039;&#039;return&#039;&#039;&#039; power * transaction_quantity / width^self.repultion;&lt;br /&gt;
* estimate_profit_summand_after_addition(transaction) - оценивает  вклад кластера в функционал Profit после добавления транзакции&lt;br /&gt;
    estimate_profit_summand_after_addition(transaction)&lt;br /&gt;
        new_width = width;&lt;br /&gt;
         &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction:&lt;br /&gt;
                if (self.object_map.get(object) == NULL):&lt;br /&gt;
                    new_width += 1;&lt;br /&gt;
        new_profit = calculate_profit_summand(self.power + transaction.size, &lt;br /&gt;
                                              new_width, &lt;br /&gt;
                                              transaction_quantity + 1); &lt;br /&gt;
         &#039;&#039;&#039;return&#039;&#039;&#039; new_profit;&lt;br /&gt;
               &lt;br /&gt;
&lt;br /&gt;
* estimate_profit_summand_after_dellition(transaction) - оценивает  вклад кластера в функционал Profit после удаления транзакции&lt;br /&gt;
    estimate_profit_summand_after_dellition(transaction)&lt;br /&gt;
        new_width = width;&lt;br /&gt;
         &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction:&lt;br /&gt;
                if (self.object_map.get(object) == 1) new_width -= 1;&lt;br /&gt;
        new_profit = calculate_profit_summand(self.power - transaction.size, &lt;br /&gt;
                                              new_width, &lt;br /&gt;
                                              transaction_quantity - 1); &lt;br /&gt;
         &#039;&#039;&#039;return&#039;&#039;&#039; new_profit;&lt;br /&gt;
* add_transaction(transaction) - добавление транзакции&lt;br /&gt;
    add_transaction(transaction)&lt;br /&gt;
        self.transaction_map.push(transaction.id);&lt;br /&gt;
        self.power += transaction.size;&lt;br /&gt;
        self.transaction_quantity += 1;&lt;br /&gt;
        &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction.objects:&lt;br /&gt;
                &#039;&#039;&#039;if&#039;&#039;&#039; (self.object_map.get(object) == NULL):&lt;br /&gt;
                    self.object_map.push((object,1));&lt;br /&gt;
                &#039;&#039;&#039;else:&#039;&#039;&#039;&lt;br /&gt;
                    self.object_map[object] += 1;&lt;br /&gt;
        self.width = self.object_map.size();&lt;br /&gt;
        self.profit_summand = calculate_profit_summand(self.power,&lt;br /&gt;
                                                       self.width,&lt;br /&gt;
                                         self.transaction_quantity);&lt;br /&gt;
* delete_transaction(transaction) - удаление транзакции&lt;br /&gt;
    delete_transaction(transaction)&lt;br /&gt;
        self.transaction_map.pop(transaction.id);&lt;br /&gt;
        self.power -= transaction.size;&lt;br /&gt;
        self.transaction_quantity -= 1;&lt;br /&gt;
        &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction.objects:&lt;br /&gt;
                &#039;&#039;&#039;if&#039;&#039;&#039; (self.object_map.get(object) == 1):&lt;br /&gt;
                    self.object_map.pop((object,1));&lt;br /&gt;
                &#039;&#039;&#039;else:&#039;&#039;&#039;&lt;br /&gt;
                    self.object_map[object] -= 1;&lt;br /&gt;
        self.width = self.object_map.size();&lt;br /&gt;
        self.profit_summand = calculate_profit_summand(self.power,&lt;br /&gt;
                                                       self.width, &lt;br /&gt;
                                         self.transaction_quantity);&lt;br /&gt;
Также класс Cluster содержит два конструктора:&lt;br /&gt;
* Cluster(id) - конструктор, создающий пустой кластер.&lt;br /&gt;
* Cluster(id, transaction) - конструктор, создающий кластер с единственной транзакцией.                                                           &lt;br /&gt;
====Класс CLOPE====&lt;br /&gt;
Класс CLOPE структура данных, обеспечивающая работу алгоритма. Класс CLOPE содержит следующие поля:&lt;br /&gt;
* cluster_map - ассоциативный массив, содержащий информацию о кластерах. Ключ - номер кластера. Кластер с индексом 0 является пустым.&lt;br /&gt;
* cluster_quantity - переменная, хранящая количество кластеров&lt;br /&gt;
* sample_size - переменная хранящая, количество транзакций.&lt;br /&gt;
В классе CLOPE необходимо реализовать следующие методы:&lt;br /&gt;
* get_next_transaction() - получение следующей транзакции из файла. Если достигнут конец файла, считывается первая транзакция.&lt;br /&gt;
*get_best_move(transaction) - найти кластер, в который следует переместить транзакцию&lt;br /&gt;
    get_best_move(transaction)&lt;br /&gt;
        &#039;&#039;&#039;if&#039;&#039;&#039; transaction.cluster_id != 0 : //транзакция лежит в кластере&lt;br /&gt;
            old_cluster = self.cluster_map[transaction.cluster_id];&lt;br /&gt;
            delete_change = old_cluster.profit_summand - &lt;br /&gt;
                            old_cluster.estimate_profit_summand_after_dellition(transaction);&lt;br /&gt;
        else: //инициализация&lt;br /&gt;
            delete_change = 0;&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=22041</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=22041"/>
		<updated>2017-02-02T17:30:09Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: /* Свойства и структура алгоритма CLOPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных транзакционных данных. Алгоритм основан на эвристическом методе повышения близости транзакций в кластерах при помощи оптимизации параметров кластерной гистограммы.  Авторы (Yiling Yang Xudong Guan Jinyuan You )&amp;lt;ref&amp;gt;Y. Yang, X. Guan J. You. CLOPE: A Fast and Effective Clustering Algorithm for Transactional Data. http://www.inf.ufrgs.br/~alvares/CMP259DCBD/clope.pdf&amp;lt;/ref&amp;gt; предложили эффективный, масштабируемый алгоритм, не требующий хранения обучающей выборки в оперативной памяти.    &lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; (количество уникальных объектов кластера), общее число объектов в кластере &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; и высоту &amp;lt;math&amp;gt;H(C_i) = \frac{S(C_i)}{W(C_i)}&amp;lt;/math&amp;gt;.  Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, M - число транзакций в выборке, &amp;lt;math&amp;gt;G(C_i) = \frac{S(C_i)}{W^r(C_i)}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания. Чем больше &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;, тем больше кластеров будет сгенерировано. &lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
====Постановка задачи ====&lt;br /&gt;
Даны конечное множество объектов &amp;lt;math&amp;gt;O = \{o_1, \dots, o_N\}&amp;lt;/math&amp;gt;, выборка транзакций &amp;lt;math&amp;gt;D = \{t_1, \dots, t_M\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
Транзакция - вектор произвольной длины, каждая компонента которого является объектом из &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;.&lt;br /&gt;
Требуется найти кластеризацию &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; - конечное покрытие &amp;lt;math&amp;gt;D&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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Оптимизация функционала====&lt;br /&gt;
Авторы алгоритма CLOPE предложили жадную стратегию оптимизации &amp;lt;math&amp;gt;Profit&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём функции &amp;lt;math&amp;gt;Delete(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при удалении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; из кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;Add(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при добавлении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при перемещении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; из кластера &amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;. Ширину &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; пустого кластера примем равной 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Delete(C_i, t_j, r) = G(\{C_i \backslash t_j\})\times\mid C_i \backslash \{t_j\}\mid - G(C_i)\times\mid C_i\mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) - size(t_j)}{{W(C_i \backslash \{t_j\})}^r} \times (\mid C_i \mid - 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Add(C_i, t_j, r) = G(C_i \cup \{t_j\}) \times \mid C_i \cup \{t_j\} \mid - G(C_i)\times\mid C_i\mid&amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) + size(t_j)}{{W(C_i \cup \{t_j\})}^r} \times (\mid C_i \mid + 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r) = Add(C_i, t_j, r) + Delete(C_l, t_j, r)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; - кластер, к которому отнесена &amp;lt;math&amp;gt;t_j&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;
Далее происходят уточняющие проходы по выборке. Во время уточняющего прохода каждая транзакция перемещается в существующий или пустой кластер таким образом, чтобы максимизировать &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;. Если во время уточняющего прохода не было перемещено ни одной транзакции, алгоритм останавливается.&lt;br /&gt;
&lt;br /&gt;
Авторы CLOPE доказали следующую &#039;&#039;&#039;теорему&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;C_i = argmax_{C_k \in C}DeltaAdd(C_k,t, r)&amp;lt;/math&amp;gt;, то перемещение &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; даст наибольший прирост функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Доказательство&#039;&#039;&#039;: Рассмотрим некоторую кластеризацию &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; и кластеризацию &amp;lt;math&amp;gt;C^{new}&amp;lt;/math&amp;gt;, полученную из  &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; перемещением &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;Profit(C^{new}) - Profit(C) = \frac{Add(C_i, t, r) + Delete(C_l, t, r)}{M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{DeltaAdd(C_i, t, r)}{M};&amp;lt;/math&amp;gt;   &lt;br /&gt;
 &lt;br /&gt;
&amp;lt;math&amp;gt;max_{C_k \in C} Profit(C^{new}) - Profit(C) &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;  max_{C_k \in C} \frac{DeltaAdd(C_k, t, r)}{M} &amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;  max_{C_k \in C} DeltaAdd(C_k,t, r)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Следствие 1&#039;&#039;&#039;: Алгоритм CLOPE сходится при любых &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D&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;Доказательство следствия 1&#039;&#039;&#039;: Так как &amp;lt;math&amp;gt;DeltaAdd(C_l, t, r) = 0 &amp;lt;/math&amp;gt;  (&amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; - кластер, к которому отнесена &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;), любое перемещение транзакции увеличивает &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;, следовательно, алгоритм CLOPE сходится при любых &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r&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;
&amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r) = \frac {S(C_l) - size(t_j)}{{W(C_l \backslash \{t_j\})}^r} \times (\mid C_l \mid - 1) - \frac {S(C_l)}{{W(C_l)}^r} \times \mid C_l \mid  &amp;lt;/math&amp;gt; &amp;amp;nbsp;+&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) + size(t_j)}{{W(C_i \cup \{t_j\})}^r} \times (\mid C_i \mid + 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вычислительным ядром алгоритма являются функции &amp;lt;math&amp;gt;Delete&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;Add&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Самая сложная операция при реализации вычислительного ядра - вычисление ширины кластера. Так как для большинства известных задач кластеризации транзакционных данных средняя длина транзакции &amp;lt;math&amp;gt;A = \frac{\sum_{i = 1}^{M}t_i}{M} &amp;lt;&amp;lt; \mid O \mid&amp;lt;/math&amp;gt;, авторы алгоритма рекомендуют хранить информацию об объектах кластера в ассоциативном массиве (словаре), ключом которого является номер объекта, а данными - число вхождений соответствующего объекта в кластер. При реализации словаря авторы CLOPE рекомендуют использовать хэш-таблицу.&lt;br /&gt;
Таким образом при добавлении или удалении транзакции &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; требуется &amp;lt;math&amp;gt;size(t)&amp;lt;/math&amp;gt; раз обратиться к соответствующему словарю для поиска элементов и, в худшем случае, добавить или удалить &amp;lt;math&amp;gt;size(t)&amp;lt;/math&amp;gt; элементов. Эффективная реализация ассоциативного массива является важнейшей и самой частью реализации алгоритма CLOPE. &lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
====Класс Transaction====&lt;br /&gt;
Класс Transaction - структура данных, описывающая транзакцию. Содержит следующие поля:&lt;br /&gt;
* size - количество объектов в транзакции&lt;br /&gt;
* objects - массив с номерами объектов&lt;br /&gt;
* id - уникальный номер транзакции&lt;br /&gt;
====Класс Cluster====&lt;br /&gt;
Класс Cluster - структура данных, описывающая кластер. Содержит следующие поля:&lt;br /&gt;
*repultion - коэффициент отталкиваня r. Входной параметр CLOPE.&lt;br /&gt;
*transaction_map - хэш-таблица, хранящая номера входящих в кластер транзакций&lt;br /&gt;
*object_map - словарь, хранящий количество вхождений объектов.&lt;br /&gt;
*transaction_quantity - число транзакций, входящих в кластер&lt;br /&gt;
*power - число объектов в кластере&lt;br /&gt;
*width - ширина кластера (число уникальных объектов)&lt;br /&gt;
*profit_summand - вклад кластера в функцию profit&lt;br /&gt;
Класс Cluster содержит следующие методы:&lt;br /&gt;
* calculate_profit_summand(power, width, transaction_quantity) вычисляет вклад кластера с заданными параметрами в функцию profit&lt;br /&gt;
     calculate_profit_summand(power, width, transaction_quantity)&lt;br /&gt;
         &#039;&#039;&#039;return&#039;&#039;&#039; power * transaction_quantity / width^self.repultion&lt;br /&gt;
* estimate_width_after_addition(transaction) - оценивает ширину кластера, после добавления транзакции в кластер&lt;br /&gt;
    estimate_width_after_addition(transaction)&lt;br /&gt;
        new_width = width;&lt;br /&gt;
         &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction:&lt;br /&gt;
                if (self.object_map.get(object) == NULL) new_width += 1;&lt;br /&gt;
         &#039;&#039;&#039;return&#039;&#039;&#039; new_width;&lt;br /&gt;
                &lt;br /&gt;
&lt;br /&gt;
* estimate_width_after_delition(transaction) - оценивает ширину кластера, после удаления транзакции из кластера&lt;br /&gt;
    estimate_width_after_deliton(transaction)&lt;br /&gt;
        new_width = width;&lt;br /&gt;
         &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction:&lt;br /&gt;
                &#039;&#039;&#039;if&#039;&#039;&#039; (object_map.get(object) == 1):&lt;br /&gt;
                    new_width -= 1;&lt;br /&gt;
         &#039;&#039;&#039;return&#039;&#039;&#039; new_width;&lt;br /&gt;
* add_transaction(transaction) - добавление транзакции&lt;br /&gt;
    add_transaction(transaction)&lt;br /&gt;
        self.transaction_map.push(transaction.id)&lt;br /&gt;
        self.power += transaction.size&lt;br /&gt;
        self.transaction_quantity += 1&lt;br /&gt;
        &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction.objects:&lt;br /&gt;
                &#039;&#039;&#039;if&#039;&#039;&#039; (self.object_map.get(object) == NULL):&lt;br /&gt;
                    self.object_map.push((object,1));&lt;br /&gt;
                &#039;&#039;&#039;else:&#039;&#039;&#039;&lt;br /&gt;
                    self.object_map[object] += 1;&lt;br /&gt;
        self.width = self.object_map.size();&lt;br /&gt;
        self.profit_summand = calculate_profit_summand(self.power,&lt;br /&gt;
                                                       self.width,&lt;br /&gt;
                                         self.transaction_quantity)&lt;br /&gt;
* delete_transaction(transaction) - удаление транзакции&lt;br /&gt;
    delete_transaction(transaction)&lt;br /&gt;
        self.transaction_map.pop(transaction.id)&lt;br /&gt;
        self.power -= transaction.size&lt;br /&gt;
        self.transaction_quantity -= 1&lt;br /&gt;
        &#039;&#039;&#039;for each&#039;&#039;&#039; object &#039;&#039;&#039;in&#039;&#039;&#039; transaction.objects:&lt;br /&gt;
                &#039;&#039;&#039;if&#039;&#039;&#039; (self.object_map.get(object) == 1):&lt;br /&gt;
                    self.object_map.pop((object,1));&lt;br /&gt;
                &#039;&#039;&#039;else:&#039;&#039;&#039;&lt;br /&gt;
                    self.object_map[object] -= 1;&lt;br /&gt;
        self.width = self.object_map.size();&lt;br /&gt;
        self.profit_summand = calculate_profit_summand(self.power,&lt;br /&gt;
                                                       self.width, &lt;br /&gt;
                                         self.transaction_quantity)                                                           &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=22040</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=22040"/>
		<updated>2017-02-02T12:49:41Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: /* Свойства и структура алгоритма CLOPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных транзакционных данных. Алгоритм основан на эвристическом методе повышения близости транзакций в кластерах при помощи оптимизации параметров кластерной гистограммы.  Авторы (Yiling Yang Xudong Guan Jinyuan You )&amp;lt;ref&amp;gt;Y. Yang, X. Guan J. You. CLOPE: A Fast and Effective Clustering Algorithm for Transactional Data. http://www.inf.ufrgs.br/~alvares/CMP259DCBD/clope.pdf&amp;lt;/ref&amp;gt; предложили эффективный, масштабируемый алгоритм, не требующий хранения обучающей выборки в оперативной памяти.    &lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; (количество уникальных объектов кластера), общее число объектов в кластере &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; и высоту &amp;lt;math&amp;gt;H(C_i) = \frac{S(C_i)}{W(C_i)}&amp;lt;/math&amp;gt;.  Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, M - число транзакций в выборке, &amp;lt;math&amp;gt;G(C_i) = \frac{S(C_i)}{W^r(C_i)}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания. Чем больше &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;, тем больше кластеров будет сгенерировано. &lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
====Постановка задачи ====&lt;br /&gt;
Даны конечное множество объектов &amp;lt;math&amp;gt;O = \{o_1, \dots, o_N\}&amp;lt;/math&amp;gt;, выборка транзакций &amp;lt;math&amp;gt;D = \{t_1, \dots, t_M\}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания.&lt;br /&gt;
Транзакция - вектор произвольной длины, каждая компонента которого является объектом из &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;.&lt;br /&gt;
Требуется найти кластеризацию &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; - конечное покрытие &amp;lt;math&amp;gt;D&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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Оптимизация функционала====&lt;br /&gt;
Авторы алгоритма CLOPE предложили жадную стратегию оптимизации &amp;lt;math&amp;gt;Profit&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Введём функции &amp;lt;math&amp;gt;Delete(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при удалении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; из кластера &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;Add(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при добавлении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;; &amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r)&amp;lt;/math&amp;gt;, вычисляющую изменение функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt; при перемещении транзакции &amp;lt;math&amp;gt;t_j&amp;lt;/math&amp;gt; из кластера &amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;. Ширину &amp;lt;math&amp;gt;W&amp;lt;/math&amp;gt; пустого кластера примем равной 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Delete(C_i, t_j, r) = G(\{C_i \backslash t_j\})\times\mid C_i \backslash \{t_j\}\mid - G(C_i)\times\mid C_i\mid &amp;lt;/math&amp;gt; &lt;br /&gt;
&amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) - size(t_j)}{{W(C_i \backslash \{t_j\})}^r} \times (\mid C_i \mid - 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;Add(C_i, t_j, r) = G(C_i \cup \{t_j\}) \times \mid C_i \cup \{t_j\} \mid - G(C_i)\times\mid C_i\mid&amp;lt;/math&amp;gt; &amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt; \frac {S(C_i) + size(t_j)}{{W(C_i \cup \{t_j\})}^r} \times (\mid C_i \mid + 1) - \frac {S(C_i)}{{W(C_i)}^r} \times \mid C_i \mid &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;DeltaAdd(C_i, t_j, r) = Add(C_i, t_j, r) + Delete(C_l, t_j, r)&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; - кластер, к которому отнесена &amp;lt;math&amp;gt;t_j&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;
Далее происходят уточняющие проходы по выборке. Во время уточняющего прохода каждая транзакция перемещается в существующий или пустой кластер таким образом, чтобы максимизировать &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;. Если во время уточняющего прохода не было перемещено ни одной транзакции, алгоритм останавливается.&lt;br /&gt;
&lt;br /&gt;
Авторы CLOPE доказали следующую &#039;&#039;&#039;теорему&#039;&#039;&#039;: &lt;br /&gt;
&lt;br /&gt;
Если &amp;lt;math&amp;gt;C_i = argmax_{C_k \in C}DeltaAdd(C_k,t, r)&amp;lt;/math&amp;gt;, то перемещение &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; даст наибольший прирост функции &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Доказательство&#039;&#039;&#039;: Рассмотрим некоторую кластеризацию &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; и кластеризацию &amp;lt;math&amp;gt;C^{new}&amp;lt;/math&amp;gt;, полученную из  &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt; перемещением &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt; в кластер &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;.&lt;br /&gt;
Тогда &amp;lt;math&amp;gt;Profit(C^{new}) - Profit(C) = \frac{Add(C_i, t, r) + Delete(C_l, t, r)}{M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;=&amp;amp;nbsp; &amp;lt;math&amp;gt;\frac{DeltaAdd(C_i, t, r)}{M}&amp;lt;/math&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Следствие 1&#039;&#039;&#039;: Алгоритм CLOPE сходится при любых &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D&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;Доказательство следствия 1&#039;&#039;&#039;: Так как &amp;lt;math&amp;gt;DeltaAdd(C_l, t, r)&amp;lt;/math&amp;gt; = 0 (&amp;lt;math&amp;gt;C_l&amp;lt;/math&amp;gt; - кластер, к которому отнесена &amp;lt;math&amp;gt;t&amp;lt;/math&amp;gt;), любое перемещение транзакции увеличивает &amp;lt;math&amp;gt;Profit(C)&amp;lt;/math&amp;gt;, следовательно, алгоритм CLOPE сходится при любых &amp;lt;math&amp;gt;O&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;D&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;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=21852</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=21852"/>
		<updated>2017-01-31T18:00:54Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных транзакционных данных. Алгоритм основан на эвристическом методе повышения близости транзакций в кластерах при помощи оптимизации параметров кластерной гистограммы.  Авторы (Yiling Yang Xudong Guan Jinyuan You )&amp;lt;ref&amp;gt;Y. Yang, X. Guan J. You. CLOPE: A Fast and Effective Clustering Algorithm for Transactional Data. http://www.inf.ufrgs.br/~alvares/CMP259DCBD/clope.pdf&amp;lt;/ref&amp;gt; предложили эффективный, масштабируемый алгоритм, не требующий хранения обучающей выборки в оперативной памяти.    &lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; (количество уникальных объектов кластера), общее число объектов в кластере &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; и высоту &amp;lt;math&amp;gt;H(C_i) = \frac{S(C_i)}{W(C_i)^r}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания. Чем больше &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;, тем больше кластеров будет сгенерировано.   Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4, при r = 1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&lt;br /&gt;
&lt;br /&gt;
Лучшим признаётся разбиение, при котором достигается максимум функции &amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} H(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} {M} &amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, M - число транзакций в выборке.&lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=21851</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=21851"/>
		<updated>2017-01-31T17:59:08Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных транзакционных данных. Алгоритм основан на эвристическом методе повышения близости транзакций в кластерах при помощи оптимизации параметров кластерной гистограммы.  Авторы (Yiling Yang Xudong Guan Jinyuan You )&amp;lt;ref&amp;gt;Y. Yang, X. Guan J. You. CLOPE: A Fast and Effective Clustering Algorithm for Transactional Data. http://www.inf.ufrgs.br/~alvares/CMP259DCBD/clope.pdf&amp;lt;/ref&amp;gt; предложили эффективный, масштабируемый алгоритм, не требующий хранения обучающей выборки в оперативной памяти.    &lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; (количество уникальных объектов кластера), общее число объектов в кластере &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; и высоту &amp;lt;math&amp;gt;H(C_i) = \frac{S(C_i)}{W(C_i)^r}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания. Чем больше &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;, тем больше кластеров будет сгенерировано.   Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4, при r = 1.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&lt;br /&gt;
&lt;br /&gt;
Лучшим признаётся разбиение, при котором достигается максимум функции &amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} H(C_i) \times \mid C_i \mid} {M} &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;
Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, M - число транзакций в выборке.&lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=21850</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=21850"/>
		<updated>2017-01-31T17:55:39Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: /* Свойства и структура алгоритма CLOPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных транзакционных данных. Алгоритм основан на эвристическом методе повышения близости транзакций в кластерах при помощи оптимизации параметров кластерной гистограммы.  Авторы (Yiling Yang Xudong Guan Jinyuan You )&amp;lt;ref&amp;gt;Y. Yang, X. Guan J. You. CLOPE: A Fast and Effective Clustering Algorithm for Transactional Data. http://www.inf.ufrgs.br/~alvares/CMP259DCBD/clope.pdf&amp;lt;/ref&amp;gt; предложили эффективный, масштабируемый алгоритм, не требующий хранения обучающей выборки в оперативной памяти.    &lt;br /&gt;
&lt;br /&gt;
Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; (количество уникальных объектов кластера), общее число объектов в кластере &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; и высоту &amp;lt;math&amp;gt;H(C_i) = \frac{S(C_i)}{W(C_i)^r}&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания. Чем больше &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt;, тем больше кластеров будет сгенерировано.   Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4, при r = 1.&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&lt;br /&gt;
&lt;br /&gt;
Лучшим признаётся разбиение, при котором достигается максимум функции &amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} H(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;
Здесь &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;.&lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=21849</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=21849"/>
		<updated>2017-01-31T17:14:08Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: /* Свойства и структура алгоритма CLOPE */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных данных. Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE работает с транзакциями. Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы.Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину W (количество уникальных объектов кластера) и высоту H (отношение общего числа объектов и ширины). Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4.&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&lt;br /&gt;
&lt;br /&gt;
Лучшим признаётся разбиение, при котором достигается минимум функции &amp;lt;math&amp;gt; Profit(C)=\frac{\sum^{k}_{i=1} H(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;
Здесь &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; - коэффициент отталкивания, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; - количество кластеров, &amp;lt;math&amp;gt;S(C_i)&amp;lt;/math&amp;gt; - число объектов в кластере &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;\mid C_i \mid&amp;lt;/math&amp;gt; - число транзакций в кластере &amp;lt;math&amp;gt; C_i &amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;H(C_i)&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;W(c_i)&amp;lt;/math&amp;gt; - высота и ширина &amp;lt;math&amp;gt;C_i&amp;lt;/math&amp;gt; соответственно.&lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:CLOPEdefs.png&amp;diff=21638</id>
		<title>Файл:CLOPEdefs.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:CLOPEdefs.png&amp;diff=21638"/>
		<updated>2017-01-20T11:30:31Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ilya365365</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TransactionBaseD.png&amp;diff=21633</id>
		<title>Файл:TransactionBaseD.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:TransactionBaseD.png&amp;diff=21633"/>
		<updated>2017-01-20T10:34:35Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=21631</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=21631"/>
		<updated>2017-01-20T06:47:11Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных данных. Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE работает с транзакциями. Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы.Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину W (количество уникальных объектов кластера) и высоту H (отношение общего числа объектов и ширины). Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4.&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&lt;br /&gt;
&lt;br /&gt;
Лучшим признаётся разбиение, у которого сумма H/W, взвешенная с количеством транзакций в каждом кластере, минимальна.&lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</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:Ilya365365/%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&amp;diff=21630</id>
		<title>Участник:Ilya365365/Алгоритм кластеризации категориальных данных</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:Ilya365365/%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&amp;diff=21630"/>
		<updated>2017-01-20T06:34:17Z</updated>

		<summary type="html">&lt;p&gt;Ilya365365: Новая страница: «== Свойства и структура алгоритма CLOPE == === Общее описание алгоритма CLOPE === Алгоритм CLOPE реша…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Свойства и структура алгоритма CLOPE ==&lt;br /&gt;
=== Общее описание алгоритма CLOPE ===&lt;br /&gt;
Алгоритм CLOPE решает задачу кластеризации категориальных данных. Здесь и далее под категориальными данными понимаются качественные характеристики объектов, измеренные в шкале наименований, то есть при сравнении категориальных данных указывается только, одинаковы или нет объекты относительно данного признака. &lt;br /&gt;
&lt;br /&gt;
Алгоритм CLOPE работает с транзакциями. Под термином транзакция понимается произвольный набор объектов, например, список ключевых слов статьи, товары, купленные в супермаркете, множество симптомов пациента, характерные фрагменты изображения и так далее. Задача кластеризации транзакционных данных состоит в получении такого разбиения всего множества транзакций, чтобы похожие транзакции оказались в одном кластере, а отличающиеся друг от друга – в разных кластерах.&lt;br /&gt;
&lt;br /&gt;
В основе алгоритма кластеризации CLOPE лежит идея максимизации глобальной функции стоимости, которая повышает близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы.Для примера рассмотрим выборку из пяти списков покупок: {(apple, banana), (apple, banana, cake), (apple, cake, dish), (dish, egg), (dish, egg, fish)}, или сокращённо {ab, abc, acd, de, def}. Каждый список - транзакция. Каждый купленный предмет является объектом. Представим себе, что мы хотим сравнить между собой следующие два разбиения на кластеры:&lt;br /&gt;
&lt;br /&gt;
1: {{ab, abc, acd}, {de, def}} &lt;br /&gt;
&lt;br /&gt;
2: {{ab, abc}, {acd, de, def}}.&lt;br /&gt;
&lt;br /&gt;
Для первого и второго вариантов разбиения в каждом кластере рассчитаем количество вхождений в него каждого элемента транзакции, а затем вычислим ширину W (количество уникальных объектов кластера) и высоту H (отношение общего числа объектов и ширины). Например, кластер {ab, abc, acd} имеет вхождения a:3, b:2, c:2, d:1 с H=2 и W=4.&lt;br /&gt;
[[Файл:Clope split.png|border|Гистограммы разбиений]]&lt;br /&gt;
&lt;br /&gt;
Лучшим признаётся разбиение, у которого &lt;br /&gt;
=== Математическое описание алгоритма CLOPE ===&lt;br /&gt;
=== Вычислительное ядро ===&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
=== Ресурс параллелизма ===&lt;br /&gt;
=== Входные и выходные данные ===&lt;/div&gt;</summary>
		<author><name>Ilya365365</name></author>
	</entry>
</feed>