<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80+%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80+%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2"/>
	<updated>2026-10-22T18:16:27Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=17844</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=17844"/>
		<updated>2016-11-17T00:52:57Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|Преподаватель 1|Dexter}} &lt;br /&gt;
{{Assignment|Algoman}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма, реализация алгоритма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма, замеры времени выполнения и визуализация результата)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. В предположении о том, что число объектов выборки много больше размерности пространства признаков (что выполняется для подавляющего большинства прикладных задач), параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M также эффективно распараллеливается по объектам с последующей агрегацией результатов по кластерам: параллельная сложность M-шага — &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность EM-алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Вычислительная мощность EM-алгоритма в предположении о том, что &amp;lt;math&amp;gt;l \gg n&amp;lt;/math&amp;gt; (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной &amp;lt;math&amp;gt;O(imax * k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Исследование масштабируемости параллельной реализации EM-алгоритма проводилось на суперкомпьютере Blue Gene/P. Для этого использовалась собственная реализация алгоритма, написанная на языке C++ с использованием технологий MPI и OpenMP.&lt;br /&gt;
&lt;br /&gt;
Для проведения исследования были сгенерированы наборы данных из смеси двух двумерных нормальных распределений с диагональными матрицами ковариаций.&lt;br /&gt;
&lt;br /&gt;
Набор значений параметров запуска реализации алгоритма:&lt;br /&gt;
* число процессоров: 1, 4, 8, 16, 32, 48, 64, 80, 96, 112, 128&lt;br /&gt;
* число элементов выборки: 1000, 25000, 50000, 75000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000&lt;br /&gt;
* размерность пространства признаков: 2&lt;br /&gt;
* число кластеров: 2&lt;br /&gt;
* максимальное число итераций: MAX_INT&lt;br /&gt;
* минимальная величина изменения логарифма правдоподобия: 1e-6&lt;br /&gt;
&lt;br /&gt;
Начальные значения параметров смеси задавались следующим образом:&lt;br /&gt;
* центры кластеров - случайные элементы выборки&lt;br /&gt;
* матрицы ковариаций - единичные&lt;br /&gt;
* веса компонент равны между собой&lt;br /&gt;
&lt;br /&gt;
В связи с тем, что время и результат работы алгоритма сильно зависят от рандомизированной начальной инициализации центров кластеров, для каждого фиксированного набора параметров производилось по 25 запусков программы. В качестве итогового времени работы выбиралось минимальное время среди всех запусков.&lt;br /&gt;
&lt;br /&gt;
На рисунке 4 изображена зависимость времени работы алгоритма от числа процессоров и числа элементов выборки.&lt;br /&gt;
&lt;br /&gt;
[[File:EM-time.png|thumb|center|1200px|Рисунок 4. Зависимость времени работы параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 4, при фиксированном числе процессоров зависимость времени выполнения от количества объектов выборки очень близка к линейной, что хорошо согласуется с теоретической оценкой.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики зависимости производительности и эффективности реализации EM-алгоритма от числа процессоров и числа элементов выборки.&lt;br /&gt;
&lt;br /&gt;
[[File:EM-performance.png|thumb|center|1200px|Рисунок 5. Зависимость производительности параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
[[File:EM-efficiency.png|thumb|center|1200px|Рисунок 6. Зависимость эффективности параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
* минимальная эффективность реализации 0.67%&lt;br /&gt;
* максимальная эффективность реализации 1.19%&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=17843</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=17843"/>
		<updated>2016-11-17T00:39:18Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|Преподаватель 1|Dexter}} &lt;br /&gt;
{{Assignment|Algoman}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма, реализация алгоритма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма, замеры времени выполнения и визуализация результата)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. В предположении о том, что число объектов выборки много больше размерности пространства признаков (что выполняется для подавляющего большинства прикладных задач), параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M также эффективно распараллеливается по объектам с последующей агрегацией результатов по кластерам: параллельная сложность M-шага — &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность EM-алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Вычислительная мощность EM-алгоритма в предположении о том, что &amp;lt;math&amp;gt;l \gg n&amp;lt;/math&amp;gt; (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной &amp;lt;math&amp;gt;O(imax * k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Исследование масштабируемости параллельной реализации EM-алгоритма проводилось на суперкомпьютере Blue Gene/P. Для этого использовалась собственная реализация алгоритма, написанная на языке C++ с использованием технологий MPI и OpenMP.&lt;br /&gt;
&lt;br /&gt;
Для проведения исследования были сгенерированы наборы данных из смеси двух двумерных нормальных распределений с диагональными матрицами ковариаций.&lt;br /&gt;
&lt;br /&gt;
Набор значений параметров запуска реализации алгоритма:&lt;br /&gt;
* число процессоров: 1, 8, 16, 32, 48, 64, 80, 96, 112, 128&lt;br /&gt;
* число элементов выборки: 1000, 25000, 50000, 75000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000&lt;br /&gt;
* размерность пространства признаков: 2&lt;br /&gt;
* число кластеров: 2&lt;br /&gt;
* максимальное число итераций: MAX_INT&lt;br /&gt;
* минимальная величина изменения логарифма правдоподобия: 1e-6&lt;br /&gt;
&lt;br /&gt;
Начальные значения параметров смеси задавались следующим образом:&lt;br /&gt;
* центры кластеров - случайные элементы выборки&lt;br /&gt;
* матрицы ковариаций - единичные&lt;br /&gt;
* веса компонент равны между собой&lt;br /&gt;
&lt;br /&gt;
В связи с тем, что время и результат работы алгоритма сильно зависят от рандомизированной начальной инициализации центров кластеров, для каждого фиксированного набора параметров производилось по 25 запусков программы. В качестве итогового времени работы выбиралось минимальное время среди всех запусков.&lt;br /&gt;
&lt;br /&gt;
На рисунке 4 изображена зависимость времени работы алгоритма от числа процессоров и числа элементов выборки.&lt;br /&gt;
&lt;br /&gt;
[[File:EM-time.png|thumb|center|1200px|Рисунок 4. Зависимость времени работы параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 4, при фиксированном числе процессоров зависимость времени выполнения от количества объектов выборки очень близка к линейной, что хорошо согласуется с теоретической оценкой.&lt;br /&gt;
&lt;br /&gt;
На следующих рисунках приведены графики зависимости производительности и эффективности реализации EM-алгоритма от числа процессоров и числа элементов выборки.&lt;br /&gt;
&lt;br /&gt;
[[File:EM-performance.png|thumb|center|1200px|Рисунок 5. Зависимость производительности параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
[[File:EM-efficiency.png|thumb|center|1200px|Рисунок 6. Зависимость эффективности параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
В результате проведённых экспериментов был получен следующий диапазон эффективности реализации алгоритма:&lt;br /&gt;
* минимальная эффективность реализации 0.67%&lt;br /&gt;
* максимальная эффективность реализации 1.19%&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=17460</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=17460"/>
		<updated>2016-11-15T20:52:38Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment|Algoman}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма, реализация алгоритма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма, замеры времени выполнения и визуализация результата)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. В предположении о том, что число объектов выборки много больше размерности пространства признаков (что выполняется для подавляющего большинства прикладных задач), параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M также эффективно распараллеливается по объектам с последующей агрегацией результатов по кластерам: параллельная сложность M-шага — &amp;lt;math&amp;gt;O(k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Таким образом, параллельная сложность EM-алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Вычислительная мощность EM-алгоритма в предположении о том, что &amp;lt;math&amp;gt;l \gg n&amp;lt;/math&amp;gt; (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной &amp;lt;math&amp;gt;O(imax * k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
Исследование масштабируемости параллельной реализации EM-алгоритма проводилось на суперкомпьютере Blue Gene/P. Для этого использовалась собственная реализация алгоритма, написанная на языке C++ с использованием технологий MPI и OpenMP.&lt;br /&gt;
&lt;br /&gt;
Для проведения исследования были сгенерированы наборы данных из смеси двух двумерных нормальных распределений с диагональными матрицами ковариаций.&lt;br /&gt;
&lt;br /&gt;
Набор значений параметров запуска реализации алгоритма:&lt;br /&gt;
* число процессоров: 1, 8, 16, 32, 48, 64, 80, 96, 112, 128&lt;br /&gt;
* число элементов выборки: 1000, 25000, 50000, 75000, 100000, 200000, 300000, 400000, 500000, 600000, 700000, 800000, 900000, 1000000&lt;br /&gt;
* размерность пространства признаков: 2&lt;br /&gt;
* число кластеров: 2&lt;br /&gt;
* максимальное число итераций: MAX_INT&lt;br /&gt;
* минимальная величина изменения логарифма правдоподобия: 1e-6&lt;br /&gt;
&lt;br /&gt;
Начальные значения параметров смеси задавались следующим образом:&lt;br /&gt;
* центры кластеров - случайные элементы выборки&lt;br /&gt;
* матрицы ковариаций - единичные&lt;br /&gt;
* веса компонент равны между собой&lt;br /&gt;
&lt;br /&gt;
В связи с тем, что время и результат работы алгоритма сильно зависят от рандомизированной начальной инициализации центров кластеров, для каждого фиксированного набора параметров производилось по 25 запусков программы. В качестве итогового времени работы выбиралось минимальное время среди всех запусков.&lt;br /&gt;
&lt;br /&gt;
На рисунке 4 изображена зависимость времени работы алгоритма от числа процессоров и числа элементов выборки.&lt;br /&gt;
&lt;br /&gt;
[[File:EM_time.png|thumb|center|1200px|Рисунок 4. Зависимость времени работы параллельной реализации EM-алгоритма от числа процессоров и числа элементов выборки.]]&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 4, при фиксированном числе процессоров зависимость времени выполнения от количества объектов выборки очень близка к линейной, что хорошо согласуется с теоретической оценкой.&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=15211</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=15211"/>
		<updated>2016-10-31T18:12:05Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Вычислительная мощность EM-алгоритма в предположении о том, что &amp;lt;math&amp;gt;l \gg n&amp;lt;/math&amp;gt; (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной &amp;lt;math&amp;gt;O(imax * k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2&amp;diff=15209</id>
		<title>Обсуждение участника:Александр Куваев</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2&amp;diff=15209"/>
		<updated>2016-10-31T18:11:00Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: /* Замечения от 31.10 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Замечания к [[Участник:Александр_Куваев/Алгоритм_кластеризации,_основанный_на_максимизации_ожидания]] ==&lt;br /&gt;
&lt;br /&gt;
1) отсутствует оценка вычислительной мощности алгоритма в п 1.10 - замечание исправлено&lt;br /&gt;
&lt;br /&gt;
== Замечения от 31.10 ==&lt;br /&gt;
&lt;br /&gt;
отсутствует ссылка на источник картинки в п 1.1&lt;br /&gt;
&amp;quot;- В конце статьи должен быть приведен список всех источников, откуда бралась информация по алгоритму. Если вы используется готовый рисунок, то сслыку на источник нужно разместить либо в подписи к рисунку, либо в тексте, где стоит ссылка на рисунок.&amp;quot; - изображение генерировалось самостоятельно&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=14669</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=14669"/>
		<updated>2016-10-29T09:56:46Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Вычислительная мощность EM-алгоритма в предположении о том, что &amp;lt;math&amp;gt;l \gg n&amp;lt;/math&amp;gt; (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной &amp;lt;math&amp;gt;O(imax * k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2&amp;diff=13810</id>
		<title>Обсуждение участника:Александр Куваев</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D1%83%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%D0%B0:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2&amp;diff=13810"/>
		<updated>2016-10-25T23:13:10Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Замечания к [[Участник:Александр_Куваев/Алгоритм_кластеризации,_основанный_на_максимизации_ожидания]] ==&lt;br /&gt;
&lt;br /&gt;
1) отсутствует оценка вычислительной мощности алгоритма в п 1.10 - замечание исправлено&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=13809</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=13809"/>
		<updated>2016-10-25T23:11:10Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Вычислительная мощность EM-алгоритма в предположении о том, что &amp;lt;math&amp;gt;l \gg n&amp;lt;/math&amp;gt; (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной &amp;lt;math&amp;gt;O(imax * k * n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=12066</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=12066"/>
		<updated>2016-10-15T20:59:51Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Assignment}}&lt;br /&gt;
&lt;br /&gt;
Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариаций &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариаций кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11973</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11973"/>
		<updated>2016-10-15T20:50:25Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11964</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11964"/>
		<updated>2016-10-15T20:49:01Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Последовательное выполнение шагов E и M&#039;&#039;&#039; до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11956</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11956"/>
		<updated>2016-10-15T20:48:04Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11932</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11932"/>
		<updated>2016-10-15T20:45:32Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11911</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11911"/>
		<updated>2016-10-15T20:43:36Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11870</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11870"/>
		<updated>2016-10-15T20:40:24Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С. (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)&lt;br /&gt;
* Щенявская Е.В. (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11859</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11859"/>
		<updated>2016-10-15T20:38:38Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания:&lt;br /&gt;
* Куваев А.С. (математическая постановка задачи, схема реализации алгоритма, оценка сложности)&lt;br /&gt;
* Щенявская Е.В. (описание алгоритма, визуализация информационного графа, описание свойств алгоритма)&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11821</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11821"/>
		<updated>2016-10-15T20:33:36Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы&amp;lt;ref name=voevodin&amp;gt;Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.&amp;lt;/ref&amp;gt; шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11811</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11811"/>
		<updated>2016-10-15T20:31:56Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга&amp;lt;ref name=vorontsov&amp;gt;Воронцов К.В., Математические методы обучения по прецедентам.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам&amp;lt;ref name=vorontsov/&amp;gt;:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью&amp;lt;ref name=korolev&amp;gt;Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.&amp;lt;/ref&amp;gt;. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11732</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11732"/>
		<updated>2016-10-15T20:17:32Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
# [http://scikit-learn.org/stable/modules/generated/sklearn.mixture.GaussianMixture.html#sklearn.mixture.GaussianMixture scikit-learn(Python)]&lt;br /&gt;
# [http://docs.opencv.org/2.4/modules/ml/doc/expectation_maximization.html OpenCV(C++/Python)]&lt;br /&gt;
# [http://www.mlpack.org/docs/mlpack-git/doxygen.php?doc=classmlpack_1_1gmm_1_1GMM.html MLPack(C++)]&lt;br /&gt;
# [http://arma.sourceforge.net/docs.html#gmm_diag Armadillo(C++)]&lt;br /&gt;
# [https://www.mathworks.com/help/stats/fitgmdist.html Matlab]&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11627</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11627"/>
		<updated>2016-10-15T20:04:02Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: /* Свойства алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная математическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11606</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11606"/>
		<updated>2016-10-15T20:01:16Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
Достоинства EM-алгоритма:&lt;br /&gt;
* Мощная статистическая основа&lt;br /&gt;
* Слабая чувствительность к выбросам&lt;br /&gt;
* Быстрая сходимость при удачной инициализации параметров&lt;br /&gt;
* Линейный рост сложности при увеличении количества объектов&lt;br /&gt;
&lt;br /&gt;
Недостатки EM-алгоритма:&lt;br /&gt;
* В классическом варианте не может самостоятельно определить количество компонент смеси&lt;br /&gt;
* Трудоемкий и неустойчивый процесс обращения матриц ковариации в случае несферических компонент смеси&lt;br /&gt;
* Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом&lt;br /&gt;
* Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11501</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11501"/>
		<updated>2016-10-15T19:39:13Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11494</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11494"/>
		<updated>2016-10-15T19:38:09Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
На рисунках 2 и 3 представлены информационные графы шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.&lt;br /&gt;
&lt;br /&gt;
Как видно из рисунка 2, E-шаг распадается на:&lt;br /&gt;
* Обращение матриц ковариаций и вычисление их определителей&lt;br /&gt;
* Независимый расчет скрытых переменных по каждому объекту&lt;br /&gt;
&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
На рисунке 3 видно, что некоторые промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11400</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11400"/>
		<updated>2016-10-15T19:24:24Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательнось действий. Таким образом, параллельная сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{2})&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11242</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=11242"/>
		<updated>2016-10-15T18:57:51Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
Из информационных графов на рисунках 2 и 3 видно, что:&lt;br /&gt;
* Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеивается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется.&lt;br /&gt;
* Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=10976</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=10976"/>
		<updated>2016-10-15T17:58:10Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[File:E-step.png|thumb|center|1100px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
[[File:M-step.png|thumb|center|1100px|Рисунок 3. Граф шага M с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=10409</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=10409"/>
		<updated>2016-10-15T16:02:23Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
[[File:E-step.png|thumb|center|979px|Рисунок 2. Граф шага E с отображением входных и выходных данных.]]&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8450</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8450"/>
		<updated>2016-10-14T23:06:00Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k \in \N&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax \in \N&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon \in \R&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8420</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8420"/>
		<updated>2016-10-14T22:35:32Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
Рассмотрим мультипликативную сложность одной итерации алгоритма:&lt;br /&gt;
* &#039;&#039;&#039;E-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность обращения матрицы ковариаций и вычисления ее определителя — &amp;lt;math&amp;gt;O(n^{3})&amp;lt;/math&amp;gt; (для простоты будем рассматривать метод Гаусса)&lt;br /&gt;
** Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — &amp;lt;math&amp;gt;O(n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность E-шага — &amp;lt;math&amp;gt;O(k * n^{3} + k * l * n^{2})&amp;lt;/math&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;M-шаг:&#039;&#039;&#039;&lt;br /&gt;
** Сложность пересчета веса кластера — &amp;lt;math&amp;gt;O(l)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета центра кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Сложность пересчета матрицы ковариации кластера — &amp;lt;math&amp;gt;O(l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
** Общая сложность M-шага — &amp;lt;math&amp;gt;O(k * l * n)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Таким образом, общая сложность одной итерации — &amp;lt;math&amp;gt;O(k * n^{2} * (l + n))&amp;lt;/math&amp;gt;. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — &amp;lt;math&amp;gt;O(imax * k * n^{2} * (l + n))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит &amp;lt;math&amp;gt;O(imax * k * n * l)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8330</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8330"/>
		<updated>2016-10-14T21:48:48Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси (кластера).&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты. Зная параметры распределения смеси, каждому наблюдению будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8313</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8313"/>
		<updated>2016-10-14T21:38:05Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8307</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8307"/>
		<updated>2016-10-14T21:36:22Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}.&amp;lt;/math&amp;gt; Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8306</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8306"/>
		<updated>2016-10-14T21:35:51Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}.&amp;lt;/math&amp;gt;&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8243</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8243"/>
		<updated>2016-10-14T21:22:07Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма - процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
Алгоритма состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.&lt;br /&gt;
&lt;br /&gt;
В ходе E-шага используется:&lt;br /&gt;
* Обращение ковариационной матрицы и вычисление ее определителя&lt;br /&gt;
* Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец &lt;br /&gt;
В ходе M-шага используется:&lt;br /&gt;
* Умножение вектор-столбца на вектор-строку&lt;br /&gt;
* Взвешенное суммирование векторов и матриц &lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8140</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8140"/>
		<updated>2016-10-14T20:41:43Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма - процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Входные данные:&#039;&#039;&#039; плотная матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём входных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;ln + 3&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные:&#039;&#039;&#039; вещественный вектор весов &amp;lt;math&amp;gt;w \in \R^{k}&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных векторов математических ожиданий &amp;lt;math&amp;gt;\mu_{j} \in \R^{n}&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; вещественных ковариационных матриц &amp;lt;math&amp;gt;\Sigma_{j} \in \R^{n \times n}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Объём выходных данных:&#039;&#039;&#039; &amp;lt;math&amp;gt;k(n^{2}+n+1)&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8096</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8096"/>
		<updated>2016-10-14T20:15:26Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма - процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8091</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=8091"/>
		<updated>2016-10-14T20:11:14Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
Вычислительное ядро EM-алгоритма - процедура последовательного выполнения шагов E и M:&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных&lt;br /&gt;
* На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7870</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7870"/>
		<updated>2016-10-14T17:59:35Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: &amp;lt;math&amp;gt;sum = 0&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##::: &amp;lt;math&amp;gt;sum = sum + w_{j}p_{j}(x_{i})&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##::: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7827</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7827"/>
		<updated>2016-10-14T17:35:39Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \ \mu_{j}, \ \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|, \ \Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l; \ j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7825</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7825"/>
		<updated>2016-10-14T17:34:34Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k.&amp;lt;/math&amp;gt;:&lt;br /&gt;
#: Инициализировать &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}&amp;lt;/math&amp;gt;&lt;br /&gt;
# Для всех &amp;lt;math&amp;gt;iter = 1,\dotsc,imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l; \ j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7824</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=7824"/>
		<updated>2016-10-14T17:31:46Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;, минимальная величина изменения логарифма правдоподобия &amp;lt;math&amp;gt;\varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
# Инициализация параметров &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}&amp;lt;/math&amp;gt; для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
# В цикле от &amp;lt;math&amp;gt;1&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;:&lt;br /&gt;
## Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##: Вычислить &amp;lt;math&amp;gt;|\Sigma_{j}|&amp;lt;/math&amp;gt; и &amp;lt;math&amp;gt;\Sigma_{j}^{-1}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг E:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;i = 1,\dotsc,l; \ j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr)&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt;&lt;br /&gt;
## Шаг M:&lt;br /&gt;
##: Для всех &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;:&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}&amp;lt;/math&amp;gt;&lt;br /&gt;
##:: Вычислить &amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T&amp;lt;/math&amp;gt;&lt;br /&gt;
## Вычислить изменения логарифма правдоподобия &amp;lt;math&amp;gt;\Delta&amp;lt;/math&amp;gt;&lt;br /&gt;
## Если &amp;lt;math&amp;gt;\Delta &amp;lt; \varepsilon&amp;lt;/math&amp;gt;, то досрочно выйти из цикла&lt;br /&gt;
# Вернуть &amp;lt;math&amp;gt;w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6468</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6468"/>
		<updated>2016-10-13T13:17:43Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
*:&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
*:&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
*:&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6463</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6463"/>
		<updated>2016-10-13T13:10:15Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
::&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}&amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr), \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
::&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6459</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6459"/>
		<updated>2016-10-13T13:06:13Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},\dotsc,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1,\dotsc,k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;, максимизирующий правдоподобие выборки.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Структура алгоритма:&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Инициализация параметров:&#039;&#039;&#039; существует большое число вариантов инициальзации параметров распределения. Один из возможных подходов - задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариации единичными матрицами и задание весов компонент равными &amp;lt;math&amp;gt;\frac{1}{k}&amp;lt;/math&amp;gt;.&lt;br /&gt;
* Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:&lt;br /&gt;
** &#039;&#039;&#039;Шаг E:&#039;&#039;&#039; вычисление значений скрытых переменных по формуле Байеса:&lt;br /&gt;
::&amp;lt;math&amp;gt;g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})}, \ i = 1,\dotsc,l; \ j = 1,\dotsc,k &amp;lt;/math&amp;gt; , где &amp;lt;math&amp;gt;p_{j}(x_{i}) = \frac{1}{(2\pi)^{n/2}\sqrt{|\Sigma_{j}|}} \exp \biggl( -\frac{1}{2}(x_{i} - \mu_{j})^{T} \Sigma_{j}^{-1} (x_{i} - \mu_{j}) \biggr) &amp;lt;/math&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;Шаг M:&#039;&#039;&#039; перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:&lt;br /&gt;
::&amp;lt;math&amp;gt;w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;\mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k;&amp;lt;/math&amp;gt;&lt;br /&gt;
::&amp;lt;math&amp;gt;\Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T, \ j = 1,\dotsc,k.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6256</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6256"/>
		<updated>2016-10-13T01:45:59Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
Пусть заданы &amp;lt;math&amp;gt;l&amp;lt;/math&amp;gt; объектов &amp;lt;math&amp;gt;x_{1},...,x_{l}&amp;lt;/math&amp;gt;, каждый из которых описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; числовыми признаками. Таким образом, определена матрица объектов-признаков &amp;lt;math&amp;gt;X \in \R^{l \times n}&amp;lt;/math&amp;gt;. Предполагается, что объекты выбраны случайно и независимо из смеси &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерных нормальных распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Плотность распределения на множестве объектов имеет вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Каждая компонента смеси описывается &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;-мерным вектором математических ожиданий &amp;lt;math&amp;gt;\mu_{j}&amp;lt;/math&amp;gt; и матрицей ковариации &amp;lt;math&amp;gt;\Sigma_{j}&amp;lt;/math&amp;gt; порядка &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;j = 1...k&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Исходные данные:&#039;&#039;&#039; матрица объектов-признаков &amp;lt;math&amp;gt;X&amp;lt;/math&amp;gt;, число кластеров &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;, максимальное число итераций &amp;lt;math&amp;gt;imax&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Вычисляемые данные:&#039;&#039;&#039; набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси &amp;lt;math&amp;gt;\theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k})&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6252</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6252"/>
		<updated>2016-10-13T00:40:59Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
Везде в дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6251</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6251"/>
		<updated>2016-10-13T00:24:17Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{ij}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6244</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6244"/>
		<updated>2016-10-12T23:29:11Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{i,j}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;.&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных.&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6242</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=6242"/>
		<updated>2016-10-12T23:28:39Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{i,j}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных&lt;br /&gt;
&lt;br /&gt;
[[File:EM iterations.png|thumb|center|800px|Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.]]&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=5773</id>
		<title>Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%90%D0%BB%D0%B5%D0%BA%D1%81%D0%B0%D0%BD%D0%B4%D1%80_%D0%9A%D1%83%D0%B2%D0%B0%D0%B5%D0%B2/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8,_%D0%BE%D1%81%D0%BD%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B0_%D0%BC%D0%B0%D0%BA%D1%81%D0%B8%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE%D0%B6%D0%B8%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F&amp;diff=5773"/>
		<updated>2016-10-12T14:08:36Z</updated>

		<summary type="html">&lt;p&gt;Александр Куваев: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Авторы описания: Куваев А.С. и Щенявская Е.В.&lt;br /&gt;
&lt;br /&gt;
== Свойства и структура алгоритмов ==&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга.&lt;br /&gt;
&lt;br /&gt;
Решение этой задачи принципиально неоднозначно по следующим причинам:&lt;br /&gt;
# результат кластеризации зависит от способа задания меры сходства объектов выборки&lt;br /&gt;
# не существует однозначно наилучшего критерия качества кластеризации&lt;br /&gt;
# число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)&lt;br /&gt;
&lt;br /&gt;
На этой странице представлено описание одного из методов кластеризации — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt;. Таким образом, плотность распределения на множестве объектов имеет следующий вид:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \sum_{j=1}^{k}w_{j}=1, w_{j} \ge 0 &amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; - плотность распределения &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;-й компоненты смеси.&lt;br /&gt;
&lt;br /&gt;
В дальнейшем будем предполагать, что &amp;lt;math&amp;gt;p_{j}&amp;lt;/math&amp;gt; имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют приближать произвольные непрерывные функции плотности с наперед заданной точностью. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси &amp;lt;math&amp;gt;w_{j}&amp;lt;/math&amp;gt;, а также оценки векторов математических ожиданий и матриц ковариации для каждой компоненты.&lt;br /&gt;
&lt;br /&gt;
EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных &amp;lt;math&amp;gt;G&amp;lt;/math&amp;gt;. Алгоритм заключается в итерационном повторении шагов E(expectation) и M(maximization):&lt;br /&gt;
* На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных &amp;lt;math&amp;gt;g_{i,j}&amp;lt;/math&amp;gt; — апостериорные вероятности того, что &amp;lt;math&amp;gt;i&amp;lt;/math&amp;gt;-й объект принадлежит кластеру &amp;lt;math&amp;gt;j&amp;lt;/math&amp;gt;&lt;br /&gt;
* На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и вектора скрытых переменных&lt;br /&gt;
&lt;br /&gt;
=== Математическое описание алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;/div&gt;</summary>
		<author><name>Александр Куваев</name></author>
	</entry>
</feed>