Участник:Илья Егоров/Алгоритм k-средних
| Алгоритм k-средних (k-means) | |
| Последовательный алгоритм | |
| Последовательная сложность | [math]\displaystyle{ O() }[/math] |
| Объём входных данных | [math]\displaystyle{ \frac{()}{} }[/math] |
| Объём выходных данных | [math]\displaystyle{ \frac{ ()}{} }[/math] |
Страница создана группой "Илья Егоров — Евгений Богомазов"
ЧАСТЬ. Свойства и структура алгоритмов
Общее описание алгоритма
Алгоритм кластеризации k-средних впервые был предложен в 1950-х годах математиками Гуго Штейнгаузом и Стюартом Ллойдом независимо друг от друга. Наибольшую популярность он получил после работы Маккуина.
Алгоритм позволяет при заданном числе [math]\displaystyle{ k }[/math] построить [math]\displaystyle{ k }[/math] кластеров, расположенных на максимальном расстоянии друг от друга. Таким образом, наибольшей точности результат выполнения алгоритма достигает при полной осведомленности Пользователя о характере кластеризуемых объектов и, как следствие, при обладании максимально корректной информацией о числе кластеров.
В общем случае выбор числа [math]\displaystyle{ k }[/math] может базироваться на любых значимых факторах, в том числе на результатах предшествующих исследований, теоретических соображениях или интуиции.
Математическое описание алгоритма
Исходные данные:
- Совокупность n d-мерных векторов [math]\displaystyle{ X = \{x_1 \dots x_n\} , }[/math] где [math]\displaystyle{ x_i = \{x_{i1} \dots x_{id}\} }[/math]
- Предполагаемое количество кластеров k
Выходные данные:
- Разбиение X на множество [math]\displaystyle{ S = \{S_1 \dots S_k \}, \bigcup S_i = X, S_i \cap S_j = \emptyset, i \neq j }[/math]
- k центров кластеров [math]\displaystyle{ \Mu = \{\mu_1 \dots \mu_k \} }[/math], где [math]\displaystyle{ \mu_i = \{\mu_{i1} \dots \mu_{id} \} }[/math] такие, что
[math]\displaystyle{ \begin{cases}\mu_i = argmin_y \sum_{x \in S_i} ||x-y||^2_E \\ \mu_i = argmin_\Mu \sum_{i \in k} \sum_{x \in S_i} ||x-\mu_i||^2_E \end{cases} }[/math]
Алгоритм:
1) [math]\displaystyle{ \mu_{ij} = random }[/math]
2) [math]\displaystyle{ S_i = \{x| argmin_j ||x-\mu_j|| = i\} i = 1 \dots k }[/math]
3) [math]\displaystyle{ \tilde{\mu_{i}} = E_{x \in S_i}(x) }[/math]
4) Если для [math]\displaystyle{ \forall i: \mu_i = \tilde{\mu_i} }[/math] то алгоритм завершен, иначе [math]\displaystyle{ \mu_i = \tilde{\mu_i} }[/math] и перейти на пункт 2)
Вычислительное ядро алгоритма
Вычислительным ядром алгоритма является второй этап, а точнее нахождение матрицы расстояний между [math]\displaystyle{ X }[/math] и [math]\displaystyle{ \Mu }[/math]. Для d-мерного вектора [math]\displaystyle{ a: }[/math]
[math]\displaystyle{ ||a||=\sqrt{\sum_{i=1\dots d} a_i^2} }[/math], поэтому заполнение одной ячейки такой матрицы потребует [math]\displaystyle{ d }[/math] операций умножения, [math]\displaystyle{ d-1 }[/math] операций сложения и одну операция вычисления квадратного корня. Но так как эти расстояния используются только для сравнения, а sqrt является монотонно возрастающей функцией, то ее можно не вычислять. Поэтому нахождения матрицы расстояний потребует всего [math]\displaystyle{ n*k*d }[/math] операций умножений и [math]\displaystyle{ n*k*(d-1) }[/math] операций сложений.
Макроструктура алгоритма
Алгоритм k-средних базируется на алгоритме вычисления расстояния между векторами, расстояние на каждом шаге высчитывается [math]\displaystyle{ k\cdot n }[/math] раз.
Помимо этого, в конце каждого шага вычисляется центр масс объектов кластера, для всех объектов потребуется [math]\displaystyle{ n-1 }[/math] суммирование и [math]\displaystyle{ k }[/math] делений.
Схема реализации последовательного алгоритма
Последовательность шагов алгоритма следующая:
1. Шаг инициализации
По какому-либо правилу выбираем [math]\displaystyle{ k }[/math] объектов для кластеризации, объявляем их центроидами
2. Шаг классификации
Классифицируем каждый объект на предмет принадлежности к кластеру:
[math]\displaystyle{ a_i \in P \Leftrightarrow \left|a_i - s_P\right| \rightarrow \min_P }[/math]
3. Шаг перерасчета центроидов
Вычисляем центр масс каждого из кластеров.
3.а Если для какого-либо кластера его центр масс отличается от центроида, то
* переносим центроид этого кластера во вновь образованный центр масс,
* проделываем эту операцию для всех других кластеров
* переходим к Шагу 2
3.б Если для каждого кластера его центр масс совпадает с центроидом, то
Выход из алгоритма, объекты классифицированы.
Альтернатива
Последовательность шагов алгоритма следующая:
1) Инициализация центроидов [math]\displaystyle{ \Mu }[/math], [math]\displaystyle{ iter = 1 }[/math], задание максимального количество итераций [math]\displaystyle{ maxiter }[/math] 2a) Нахождение матрицы расстояний [math]\displaystyle{ dist: dist_{ij} = \sum_{l = 1\dots d} (x_{il}-\mu_{il})^2 }[/math] 2b) Нахождение вектора распределения объектов по кластерам [math]\displaystyle{ index: index_{i} = argmin_{j} dist_{ij} }[/math] 3) Пересчет центроидов [math]\displaystyle{ \tilde{\Mu}: \tilde{\mu_{ij}} = \sum_{l \in T_i} x_{lj}/|T_i| }[/math], где [math]\displaystyle{ T_i = \{l| l \in 1\dots n, index_l = i\} }[/math] 4) Проверка критерия останова: если [math]\displaystyle{ \exists i: \tilde{\mu_i} \neq \mu_i }[/math] и [math]\displaystyle{ iter \lt maxiter }[/math], то [math]\displaystyle{ inc(iter), \Mu=\tilde{\Mu} }[/math], goto 2a
Альтернатива альтернативы
1. Инициализация центроидов
[math]\displaystyle{ \Mu }[/math], [math]\displaystyle{ iter = 1 }[/math], задание максимального количество итераций [math]\displaystyle{ maxiter }[/math]
2.а. Нахождение матрицы расстояний
[math]\displaystyle{ dist: dist_{ij} = \sum_{l = 1\dots d} (x_{il}-\mu_{il})^2 }[/math]
2.б. Нахождение вектора распределения объектов по кластерам
[math]\displaystyle{ index: index_{i} = \underset{j}{argmin } dist_{ij} }[/math]
3. Пересчет центроидов
[math]\displaystyle{ \tilde{\Mu}: \tilde{\mu_{ij}} = \sum_{l \in T_i} x_{lj}/|T_i| }[/math], где [math]\displaystyle{ T_i = \{l| l \in 1\dots n, index_l = i\} }[/math]
4. Проверка критерия останова:
Если [math]\displaystyle{ \exists i: \tilde{\mu_i} \neq \mu_i }[/math], [math]\displaystyle{ iter \lt maxiter }[/math],
то [math]\displaystyle{ inc(iter), \Mu=\tilde{\Mu}, }[/math] GOTO 2.а.
Последовательная сложность алгоритма
1) Сложность инициализации в общем случае зависит от применяемого метода генерации/получения случайных чисел, но ей можно пренебречь 2a) Вычисление матрицы расстояний требует [math]\displaystyle{ n*k*d }[/math] операций умножений и [math]\displaystyle{ n*k*(d-1) }[/math] операций сложений 2b) Нахождение вектора распределения требует [math]\displaystyle{ n*(k-1) }[/math] операций сравнений 3) Для вычисления [math]\displaystyle{ \tilde{\Mu} }[/math] требуется [math]\displaystyle{ (n - k + 1) * d }[/math] операций сложений и [math]\displaystyle{ k * d }[/math] операций деления 4) Для критерия останова требуется [math]\displaystyle{ n*d }[/math] сравнений
Итого: так как максимальное количество итераций задается в алгоритме заранее и не зависит от входных данных, то количество итераций ограничено константой. Тогда сложность алгоритма:
- [math]\displaystyle{ O(n*k*d) }[/math] операций сложений/вычитаний
- [math]\displaystyle{ O(n*k*d) }[/math] операций умножений, [math]\displaystyle{ O(k*d) }[/math] операций делений
Информационный граф
Ресурс параллелизма алгоритма
Входные и выходные данные алгоритма
Входные данные: Количество кластеров k, n кластеризуемых элементов
Дополнительные ограничения:
- k — положительное число, т. е. k > 0.
- Для кластеризуемых элементов определена метрика (расстояние между объектами)
Объём входных данных: n [math]\displaystyle{ \cdot }[/math] d + 1 (кластеризуемые объекты в виде векторов и число k)
Выходные данные: Массив, в который записаны принадлежности каждого элемента кластеру (допустим вывод в другой эквивалентной более удобной структуре).
Объём выходных данных: Размер массива равен 2 [math]\displaystyle{ \cdot }[/math] n.
Свойства алгоритма
Вычислительная мощность алгоритма на каждом шаге равна [math]\displaystyle{ k\cdot n }[/math] (расстояние между элементом и центроидом [math]\displaystyle{ k\cdot n }[/math] раз)
ЧАСТЬ. Программная реализация алгоритма
Масштабируемость алгоритма и его реализации
Существующие реализации алгоритма
Литература
[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf