Участник:Александр Куваев/Алгоритм кластеризации, основанный на максимизации ожидания

Материал из Алговики
Перейти к навигации Перейти к поиску
Файл:Symbol wait.svgЭта работа прошла предварительную проверку
Дата последней правки страницы:
01.11.2016
Данная работа соответствует формальным критериям.
Проверено Algoman.


Авторы описания:

  • Куваев А.С., группа 620 (математическая постановка задачи, схема реализации алгоритма, оценка сложности, описание ресурса параллелизма)
  • Щенявская Е.В., группа 616 (описание алгоритма, визуализация информационного графа и примера работы алгоритма, описание свойств алгоритма)

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

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

Задача кластеризации заключается в разбиении входного множества объектов на непересекающиеся подмножества, называемые кластерами, так, чтобы каждый кластер состоял из схожих объектов, а объекты разных кластеров существенно отличались друг от друга[1].

Решение этой задачи принципиально неоднозначно по следующим причинам[1]:

  1. результат кластеризации зависит от способа задания меры сходства объектов выборки
  2. не существует однозначно наилучшего критерия качества кластеризации
  3. число кластеров, как правило, неизвестно заранее и задается из некоторых априорных соображений (хотя существуют алгоритмы, способные определять число кластеров автоматически)

По описанной выше причине существует большое число алгоритмов кластеризации, приводящих к различным разбиениям исходного множества объектов. На этой странице представлено описание одного из таких методов — EM-алгоритма. EM-алгоритм опирается на предположение о вероятностной природе данных: элементы выборки получены случайно и независимо из смеси распределений с фиксированным числом компонент [math]\displaystyle{ k }[/math]. Таким образом, плотность распределения на множестве объектов имеет следующий вид:

[math]\displaystyle{ p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 }[/math], где [math]\displaystyle{ p_{j} }[/math] - плотность распределения [math]\displaystyle{ j }[/math]-й компоненты смеси (кластера).

Везде в дальнейшем будем предполагать, что [math]\displaystyle{ p_{j} }[/math] имеют вид многомерных нормальных плотностей с произвольной матрицей ковариации: смеси нормальных распределений позволяют аппроксимировать произвольные непрерывные функции плотности с наперед заданной точностью[2]. Результатом работы EM-алгоритма являются оценки априорных вероятностей компонент смеси [math]\displaystyle{ w_{j} }[/math], а также оценки векторов математических ожиданий и матриц ковариаций для каждой компоненты. Зная параметры распределения смеси, каждому объекту будет сопоставляться тот кластер, вероятность принадлежности к которому будет максимальной.

EM-алгоритм позволяет значительно упростить задачу максимизации правдоподобия выборки путем искусственного введения вспомогательной матрицы скрытых переменных [math]\displaystyle{ G }[/math]. Алгоритм заключается в последовательном повторении шагов E(expectation) и M(maximization):

  • На шаге E на основе текущего приближения параметров смеси по формуле Байеса вычисляются ожидаемые значения скрытых переменных [math]\displaystyle{ g_{ij} }[/math] — апостериорные вероятности того, что [math]\displaystyle{ i }[/math]-й объект принадлежит кластеру [math]\displaystyle{ j }[/math].
  • На шаге M решается задача максимизации правдоподобия для нахождения следующего приближения параметров смеси на основе текущего приближения и матрицы скрытых переменных, при этом решение этой задачи выписывается в явном виде.
Рисунок 1. Визуализация компонент смеси после некоторых итераций алгоритма в двумерном пространстве признаков. Для каждой компоненты эллипсами выделены доверительные области с уровнями доверия 0.9, 0.95 и 0.99.

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

Пусть заданы [math]\displaystyle{ l }[/math] объектов [math]\displaystyle{ x_{1},\dotsc,x_{l} }[/math], каждый из которых описывается [math]\displaystyle{ n }[/math] числовыми признаками. Таким образом, определена матрица объектов-признаков [math]\displaystyle{ X \in \R^{l \times n}. }[/math] Предполагается, что объекты выбраны случайно и независимо из смеси [math]\displaystyle{ n }[/math]-мерных нормальных распределений с фиксированным числом компонент [math]\displaystyle{ k }[/math]. Плотность распределения на множестве объектов имеет вид:

[math]\displaystyle{ p(x)=\sum_{j=1}^{k}w_{j}p_{j}(x), \ \sum_{j=1}^{k}w_{j}=1, \ w_{j} \ge 0 }[/math], где [math]\displaystyle{ p_{j} }[/math] - плотность распределения [math]\displaystyle{ j }[/math]-й компоненты смеси.

Каждая компонента смеси описывается [math]\displaystyle{ n }[/math]-мерным вектором математических ожиданий [math]\displaystyle{ \mu_{j} }[/math] и матрицей ковариаций [math]\displaystyle{ \Sigma_{j} }[/math] порядка [math]\displaystyle{ n }[/math], [math]\displaystyle{ j = 1,\dotsc,k }[/math].

Входные данные: матрица объектов-признаков [math]\displaystyle{ X }[/math], число кластеров [math]\displaystyle{ k }[/math], максимальное число итераций [math]\displaystyle{ imax }[/math], минимальная величина изменения логарифма правдоподобия [math]\displaystyle{ \varepsilon }[/math].

Выходные данные: набор оценок весов, математических ожиданий и ковариационных матриц компонент смеси [math]\displaystyle{ \theta = (w_{1},...,w_{k}; \; \mu_{1},...,\mu_{k}; \; \Sigma_{1},...,\Sigma_{k}) }[/math], максимизирующий правдоподобие выборки.

Структура алгоритма:

  • Инициализация параметров: существует большое число вариантов инициализации параметров распределения. Один из возможных подходов — задание векторов математических ожиданий компонент случайными элементами выборки, задание матриц ковариаций единичными матрицами и задание весов компонент равными [math]\displaystyle{ \frac{1}{k}. }[/math]
  • Последовательное выполнение шагов E и M до тех пор, пока правдоподобие выборки не стабилизируется или не будет достигнуто максимальное число итераций:
    • Шаг E: вычисление значений скрытых переменных по формуле Байеса:
    [math]\displaystyle{ g_{ij} = \frac{w_{j} p_{j}(x_{i})}{\sum_{s=1}^{k} w_{s} p_{s}(x_{i})} }[/math] , где [math]\displaystyle{ 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 }[/math]
    • Шаг M: перерасчет параметров смеси на основе текущего приближения и матрицы скрытых переменных:
    [math]\displaystyle{ w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij}, \ j = 1,\dotsc,k; }[/math]
    [math]\displaystyle{ \mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i}, \ j = 1,\dotsc,k; }[/math]
    [math]\displaystyle{ \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. }[/math]

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

Вычислительное ядро EM-алгоритма — процедура последовательного выполнения шагов E и M:

  • На шаге E на основе текущего приближения параметров смеси вычисляются ожидаемые значения скрытых переменных
  • На шаге M вычисляется следующее приближение параметров смеси на основе текущего приближения и матрицы скрытых переменных

Наиболее трудоемкой операцией с вычислительной точки зрения является шаг E, в ходе которого производится обращение ковариационных матриц, вычисление их определителей, а также многократное перемножение векторов и матриц при вычислении скрытых переменных.

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

Алгоритм состоит из двух итерационно проводимых макроопераций: E-шага и M-шага.

В ходе E-шага используется:

  • Обращение ковариационной матрицы и вычисление ее определителя
  • Умножение вектор-строки на матрицу и вектор-строки на вектор-столбец

В ходе M-шага используется:

  • Умножение вектор-столбца на вектор-строку
  • Взвешенное суммирование векторов и матриц

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

  1. Для всех [math]\displaystyle{ j = 1,\dotsc,k }[/math]:
    Инициализировать [math]\displaystyle{ w_{j}, \ \mu_{j}, \ \Sigma_{j} }[/math]
  2. Для всех [math]\displaystyle{ iter = 1,\dotsc,imax }[/math]:
    1. Шаг E:
      Для всех [math]\displaystyle{ j = 1,\dotsc,k }[/math]:
      Вычислить [math]\displaystyle{ |\Sigma_{j}|, \ \Sigma_{j}^{-1} }[/math]
      Для всех [math]\displaystyle{ i = 1,\dotsc,l }[/math]:
      [math]\displaystyle{ sum = 0 }[/math]
      Для всех [math]\displaystyle{ j = 1,\dotsc,k }[/math]:
      Вычислить [math]\displaystyle{ 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) }[/math]
      [math]\displaystyle{ sum = sum + w_{j}p_{j}(x_{i}) }[/math]
      Для всех [math]\displaystyle{ j = 1,\dotsc,k }[/math]:
      Вычислить [math]\displaystyle{ g_{ij} = \frac{w_{j} p_{j}(x_{i})}{sum} }[/math]
    2. Шаг M:
      Для всех [math]\displaystyle{ j = 1,\dotsc,k }[/math]:
      Вычислить [math]\displaystyle{ w_{j} = \frac{1}{l} \sum_{i=1}^{l} g_{ij} }[/math]
      Вычислить [math]\displaystyle{ \mu_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij} x_{i} }[/math]
      Вычислить [math]\displaystyle{ \Sigma_{j} = \frac{1}{l w_{j}} \sum_{i=1}^{l} g_{ij}(x_{i} - \mu_{j})(x_{i} - \mu_{j})^T }[/math]
    3. Вычислить изменения логарифма правдоподобия [math]\displaystyle{ \Delta }[/math]
    4. Если [math]\displaystyle{ \Delta \lt \varepsilon }[/math], то досрочно выйти из цикла
  3. Вернуть [math]\displaystyle{ w_{j}, \mu_{j}, \Sigma_{j}, \ j = 1,\dotsc,k. }[/math]

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

Рассмотрим мультипликативную сложность одной итерации алгоритма:

  • E-шаг:
    • Сложность обращения матрицы ковариаций и вычисления ее определителя — [math]\displaystyle{ O(n^{3}) }[/math] (для простоты будем рассматривать метод Гаусса)
    • Сложность вычисления расстояния Махаланобиса (показателя экспоненты) при вычислении значения каждой скрытой переменной — [math]\displaystyle{ O(n^{2}) }[/math]
    • Общая сложность E-шага — [math]\displaystyle{ O(k * n^{3} + k * l * n^{2}) }[/math]
  • M-шаг:
    • Сложность пересчета веса кластера — [math]\displaystyle{ O(l) }[/math]
    • Сложность пересчета центра кластера — [math]\displaystyle{ O(l * n) }[/math]
    • Сложность пересчета матрицы ковариаций кластера — [math]\displaystyle{ O(l * n) }[/math]
    • Общая сложность M-шага — [math]\displaystyle{ O(k * l * n) }[/math]

Таким образом, общая сложность одной итерации — [math]\displaystyle{ O(k * n^{2} * (l + n)) }[/math]. При учете ограничения на максимальное число итераций получим оценку общей сложности алгоритма — [math]\displaystyle{ O(imax * k * n^{2} * (l + n)) }[/math].

Большое влияние на сложность E-шага оказывает необходимость обращать ковариационные матрицы и вычислять их определители. Помимо того, что это трудоемкая операция, ковариационные матрицы могут оказаться плохо обусловленными, что может привести к неустойчивости выборочных оценок параметров смеси. Обращения матриц можно избежать, если принять гипотезу о том, что в каждой компоненте смеси признаки некоррелированы, то есть ковариационные матрицы диагональные. В таком случае общая сложность алгоритма составит [math]\displaystyle{ O(imax * k * n * l) }[/math].

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

На рисунках 2 и 3 представлены информационные графы[3] шагов E и M соответственно. Прямоугольниками обозначены входные данные (с пометкой in/out), эллипсами обозначены операции, производимые над данными согласно алгоритму.

Как видно из рисунка 2, E-шаг распадается на:

  • Обращение матриц ковариаций и вычисление их определителей
  • Независимый расчет скрытых переменных по каждому объекту
Рисунок 2. Граф шага E с отображением входных и выходных данных.

На рисунке 3 видно, что некоторые промежуточные вычисления на шаге M можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.

Рисунок 3. Граф шага M с отображением входных и выходных данных.

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

Из информационных графов на рисунках 2 и 3 видно, что:

  • Шаг E — наиболее ресурсоемкий этап алгоритма — эффективно распараллеливается по объектам после предварительного обращения матриц ковариаций и вычисления их определителей: при расчете скрытых переменных для фиксированного объекта информация о других объектах не используется. Также стоит отметить, что для всех объектов выполняется одна и та же последовательность действий. Таким образом, параллельная сложность E-шага — [math]\displaystyle{ O(k * n^{2}) }[/math].
  • Менее ресурсоемкий шаг M распараллеливается хуже: промежуточные вычисления можно проводить независимо для каждого объекта, но после этого придется проводить агрегацию полученных результатов по кластерам.

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

Входные данные: плотная матрица объектов-признаков [math]\displaystyle{ X \in \R^{l \times n} }[/math], число кластеров [math]\displaystyle{ k \in \N }[/math], максимальное число итераций [math]\displaystyle{ imax \in \N }[/math], минимальная величина изменения логарифма правдоподобия [math]\displaystyle{ \varepsilon \in \R }[/math].

Объём входных данных: [math]\displaystyle{ ln + 3 }[/math]

Выходные данные: вещественный вектор весов [math]\displaystyle{ w \in \R^{k} }[/math], [math]\displaystyle{ k }[/math] вещественных векторов математических ожиданий [math]\displaystyle{ \mu_{j} \in \R^{n} }[/math] и [math]\displaystyle{ k }[/math] вещественных ковариационных матриц [math]\displaystyle{ \Sigma_{j} \in \R^{n \times n} }[/math].

Объём выходных данных: [math]\displaystyle{ k(n^{2}+n+1) }[/math]

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

Вычислительная мощность EM-алгоритма в предположении о том, что [math]\displaystyle{ l \gg n }[/math] (это условие выполняется в подавляющем большинстве прикладных задач), оценивается величиной [math]\displaystyle{ O(imax * k * n) }[/math].

Достоинства EM-алгоритма:

  • Мощная математическая основа
  • Слабая чувствительность к выбросам
  • Быстрая сходимость при удачной инициализации параметров
  • Линейный рост сложности при увеличении количества объектов

Недостатки EM-алгоритма:

  • В классическом варианте не может самостоятельно определить количество компонент смеси
  • Трудоемкий и неустойчивый процесс обращения матриц ковариаций в случае несферических компонент смеси
  • Не является детерминированным: в начале работы происходит инициализация начальных параметров случайным образом
  • Не является устойчивым: результат работы сильно зависит от инициализации параметров. При неудачной инициализации может обладать низкой скоростью сходимости, может сойтись к локальному экстремуму или не сойтись вовсе

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

Особенности реализации последовательного алгоритма

Локальность данных и вычислений

Возможные способы и особенности параллельной реализации алгоритма

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

Динамические характеристики и эффективность реализации алгоритма

Выводы для классов архитектур

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

  1. scikit-learn(Python)
  2. OpenCV(C++/Python)
  3. MLPack(C++)
  4. Armadillo(C++)
  5. Matlab

Литература

  1. ↑ 1,0 1,1 Воронцов К.В., Математические методы обучения по прецедентам.
  2. ↑ Королёв В.Ю., ЕМ-алгоритм, его модификации и их применение к задаче разделения смесей вероятностных распределений. Теоретический обзор. - М.: ИПИРАН, 2007.
  3. ↑ Воеводин В.В., Воеводин Вл.В. Параллельные вычисления. - СПб.: БХВ-Петербург, 2002. - 608 с.