Участник:Антонина Егорова/Алгоритм кластеризации категориальных данных CLOPE: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
{{algorithm
| name              = Алгоритм CLOPE
| serial_complexity = <math>O(N*k*A)</math>
| pf_height        = <math>O(N*A)</math>
| pf_width          = <math>O(N*k*A)</math>
| input_data        = <math>N*A + 1</math>
| output_data      = <math>N</math>
}}
== Свойства и структура алгоритма ==
== Свойства и структура алгоритма ==


=== Общее описание алгоритма ===
=== Общее описание алгоритма ===
Алгоритм CLOPE (Clustering with sLOPE) предназначен для кластеризации огромных наборов категориальных данных. В основе данного алгоритма лежит идея максимизации глобальной функции стоимости, повышающей близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Во время работы этого алгоритма в оперативной памяти хранится только текущая транзакция и немного информации по каждому кластеру.


=== Математическое описание алгоритма ===
=== Математическое описание алгоритма ===
Пусть имеется база транзакций <math>D</math>, которая состоит из множества транзакций <math>\{t_1,t_2,...,t_n\}</math>. При этом каждая транзакция - набор объектов <math>\{i_1,...,i_m\} </math>.
Множество кластеров <math>\{C_1,...,C_k\} </math> - это разбиение множества транзакций <math>\{t_1,...t_n\} </math>, при котором 
<ol>
<li><math>C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\}</math> </li>
<li><math>C_i</math> <math>\ne</math> <math>\empty</math> <math>\land</math> <math>C_i</math> <math>\cap</math> <math>C_j= \empty</math>, для <math>1</math> <math>\le</math> <math>i</math>, <math> j</math> <math> \le</math> <math> k</math>.</li>
</ol>
Для каждого кластера <math>C</math> определяются следующие характеристики :
: <math>D(C)</math> — множество уникальных объектов в данном кластере <math> C</math>,
: <math>Occ(i,C) </math> — количество вхождений объекта <math> i</math> в кластер <math> C</math> ,
: <math>S(C) = \sum_{i \in D(C)} Occ(i,C) = \sum _{t_i \in C} \mid t_i \mid </math>; — количество всех объектов в кластере <math> C</math>,
: <math>W(C) </math> &nbsp;=&nbsp; <math> \mid</math> <math>D(C)</math> <math>\mid</math> — ширина кластера,
: <math>H(C)</math> &nbsp;=&nbsp; <math> \frac{S(C)}{W(C)}</math> — высота кластера.
Функция стоимости:
<math> Profit(C)  = \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 }  </math>,
где <math>\mid C_i \mid</math>  - количество объектов в <math>i</math>-ом кластере, <math>k</math> – общее количество кластеров.
Коэффициент отталкивания <math>r</math> регулирует уровень похожести среди транзакций одного кластера. Чем больше <math>r</math>, тем ниже уровень сходства и тем больше кластеров будет сгенерировано.
Таким образом задача кластеризации алгоритмом CLOPE состоит в том, чтобы для заданных множества <math>D</math> и коэффициента отталкивания <math>r</math> найти такое разбиение <math>C</math>, для которого значение функции цены максимально.
Постановка задачи кластеризации алгоритмом CLOPE выглядит следующим образом:
для заданных <math>D</math> и <math>r</math> найти разбиение <math>C</math> такое, что:
<math>Profit(C) \longrightarrow max </math>.


=== Вычислительное ядро алгоритма ===
=== Вычислительное ядро алгоритма ===
Вычислительное ядро алгоритма заключается в том, чтобы вычислять цену добавления и цену удаления транзакции из кластера на каждом шаге. Для этого необходимо найти результат следующих операций:
*<math>S_{new}(C_i)=S(C_i) \pm \mid(t_n)\mid </math>,
*<math>W_{new}(C_i)=\mid D(C_i \cup t_n)|</math>
*вычисление стоимости <math>\frac{S_{new}(C_i)(\mid C_i \mid \pm 1)}{W_{new}(C_i)^r} - \frac{S(C_i) \mid C_i \mid }{W(C_i)^r}</math>


=== Макроструктура алгоритма ===
=== Макроструктура алгоритма ===
Алгоритм состоит из двух этапов - инициализации и итерации. На первом этапе создается исходное разбиение - считываются все транзакции, которые помещаются в определенные кластеры, определяющиеся максимизацией функции стоимости. Второй этап может повторяться несколько раз до тех пор, пока перемещение транзакции в другой кластер не увеличивает функцию стоимости.


=== Схема реализации последовательного алгоритма ===
=== Схема реализации последовательного алгоритма ===


==== Описание реализации алгоритма на псевдокоде ====
==== Описание реализации алгоритма на псевдокоде ====

Версия от 18:55, 4 февраля 2017

Свойства и структура алгоритма

Общее описание алгоритма

Алгоритм CLOPE (Clustering with sLOPE) предназначен для кластеризации огромных наборов категориальных данных. В основе данного алгоритма лежит идея максимизации глобальной функции стоимости, повышающей близость транзакций в кластерах при помощи увеличения параметра кластерной гистограммы. Во время работы этого алгоритма в оперативной памяти хранится только текущая транзакция и немного информации по каждому кластеру.

Математическое описание алгоритма

Пусть имеется база транзакций [math]\displaystyle{ D }[/math], которая состоит из множества транзакций [math]\displaystyle{ \{t_1,t_2,...,t_n\} }[/math]. При этом каждая транзакция - набор объектов [math]\displaystyle{ \{i_1,...,i_m\} }[/math].

Множество кластеров [math]\displaystyle{ \{C_1,...,C_k\} }[/math] - это разбиение множества транзакций [math]\displaystyle{ \{t_1,...t_n\} }[/math], при котором

  1. [math]\displaystyle{ C_1 \cup \ldots \cup C_k = \{t_1,...,t_n\} }[/math]
  2. [math]\displaystyle{ C_i }[/math] [math]\displaystyle{ \ne }[/math] [math]\displaystyle{ \empty }[/math] [math]\displaystyle{ \land }[/math] [math]\displaystyle{ C_i }[/math] [math]\displaystyle{ \cap }[/math] [math]\displaystyle{ C_j= \empty }[/math], для [math]\displaystyle{ 1 }[/math] [math]\displaystyle{ \le }[/math] [math]\displaystyle{ i }[/math], [math]\displaystyle{ j }[/math] [math]\displaystyle{ \le }[/math] [math]\displaystyle{ k }[/math].

Для каждого кластера [math]\displaystyle{ C }[/math] определяются следующие характеристики :

[math]\displaystyle{ D(C) }[/math] — множество уникальных объектов в данном кластере [math]\displaystyle{ C }[/math],
[math]\displaystyle{ Occ(i,C) }[/math] — количество вхождений объекта [math]\displaystyle{ i }[/math] в кластер [math]\displaystyle{ C }[/math] ,
[math]\displaystyle{ S(C) = \sum_{i \in D(C)} Occ(i,C) = \sum _{t_i \in C} \mid t_i \mid }[/math]; — количество всех объектов в кластере [math]\displaystyle{ C }[/math],
[math]\displaystyle{ W(C) }[/math]  =  [math]\displaystyle{ \mid }[/math] [math]\displaystyle{ D(C) }[/math] [math]\displaystyle{ \mid }[/math] — ширина кластера,
[math]\displaystyle{ H(C) }[/math]  =  [math]\displaystyle{ \frac{S(C)}{W(C)} }[/math] — высота кластера.

Функция стоимости:

[math]\displaystyle{ Profit(C) = \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 } }[/math],

где [math]\displaystyle{ \mid C_i \mid }[/math] - количество объектов в [math]\displaystyle{ i }[/math]-ом кластере, [math]\displaystyle{ k }[/math] – общее количество кластеров. Коэффициент отталкивания [math]\displaystyle{ r }[/math] регулирует уровень похожести среди транзакций одного кластера. Чем больше [math]\displaystyle{ r }[/math], тем ниже уровень сходства и тем больше кластеров будет сгенерировано.

Таким образом задача кластеризации алгоритмом CLOPE состоит в том, чтобы для заданных множества [math]\displaystyle{ D }[/math] и коэффициента отталкивания [math]\displaystyle{ r }[/math] найти такое разбиение [math]\displaystyle{ C }[/math], для которого значение функции цены максимально.


Постановка задачи кластеризации алгоритмом CLOPE выглядит следующим образом:

для заданных [math]\displaystyle{ D }[/math] и [math]\displaystyle{ r }[/math] найти разбиение [math]\displaystyle{ C }[/math] такое, что: [math]\displaystyle{ Profit(C) \longrightarrow max }[/math].

Вычислительное ядро алгоритма

Вычислительное ядро алгоритма заключается в том, чтобы вычислять цену добавления и цену удаления транзакции из кластера на каждом шаге. Для этого необходимо найти результат следующих операций:

  • [math]\displaystyle{ S_{new}(C_i)=S(C_i) \pm \mid(t_n)\mid }[/math],
  • [math]\displaystyle{ W_{new}(C_i)=\mid D(C_i \cup t_n)| }[/math]
  • вычисление стоимости [math]\displaystyle{ \frac{S_{new}(C_i)(\mid C_i \mid \pm 1)}{W_{new}(C_i)^r} - \frac{S(C_i) \mid C_i \mid }{W(C_i)^r} }[/math]

Макроструктура алгоритма

Алгоритм состоит из двух этапов - инициализации и итерации. На первом этапе создается исходное разбиение - считываются все транзакции, которые помещаются в определенные кластеры, определяющиеся максимизацией функции стоимости. Второй этап может повторяться несколько раз до тех пор, пока перемещение транзакции в другой кластер не увеличивает функцию стоимости.

Схема реализации последовательного алгоритма

Описание реализации алгоритма на псевдокоде

Последовательная сложность алгоритма

Информационный граф

Ресурс параллелизма алгоритма

Входные и выходные данные алгоритма

Свойства алгоритма

Программная реализация алгоритма

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Возможные способы и особенности параллельной реализации алгоритма

Масштабируемость алгоритма и его реализации

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

Существующие реализации алгоритма

Литература

<references \>