Участник:Светлана Лукьяненко/Строгий алгоритм С средних (Hard C-Means, HCM): различия между версиями
(создана страница) |
|||
Строка 10: | Строка 10: | ||
=== Математическое описание алгоритма === | === Математическое описание алгоритма === | ||
+ | Алгоритм описывается при помощи 5 шагов. | ||
+ | |||
+ | '''<u>Шаг 1</u>''' | ||
+ | |||
+ | '''Инициализация кластерных центров''' <math>c_i \, (i=1,2,\ldots,c)</math> может происходить за счёт случайного выбора необходимого числа точек из входного набора либо путём явного указания. | ||
+ | |||
+ | '''<u>Шаг 2</u>''' | ||
+ | |||
+ | '''Вычисление рядовой матрицы''' <math>M = \|m_{ik}\|</math>, элементы которой задаются следующими выражениями (подразумевается, что <math>K</math> — количество элементов во входном наборе данных): | ||
+ | :<math> | ||
+ | m_{ik} = \left\{ \begin{align} | ||
+ | 1, & \; \|u_k-c_i\|^2 \leqslant \|u_k-c_j\|^2 \;\; \forall i \neq j; \;\; (i=1,2,\ldots,c, \; k = 1,2,\ldots,K)\\ | ||
+ | 0, & \; \text{otherwise}. | ||
+ | \end{align} \right. | ||
+ | </math> | ||
+ | При этом, как легко видеть, матрица <math>M</math> обладает следующими свойствами: | ||
+ | :<math> | ||
+ | \sum\limits_{i=1}^c m_{ij} = 1, \;\; \sum\limits_{j=1}^K m_{ij} = K. | ||
+ | </math> | ||
+ | |||
+ | '''<u>Шаг 3</u>''' | ||
+ | |||
+ | '''Расчёт объектной функции''': | ||
+ | :<math> | ||
+ | J = \sum\limits_{i=1}^c J_i = \sum\limits_{i=1}^c \left( \sum\limits_{k:\, u_k \in C_i} \|u_k -c_i \|^2 \right) | ||
+ | .</math> | ||
+ | |||
+ | На этом шаге происходит остановка и выход из цикла, если полученное значение ниже пороговой величины или полученное значение не сильно отличается от значений, полученных на предыдущих циклах. | ||
+ | |||
+ | '''<u>Шаг 4</u>''' | ||
+ | |||
+ | '''Пересчёт кластерных центров''' выполняется в соответствии со следующим уравнением: | ||
+ | :<math> | ||
+ | c_i = \frac{1}{|C_i|} \cdot \sum\limits_{k:\, u_k \in C_i} u_k, | ||
+ | </math> | ||
+ | где под <math>|C_i|</math> подразумевается количество элементов в <math>i-</math>ом кластере. | ||
+ | |||
+ | '''<u>Шаг 5</u>''' | ||
+ | |||
+ | '''Переход по циклу''' на шаг 2. | ||
+ | |||
=== Вычислительное ядро алгоритма === | === Вычислительное ядро алгоритма === | ||
=== Макроструктура алгоритма === | === Макроструктура алгоритма === |
Версия 12:09, 28 сентября 2016
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Назначение: кластеризация больших наборов числовых данных.
Достоинства: легкость реализации, вычислительная простота.
Недостатки: задание количества кластеров, отсутствие гарантии в нахождении оптимального решения.
1.2 Математическое описание алгоритма
Алгоритм описывается при помощи 5 шагов.
Шаг 1
Инициализация кластерных центров [math]c_i \, (i=1,2,\ldots,c)[/math] может происходить за счёт случайного выбора необходимого числа точек из входного набора либо путём явного указания.
Шаг 2
Вычисление рядовой матрицы [math]M = \|m_{ik}\|[/math], элементы которой задаются следующими выражениями (подразумевается, что [math]K[/math] — количество элементов во входном наборе данных):
- [math] m_{ik} = \left\{ \begin{align} 1, & \; \|u_k-c_i\|^2 \leqslant \|u_k-c_j\|^2 \;\; \forall i \neq j; \;\; (i=1,2,\ldots,c, \; k = 1,2,\ldots,K)\\ 0, & \; \text{otherwise}. \end{align} \right. [/math]
При этом, как легко видеть, матрица [math]M[/math] обладает следующими свойствами:
- [math] \sum\limits_{i=1}^c m_{ij} = 1, \;\; \sum\limits_{j=1}^K m_{ij} = K. [/math]
Шаг 3
Расчёт объектной функции:
- [math] J = \sum\limits_{i=1}^c J_i = \sum\limits_{i=1}^c \left( \sum\limits_{k:\, u_k \in C_i} \|u_k -c_i \|^2 \right) .[/math]
На этом шаге происходит остановка и выход из цикла, если полученное значение ниже пороговой величины или полученное значение не сильно отличается от значений, полученных на предыдущих циклах.
Шаг 4
Пересчёт кластерных центров выполняется в соответствии со следующим уравнением:
- [math] c_i = \frac{1}{|C_i|} \cdot \sum\limits_{k:\, u_k \in C_i} u_k, [/math]
где под [math]|C_i|[/math] подразумевается количество элементов в [math]i-[/math]ом кластере.
Шаг 5
Переход по циклу на шаг 2.