Я пытаюсь понять алгоритм EM, чтобы иметь возможность его реализовать и использовать. Я провел целый день, читая теорию и документ, где EM используется для отслеживания самолета с использованием информации о местоположении, поступающей с радара. Честно говоря, я не думаю, что полностью понимаю основную идею. Может кто-нибудь указать мне на числовой пример, показывающий несколько итераций (3-4) EM для более простой задачи (например, оценки параметров гауссовского распределения или последовательности синусоидального ряда или подгонки линии).
Даже если кто-то может указать мне на кусок кода (с синтетическими данными), я могу попытаться пройтись по коду.
Ответы:
Это рецепт изучения EM на практическом и (на мой взгляд) очень интуитивном примере с Coin-Toss:
Прочитайте этот короткий учебник по EM от Do и Batzoglou. Это схема, где объясняется пример броска монеты:
У вас могут быть вопросительные знаки в вашей голове, особенно относительно того, откуда берутся вероятности на этапе Ожидания. Пожалуйста, ознакомьтесь с объяснениями на этой странице обмена стека математики .
Посмотрите / запустите этот код, который я написал на Python, который имитирует решение проблемы броска монеты, в учебном материале по EM из пункта 1:
источник
pA_heads[j+1]
иpA_heads[j]
и 2) изменение междуpB_heads[j+1]
иpB_heads[j]
. И это занимает максимум двух изменений. Например, еслиDelta_A=0.001
иDelta_B=0.02
улучшение от шагаj
кj+1
будет0.02
.delta
.Похоже, ваш вопрос состоит из двух частей: основной идеи и конкретного примера. Я начну с основной идеи, затем сошлюсь на пример внизу.
EM полезно в Catch-22 ситуаций , когда кажется , что вы должны знать , прежде чем можно вычислить , и вы должны знать , прежде чем можно вычислить .B B AA B B A
Наиболее распространенный случай, с которым сталкиваются люди, это, вероятно, смешанные распределения. Для нашего примера давайте рассмотрим простую модель гауссовой смеси:
А теперь ты застрял
Если бы вы знали истинное значение, вы могли бы выяснить, какие точки данных были получены с какой гауссианы. Например, если точка данных имела очень высокое значение, она, вероятно, была получена из распределения с более высоким средним значением. Но вы не знаете, каковы средства, поэтому это не сработает.
Если вы знали, из какого распределения пришла каждая точка, то вы могли бы оценить средние значения двух распределений, используя выборочные средние значения соответствующих точек. Но вы на самом деле не знаете, какие точки назначить какому распределению, так что это тоже не сработает.
Таким образом, ни один из подходов не выглядит так, как будто он работает: вам нужно знать ответ, прежде чем вы сможете найти ответ, и вы застряли.
Что EM позволяет вам делать, так это чередовать эти два поддающихся обработке шага вместо одновременного выполнения всего процесса.
Вам нужно начать с предположения о двух способах (хотя ваше предположение не обязательно должно быть очень точным, вам нужно с чего-то начинать).
Если ваше предположение о средстве было точным, то у вас было бы достаточно информации, чтобы выполнить шаг, описанный в моем первом пункте выше, и вы могли бы (вероятностно) назначить каждую точку данных одному из двух гауссиан. Хотя мы знаем, что наше предположение неверно, давайте все равно попробуем. И затем, учитывая назначенные распределения каждой точки, вы можете получить новые оценки для средних с использованием второй маркированной точки. Оказывается, что каждый раз, выполняя эти два шага, вы улучшаете нижнюю границу вероятности модели.
Это уже довольно круто: даже несмотря на то, что два предложения в пунктах выше не выглядят так, как будто они будут работать индивидуально, вы все равно можете использовать их вместе, чтобы улучшить модель. Настоящая магия ЕСТ является то, что после достаточно итераций, нижняя граница будет настолько высока , что не будет никакого пространства между ним и локальным максимумом. В результате и вы локально оптимизировали вероятность.
Таким образом, вы не просто улучшили модель, вы нашли лучшую возможную модель, которую можно найти с помощью дополнительных обновлений.
На этой странице из Википедии показан немного более сложный пример (двумерные гауссианы и неизвестная ковариация), но основная идея та же. Он также включает в себя хорошо прокомментированный
R
код для реализации примера.В коде шаг «Ожидание» (электронный шаг) соответствует моему первому пункту: выяснить, какой гауссов отвечает за каждую точку данных, учитывая текущие параметры для каждого гауссиана. Шаг «Максимизация» (M-шаг) обновляет средние значения и ковариации, учитывая эти назначения, как в моем втором пункте пули.
Как вы можете видеть из анимации, эти обновления быстро позволяют алгоритму перейти от набора ужасных оценок к набору очень хороших: на самом деле, похоже, существуют два облака точек с центром в двух гауссовых распределениях, которые находит EM.
источник
Вот пример максимизации ожидания (EM), используемой для оценки среднего значения и стандартного отклонения. Код написан на Python, но за ним должно быть легко следовать, даже если вы не знакомы с языком.
Мотивация для EM
Красные и синие точки, показанные ниже, взяты из двух разных нормальных распределений, каждое из которых имеет определенное среднее значение и стандартное отклонение:
Чтобы вычислить разумные аппроксимации «истинного» среднего значения и параметров стандартного отклонения для красного распределения, мы могли бы очень легко посмотреть на красные точки и записать положение каждой из них, а затем использовать знакомые формулы (и аналогично для синей группы) ,
Теперь рассмотрим случай, когда мы знаем, что есть две группы точек, но мы не можем видеть, какая точка принадлежит какой группе. Другими словами, цвета скрыты:
Совсем не очевидно, как разделить точки на две группы. Теперь мы не можем просто посмотреть на позиции и вычислить оценки для параметров красного или синего распределения.
Здесь EM может быть использован для решения проблемы.
Использование EM для оценки параметров
Вот код, используемый для генерации точек, показанных выше. Вы можете увидеть фактические средние и стандартные отклонения нормальных распределений, из которых были нарисованы точки. Переменные
red
иblue
содержат позиции каждой точки в красной и синей группах соответственно:Если бы мы могли видеть цвет каждой точки, мы попытались бы восстановить средние значения и стандартные отклонения, используя библиотечные функции:
Но так как цвета скрыты от нас, мы начнем процесс EM ...
Сначала мы просто угадываем значения для параметров каждой группы ( шаг 1 ). Эти догадки не должны быть хорошими:
Довольно плохие догадки - средства выглядят так, будто они далеки от любой «середины» группы точек.
Чтобы продолжить с EM и улучшить эти догадки, мы вычисляем вероятность того, что каждая точка данных (независимо от ее секретного цвета) появится под этими догадками для среднего и стандартного отклонения ( шаг 2 ).
Переменная
both_colours
содержит каждую точку данных. Функцияstats.norm
вычисляет вероятность точки при нормальном распределении с заданными параметрами:Это говорит нам, например, что с нашими текущими догадками точка данных в 1.761, скорее всего, будет красной (0.189), чем синей (0.00003).
Мы можем превратить эти два значения правдоподобия в веса ( шаг 3 ), чтобы они суммировали до 1 следующим образом:
С нашими текущими оценками и нашими недавно вычисленными весами мы можем теперь вычислить новые, возможно, лучшие оценки параметров ( шаг 4 ). Нам нужна функция для среднего значения и функция для стандартного отклонения:
Они выглядят очень похоже на обычные функции для среднего значения и стандартного отклонения данных. Разница заключается в использовании
weight
параметра, который присваивает вес каждой точке данных.Это взвешивание является ключом к EM. Чем больше вес цвета в точке данных, тем больше точка данных влияет на следующие оценки параметров этого цвета. В конечном итоге это приводит к вытягиванию каждого параметра в правильном направлении.
Новые догадки вычисляются с помощью этих функций:
Процесс ЭМ затем повторяется с этими новыми догадками, начиная с шага 2 и далее. Мы можем повторять шаги для заданного количества итераций (скажем, 20) или пока мы не увидим, что параметры сходятся.
После пяти итераций мы видим, что наши начальные плохие догадки начинают поправляться:
После 20 итераций процесс EM более или менее сходится:
Для сравнения, вот результаты EM-процесса по сравнению со значениями, вычисленными, когда информация о цвете не скрыта:
Примечание: этот ответ был адаптирован из моего ответа о переполнении стека здесь .
источник
После ответа Жубарба я реализовал пример EM и Doz Batzoglou «подбрасывание монет» в GNU R. Обратите внимание, что я использую
mle
функциюstats4
пакета - это помогло мне более четко понять, как связаны EM и MLE.источник
Все вышеперечисленное выглядит как замечательные ресурсы, но я должен сослаться на этот замечательный пример. Это представляет очень простое объяснение для нахождения параметров для двух линий набора точек. Учебник Яир Вайсс в то время как в Массачусетском технологическом институте.
http://www.cs.huji.ac.il/~yweiss/emTutorial.pdf
http://www.cs.huji.ac.il/~yweiss/tutorials.html
источник
Ответ, данный Жубарбом, великолепен, но, к сожалению, он написан на Python. Ниже приведена Java-реализация EM-алгоритма, выполненного для той же задачи (изложена в статье Do and Batzoglou, 2008). Я добавил несколько printf в стандартный вывод, чтобы увидеть, как сходятся параметры.
Код Java следует ниже:
источник
источник
Ну, я бы посоветовал вам прочитать книгу Марии Риццо о R. Одна из глав содержит использование алгоритма EM с числовым примером. Я помню, как просматривал код для лучшего понимания.
Кроме того, попробуйте просмотреть его с точки зрения кластеризации в начале. Разработайте вручную задачу кластеризации, где 10 наблюдений взяты из двух разных нормальных плотностей. Это должно помочь. Воспользуйтесь помощью R :)
источник
источник