Участник:Бротиковская Данута/Алгоритм k-means
Алгоритм k средних (k means) | |
Последовательный алгоритм | |
Последовательная сложность | O(n^3) |
Объём входных данных | \frac{n (n + 1)}{2} |
Объём выходных данных | \frac{n (n + 1)}{2} |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | O(n) |
Ширина ярусно-параллельной формы | O(n^2) |
Авторы страницы Данута Бротиковская и Денис Зобнин
Содержание
- 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 Общее описание алгоритма
Алгоритм k средних (k means) -- наиболее популярный метод кластеризации. Был изобретен в 1950-х годах математиком Гуго Штейнгаузом и почти одновременно Стюартом Ллойдом. Особую популярность приобрел после публикации работы МакКуина в 1967. Цель алгоритма заключается в разделении N наблюдений на K кластеров таким образом, чтобы каждое наблюдение придележало ровно одному кластеру, расположенному на наименьшем расстоянии от наблюдения.
1.2 Математическое описание алгоритма
Дан набор из n d-мерных векторов X = \{x_1, x_2, ..., x_n\}. Алгоритм k средних разбивает набор X на k, k\lt =n наборов S=\{S_1, S_2, ..., S_k\}, S_i \cap S_j= \varnothing, i \ne j, таким образом, чтобы минимизировать сумму квадратов расстояний от каждой точки кластера до его центра. Другими словами:
Шаги алгоритма:
1. Начальный шаг. Инициализация кластеров: Выбирается произвольное множество точек \mu_i, i=\overline{1,k}, рассматриваемых как начальные центры кластеров
2. Распределение векторов по кластерам: \forall \mathbf{x_i} \in \mathbf{X}, i=\overline{1,N}: \mathbf{x_i} \in S_j \iff j=\arg\min_{k}||x_i-\mu_k||^2
3. Пересчет центров кластеров: \forall i=\overline{1,k}: \widetilde{\mu_i} = \cfrac{1}{||S_i||}\sum_{x\in S_i}x
4. Проверка условия останова: if \exist i\in \overline{i=1,k}: \mu_i != \widetilde{\mu_i} =\gt goto 2; else FINISH
1.3 Вычислительное ядро алгоритма
Вычислительным ядром алгоритма являются шаги 2 и 3 приведенного выше алгоритма: распределение векторов по кластерам и пересчет центров кластеров.
Распределение векторов по кластерам предполагает вычисление расстояний между каждым вектором x_i \in X, i= \overline{1,N}, и центрами кластера \mu_j, j= \overline{1,k}. Таким образом, данный шаг предполагает kN вычислений расстояний между d-мерными векторами.
Пересчет центров кластеров предполагает k вычислений центров масс \mu_i множеств S_i, i=\overline{1, k}, представленных выражением в шаге 3 представленного выше алгоритма.