Участник:Бротиковская Данута/Алгоритм k-means: различия между версиями
Строка 23: | Строка 23: | ||
<b><u>Шаги алгоритма: </u></b> | <b><u>Шаги алгоритма: </u></b> | ||
− | + | <ol> | |
− | <b> | + | <li> |
− | + | <b>Начальный шаг. Инициализация кластеров</b> | |
− | <b> | + | <p>Выбирается произвольное множество точек <math>\mu_i, i=\overline{1,k}</math>, рассматриваемых как начальные центры кластеров</p> |
− | + | </li> | |
− | <b> | + | <li> |
− | + | <b>Распределение векторов по кластерам</b> | |
− | <b> | + | <p><math>\forall \mathbf{x}_i \in X, i=\overline{1,n}: \mathbf{x}_i \in S_j \iff j=\arg\min_{k}||\mathbf{x}_i-\mathbf{\mu}_k||^2</math></p> |
− | <math>if \exist i\in \overline{i=1,k}: \mu_i \ne \widetilde{\mu_i} => goto 2; else FINISH</math> | + | </li> |
+ | <li> | ||
+ | <b>Пересчет центров кластеров</b> | ||
+ | <p><math> \forall i=\overline{1,k}: \widetilde{\mu_i} = \cfrac{1}{||S_i||}\sum_{x\in S_i}x</math></p> | ||
+ | </li> | ||
+ | <li> | ||
+ | <b>Проверка условия останова:</b> | ||
+ | <p><math>if \exist i\in \overline{i=1,k}: \mu_i \ne \widetilde{\mu_i} => goto 2; else FINISH</math></p> | ||
+ | </li> | ||
+ | </ol> | ||
=== Вычислительное ядро алгоритма === | === Вычислительное ядро алгоритма === |
Версия 17:24, 9 октября 2016
Алгоритм k средних (k means) | |
Последовательный алгоритм | |
Последовательная сложность | [math]O(n^3)[/math] |
Объём входных данных | [math]\frac{n (n + 1)}{2}[/math] |
Объём выходных данных | [math]\frac{n (n + 1)}{2}[/math] |
Параллельный алгоритм | |
Высота ярусно-параллельной формы | [math]O(n)[/math] |
Ширина ярусно-параллельной формы | [math]O(n^2)[/math] |
Авторы страницы Данута Бротиковская и Денис Зобнин
Содержание
- 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 Математическое описание алгоритма
Дан набор из [math]n[/math] d-мерных векторов [math]X[/math] = [math]\{\mathbf{x}_1, \mathbf{x}_2, ..., \mathbf{x}_n\}[/math]. Алгоритм k средних разбивает набор [math]X[/math] на [math]k, k\lt =n[/math] наборов [math]S=\{S_1, S_2, ..., S_k\}, S_i \cap S_j= \varnothing, i \ne j, [/math] таким образом, чтобы минимизировать сумму квадратов расстояний от каждой точки кластера до его центра. Другими словами:
[math]\arg\min_{S} \sum\limits_{i=1}^k \sum\limits_{x \in S_i} \lVert \mathbf{x}- \mathbf{\mu}_i \rVert^2[/math],
где [math]\mathbf{\mu}_i[/math]- центры кластеров, [math]i=\overline{1,k}[/math]
Шаги алгоритма:
-
Начальный шаг. Инициализация кластеров
Выбирается произвольное множество точек [math]\mu_i, i=\overline{1,k}[/math], рассматриваемых как начальные центры кластеров
-
Распределение векторов по кластерам
[math]\forall \mathbf{x}_i \in X, i=\overline{1,n}: \mathbf{x}_i \in S_j \iff j=\arg\min_{k}||\mathbf{x}_i-\mathbf{\mu}_k||^2[/math]
-
Пересчет центров кластеров
[math] \forall i=\overline{1,k}: \widetilde{\mu_i} = \cfrac{1}{||S_i||}\sum_{x\in S_i}x[/math]
-
Проверка условия останова:
[math]if \exist i\in \overline{i=1,k}: \mu_i \ne \widetilde{\mu_i} =\gt goto 2; else FINISH[/math]
1.3 Вычислительное ядро алгоритма
Вычислительным ядром алгоритма являются шаги 2 и 3 приведенного выше алгоритма: распределение векторов по кластерам и пересчет центров кластеров.
Распределение векторов по кластерам предполагает вычисление расстояний между каждым вектором [math]x_i \in X, i= \overline{1,N},[/math] и центрами кластера [math]\mu_j, j= \overline{1,k}[/math]. Таким образом, данный шаг предполагает kN вычислений расстояний между d-мерными векторами.
Пересчет центров кластеров предполагает k вычислений центров масс [math]\mu_i[/math] множеств [math]S_i, i=\overline{1, k}[/math], представленных выражением в шаге 3 представленного выше алгоритма.