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

Материал из Алговики
Перейти к навигации Перейти к поиску
Первый вариант статьи
 
Нет описания правки
Строка 1: Строка 1:
Алгоритм k средних
Автор статьи: Синдеева Мария, группа 416
== Свойства и структура алгоритма ==
== Свойства и структура алгоритма ==


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


'''Алгоритм k средних''' - это алгоритм кластерного анализа, используемый в дата майнинге. Цель алгоритма - разделить <math>n</math> наблюдений на <math>k</math> кластеров, в которых каждое наблюдение принадлежит к кластеру с ближайшим центром, который служит прототипом всего кластера. Эта задача является NP-сложной, но существуют эффективные эвристические алгоритмы, быстро сходящиеся к локальному минимуму.  
'''Алгоритм k средних''' - это алгоритм кластерного анализа, используемый в Data Mining. Цель алгоритма - разделить <math>n</math> наблюдений на <math>k</math> кластеров, в которых каждое наблюдение принадлежит к кластеру с ближайшим центром, который служит прототипом всего кластера. Эта задача является NP-сложной, но существуют эффективные эвристические алгоритмы, быстро сходящиеся к локальному минимуму.  


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


=== Математическое описание алгоритма ===
=== Математическое описание алгоритма ===
Строка 26: Строка 29:
Алгоритм завершается, когда на какой-то итерации не происходит изменения центра масс кластеров. Это происходит за конечное число итераций, так как количество возможных разбиений конечного множества конечно, а на каждом шаге суммарное квадратичное отклонение F не увеличивается, поэтому зацикливание невозможно.
Алгоритм завершается, когда на какой-то итерации не происходит изменения центра масс кластеров. Это происходит за конечное число итераций, так как количество возможных разбиений конечного множества конечно, а на каждом шаге суммарное квадратичное отклонение F не увеличивается, поэтому зацикливание невозможно.


Такой алгоритм сходится при любом начальном приближении разбиения на кластеры, поэтому в качестве нулевого шаге часто выбирают <math>k</math> случайных векторов среди  <math>(\mathbf x_1, \mathbf x_2, .. \mathbf x_n)</math>.
Такой алгоритм сходится при любом начальном приближении разбиения на кластеры, поэтому в качестве нулевого шага часто выбирают <math>k</math> случайных векторов среди  <math>(\mathbf x_1, \mathbf x_2, .. \mathbf x_n)</math>.





Версия от 20:17, 30 октября 2017

Алгоритм k средних Автор статьи: Синдеева Мария, группа 416

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

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

Алгоритм k средних - это алгоритм кластерного анализа, используемый в Data Mining. Цель алгоритма - разделить [math]\displaystyle{ n }[/math] наблюдений на [math]\displaystyle{ k }[/math] кластеров, в которых каждое наблюдение принадлежит к кластеру с ближайшим центром, который служит прототипом всего кластера. Эта задача является NP-сложной, но существуют эффективные эвристические алгоритмы, быстро сходящиеся к локальному минимуму.

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

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

Входные параметры: [math]\displaystyle{ n }[/math] наблюдений (векторов) [math]\displaystyle{ (\mathbf x_1, \mathbf x_2, .. \mathbf x_n) }[/math], [math]\displaystyle{ k }[/math] - число кластеров.

Также входным параметром можно считать метрику для векторов, например евклидово расстояние [math]\displaystyle{ d(x, y) = \sum_{i = 1}^{l} (x_i - y_i )^2 }[/math] - одна из самых популярных используемых метрик.

Формально нам необходимо найти такое разделение [math]\displaystyle{ (\mathbf x_1, \mathbf x_2, .. \mathbf x_n) }[/math] на подмножества [math]\displaystyle{ G = (G_1, .. G_k) }[/math], так чтобы минимизировать сумму квадратов расстояний до их центров, или суммарное квадратичное отклонение:

[math]\displaystyle{ F = \underset{\mathbf{G}} {\operatorname{arg\,min}} \sum_{i=1}^{k} \sum_{\mathbf x \in G_i} d(\mathbf x, \boldsymbol\mu_i)^2, }[/math]

где [math]\displaystyle{ \boldsymbol\mu_i }[/math] - центр кластера [math]\displaystyle{ G_i }[/math]

Алгоритм работает итерационно, каждая итерация алгоритма представляет собой следующее:

  • Пересчитать центр масс для каждого кластера, полученного на предыдущем шаге: [math]\displaystyle{ \boldsymbol \mu_i = \frac{\sum_{\mathbf x_i \in G_i}\mathbf x_i}{|G_i|}, i = 1, 2, .. k }[/math]
  • Переразбить векторы на кластеры в соответствии с расстоянием до новых посчитанных центров: [math]\displaystyle{ z_i = \underset{\mathbf{j}} {\operatorname{arg\,min}} \{d(\mathbf x_i, \boldsymbol \mu_j)\}, i = 1, 2, .. n }[/math]

Алгоритм завершается, когда на какой-то итерации не происходит изменения центра масс кластеров. Это происходит за конечное число итераций, так как количество возможных разбиений конечного множества конечно, а на каждом шаге суммарное квадратичное отклонение F не увеличивается, поэтому зацикливание невозможно.

Такой алгоритм сходится при любом начальном приближении разбиения на кластеры, поэтому в качестве нулевого шага часто выбирают [math]\displaystyle{ k }[/math] случайных векторов среди [math]\displaystyle{ (\mathbf x_1, \mathbf x_2, .. \mathbf x_n) }[/math].


Программная реализация алгоритма

Литература

  • MacQueen, J. B. (1967). "Some Methods for classification and Analysis of Multivariate Observations"
  • MacKay, David (2003). "An Example Inference Task: Clustering"