Участник:Каледа Александр/Строгий алгоритм С средних (Hard C-Means)
Строгий алгоритм С средних (Hard C-Means) | |
Последовательный алгоритм | |
Последовательная сложность | [math]O(n)[/math] |
Объём входных данных | [math]nm+1[/math] |
Объём выходных данных | [math]n+Cm[/math] |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | [math]O(1)[/math] |
Ширина ярусно-параллельной формы | [math]O(n)[/math] |
Авторы описания: Каледа Александр, Шапулин Андрей.
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Строгий алгоритм C средних (Hard C-Means; Jang, Sun and Mizutani, 1997) один из наиболее широко используемых алгоритмов кластеризации данных[1]. Алгоритм разбивает большие наборы векторов в многомерном пространстве по заранее заданному количеству кластеров (т.е. является управляемым).
На вход алгоритму подается набор векторов и количество кластеров. Дополнительно может задаваться пороговая величина объектной функции, при достижении которой алгоритм останавливается. После окончания работы алгоритма каждый вектор будет отнесет к определенному кластерному центру. Алгоритм, являясь итерационным, зависит от начальных значений кластерных центров, а следовательно может не сходиться к локальному минимуму.
На первом шаге алгоритма происходит инициализация кластерным центров, это можно сделать выбрав случайным образом вектора из входного набора. На следующем шаге начинается итерационный процесс, завершающийся при достижении порогового значения объектной функцией или при минимальном отличии, от значения на предыдущей итерации.
Вычисления, выполняющиеся на очередной итерации алгоритма:
- Расчёт рядовой матрицы (сопоставление вектора соответствующему кластерному центру).
- Расчёт объектной функции.
- Пересчёт кластерных центров.
1.2 Математическое описание алгоритма
1.2.1 Входные и выходные данные
1.2.2 Описание алгоритма
1.3 Вычислительное ядро алгоритма
1.4 Макроструктура алгоритма
1.5 Схема реализации последовательного алгоритма
Итерационный блок алгоритма можно описать на языке Python следующим образом:
for i in range(n):
idx_min = 0
dist_min = ((u[i] - c[0]) ** 2).sum()
for j in range(1, C):
dist = ((u[i] - c[j]) ** 2).sum()
if dist < dist_min:
idx_min = j
dist_min = dist
M[i, idx_min] = 1
c_next[idx_min] += u[i]
c_next_cnt[idx_min] += 1
J += dist_min
1.6 Последовательная сложность алгоритма
Предполагаем, что предельная точность алгоритма достигаема менее, чем за [math]n[/math] итераций. Иначе использование алгоритма можно считать нерациональным. Также предположим, что размерность [math]m[/math] и количество кластерных центров [math]C[/math] существенно меньше [math]n[/math].
Операция вычисления квадрата нормы разности векторов требует выполнения [math]m-1[/math] арифметических операций сложения, [math]m[/math] операций вычитания и [math]m[/math] операций умножения.
Каждая итерация алгоритма требует выполнения:
- [math]nC[/math] операций вычисления квадрата нормы разности векторов;
- [math]nC[/math] операций сравнения квадрата нормы;
- [math]3n[/math] операций сложения;
Таким образом, на каждой итерации имеем:
- [math]mnC[/math] операций умножения;
- [math](2mC + 3)n[/math] арифметических операций сложения и вычитания;
В итоге имеем сложность последовательной реализации алгоритма [math]O(n)[/math].
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
1.9 Свойства алгоритма
2 Программная реализация алгоритма
2.1 Особенности реализации последовательного алгоритма
2.2 Локальность данных и вычислений
2.2.1 Локальность реализации алгоритма
2.2.1.1 Структура обращений в память и качественная оценка локальности
2.2.1.2 Количественная оценка локальности
2.3 Возможные способы и особенности параллельной реализации алгоритма
2.4 Масштабируемость алгоритма и его реализации
2.4.1 Масштабируемость алгоритма
2.4.2 Масштабируемость реализации алгоритма
2.5 Динамические характеристики и эффективность реализации алгоритма
2.6 Выводы для классов архитектур
2.7 Существующие реализации алгоритма
3 Литература
- ↑ Jan Jantzen «Neurofuzzy Modelling». Электронное издание.