Уровень алгоритма

Участник:Илья Егоров/Алгоритм k-средних: различия между версиями

Материал из Алговики
Перейти к навигации Перейти к поиску
Строка 74: Строка 74:
 
     '''3.б''' Если для каждого кластера его центр масс '''совпадает''' с центроидом, то
 
     '''3.б''' Если для каждого кластера его центр масс '''совпадает''' с центроидом, то
 
             '''Выход из алгоритма''', объекты классифицированы.
 
             '''Выход из алгоритма''', объекты классифицированы.
 +
 +
'''Альтернатива'''
 +
 +
Последовательность шагов алгоритма следующая:
 +
 +
    1) Инициализация центроидов <math>\Mu</math>, <math> iter = 1 </math>, задание максимального количество итераций <math>maxiter</math>
 +
    2a) Нахождение матрицы расстояний <math>dist: dist_{ij} = \sum_{l = 1\dots d} (x_{il}-\mu_{il})^2</math>
 +
    2b) Нахождение вектора распределения объектов по кластерам <math>index: index_{i} = argmin_{j} dist_{ij} </math>
 +
    3) Пересчет центроидов <math>\tilde{\Mu}: \tilde{\mu_{ij}} = \sum_{l \in T_i} x_{lj}/|T_i| </math>, где <math>T_i = \{l| l \in 1\dots n, index_l = i\}  </math>
 +
    4) Проверка критерия останова: если <math> \exists i: \tilde{\mu_i} \neq \mu_i</math> и <math> iter < maxiter </math>, то <math> inc(iter), \Mu=\tilde{\Mu}</math>, goto 2a
  
 
== Последовательная сложность алгоритма ==
 
== Последовательная сложность алгоритма ==

Версия 18:50, 14 октября 2016


Алгоритм k-средних (k-means)
Последовательный алгоритм
Последовательная сложность [math]O()[/math]
Объём входных данных [math]\frac{()}{}[/math]
Объём выходных данных [math]\frac{ ()}{}[/math]


Страница создана группой "Илья Егоров — Евгений Богомазов"


1 ЧАСТЬ. Свойства и структура алгоритмов

1.1 Общее описание алгоритма

Алгоритм кластеризации k-средних впервые был предложен в 1950-х годах математиками Гуго Штейнгаузом и Стюартом Ллойдом независимо друг от друга. Наибольшую популярность он получил после работы Маккуина.

Алгоритм позволяет при заданном числе [math]k[/math] построить [math]k[/math] кластеров, расположенных на максимальном расстоянии друг от друга. Таким образом, наибольшей точности результат выполнения алгоритма достигает при полной осведомленности Пользователя о характере кластеризуемых объектов и, как следствие, при обладании максимально корректной информацией о числе кластеров.

В общем случае выбор числа [math]k[/math] может базироваться на любых значимых факторах, в том числе на результатах предшествующих исследований, теоретических соображениях или интуиции.

1.2 Математическое описание алгоритма

Исходные данные:

  • Совокупность n d-мерных векторов [math] X = \{x_1 \dots x_n\} , [/math] где [math] x_i = \{x_{i1} \dots x_{id}\} [/math]
  • Предполагаемое количество кластеров k

Выходные данные:

  • Разбиение X на множество [math] S = \{S_1 \dots S_k \}, \bigcup S_i = X, S_i \cap S_j = \emptyset, i \neq j [/math]
  • k центров кластеров [math] \Mu = \{\mu_1 \dots \mu_k \} [/math], где [math] \mu_i = \{\mu_{i1} \dots \mu_{id} \} [/math] такие, что

[math] \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] \mu_{ij} = random [/math]

2) [math] S_i = \{x| argmin_j ||x-\mu_j|| = i\} i = 1 \dots k [/math]

3) [math] \tilde{\mu_{i}} = E_{x \in S_i}(x) [/math]

4) Если для [math] \forall i: \mu_i = \tilde{\mu_i} [/math] то алгоритм завершен, иначе [math] \mu_i = \tilde{\mu_i} [/math] и перейти на пункт 2)

1.3 Вычислительное ядро алгоритма

Вычислительным ядром алгоритма является второй этап, а точнее нахождение матрицы расстояний между [math]X[/math] и [math]\Mu[/math]. Для d-мерного вектора [math]a:[/math]

[math]||a||=\sqrt{\sum_{i=1\dots d} a_i^2}[/math], поэтому заполнение одной ячейки такой матрицы потребует [math]d[/math] операций умножения, [math]d-1[/math] операций сложения и одну операция вычисления квадратного корня. Но так как эти расстояния используются только для сравнения, а sqrt является монотонно возрастающей функцией, то ее можно не вычислять. Поэтому нахождения матрицы расстояний потребует всего [math]n*k*d[/math] операций умножений и [math]n*k*(d-1)[/math] операций сложений.

1.4 Макроструктура алгоритма

Алгоритм k-средних базируется на алгоритме вычисления расстояния между векторами, расстояние на каждом шаге высчитывается [math]k\cdot n[/math] раз.

Помимо этого, в конце каждого шага вычисляется центр масс объектов кластера, для всех объектов потребуется [math]n-1[/math] суммирование и [math]k[/math] делений.

1.5 Схема реализации последовательного алгоритма

Последовательность шагов алгоритма следующая:

   1. Шаг инициализации
       По какому-либо правилу выбираем [math]k[/math] объектов для кластеризации, объявляем их центроидами
       
   2. Шаг классификации
       Классифицируем каждый объект на предмет принадлежности к кластеру:
       
       [math]a_i \in P \Leftrightarrow \left|a_i - s_P\right| \rightarrow \min_P[/math]
       
   3. Шаг перерасчета центроидов
       Вычисляем центр масс каждого из кластеров.
       
   3.а Если для какого-либо кластера его центр масс отличается от центроида, то 
           * переносим центроид этого кластера во вновь образованный центр масс,
           * проделываем эту операцию для всех других кластеров
           * переходим к Шагу 2
       
   3.б Если для каждого кластера его центр масс совпадает с центроидом, то
           Выход из алгоритма, объекты классифицированы.

Альтернатива

Последовательность шагов алгоритма следующая:

   1) Инициализация центроидов [math]\Mu[/math], [math] iter = 1 [/math], задание максимального количество итераций [math]maxiter[/math]
   2a) Нахождение матрицы расстояний [math]dist: dist_{ij} = \sum_{l = 1\dots d} (x_{il}-\mu_{il})^2[/math]
   2b) Нахождение вектора распределения объектов по кластерам [math]index: index_{i} = argmin_{j} dist_{ij} [/math]
   3) Пересчет центроидов [math]\tilde{\Mu}: \tilde{\mu_{ij}} = \sum_{l \in T_i} x_{lj}/|T_i| [/math], где [math]T_i = \{l| l \in 1\dots n, index_l = i\}  [/math]
   4) Проверка критерия останова: если [math] \exists i: \tilde{\mu_i} \neq \mu_i[/math] и [math] iter \lt  maxiter [/math], то [math] inc(iter), \Mu=\tilde{\Mu}[/math], goto 2a

1.6 Последовательная сложность алгоритма

   1. Шаг инициализации
       
       Сложность выбора [math]k[/math] центроидов [math]O(1)[/math]
      
  2. Шаг классификации
      
       Для каждого из [math]n[/math]объектов требуется выполнить [math]k*dim[/math] операций умножения и [math]k*(k - 1)[/math] операций сложения. То есть сложность вычисления расстояний на каждой итерации [math]O(n*k*(dim + k - 1)[/math].
       
       После этого нужно найти кластер, расстояние до которого минимально. Сложность такого поиска [math]O(n*k)[/math]
       
       Суммарная сложность шага [math]O(n*k*(dim + k - 1)[/math].
      
  3. Шаг перерасчета центроидов
      
      Для вычисления центра масс каждого из кластеров требуется совершить [math](n - 1)*dim[/math] операцию сложения и [math]k*dim[/math] операций деления. Сложность шага [math]O((n + k - 1)*dim)[/math]
      
  3.а Обновление центроидов потребует [math]k*dim[/math] операций вычитания, сложность шага [math]O(k*dim)[/math]

1.7 Информационный граф

1.8 Ресурс параллелизма алгоритма

1.9 Входные и выходные данные алгоритма

Входные данные: Количество кластеров k, n кластеризуемых элементов

Дополнительные ограничения:

  • k — положительное число, т. е. k > 0.
  • Для кластеризуемых элементов определена метрика (расстояние между объектами)

Объём входных данных: n [math]\cdot[/math] d + 1 (кластеризуемые объекты в виде векторов и число k)

Выходные данные: Массив, в который записаны принадлежности каждого элемента кластеру (допустим вывод в другой эквивалентной более удобной структуре).

Объём выходных данных: Размер массива равен 2 [math]\cdot[/math] n.

1.10 Свойства алгоритма

Вычислительная мощность алгоритма на каждом шаге равна [math]k\cdot n[/math] (расстояние между элементом и центроидом [math]k\cdot n[/math] раз)

2 ЧАСТЬ. Программная реализация алгоритма

2.1 Масштабируемость алгоритма и его реализации

2.2 Существующие реализации алгоритма

3 Литература

[1] Нейский И.М. Классификация и сравнение методов кластеризации http://it-claim.ru/Persons/Neyskiy/Article2_Neiskiy.pdf

[2] https://ru.wikipedia.org/wiki/K-means