EM-алгоритм с последовательным добавлением компонент (пример)
Материал из MachineLearning.
(→Исходный код) |
|||
(22 промежуточные версии не показаны) | |||
Строка 1: | Строка 1: | ||
{{TOCright}} | {{TOCright}} | ||
- | '''EM-алгоритм с последовательным добавлением компонент''' — | + | '''EM-алгоритм с последовательным добавлением компонент''' — метод нахождения функции плотности объектов, представляющей смесь распределений. |
- | + | В тех случаях, когда "форму" класса не удаётся описать каким-либо одним распределением, можно попробовать описать её смесью <tex>k</tex> распределений, каждое из которых описывается функцией правдоподобия <tex>p_j(x)</tex>. | |
- | + | <center><tex>p(x) = \sum_{i=1}^k w_jp_j(x)</tex></center> | |
- | + | ||
- | < | + | <tex>w_j</tex> - априорная вероятность <tex>j</tex>-й компоненты. Функции правдоподобия принадлежат параметрическому семейству распределений <tex>\varphi(x; \theta)</tex> и отличаются только значениями параметра <tex>p_j(x) = \varphi(x; \theta_j)</tex> |
+ | |||
+ | ''Задача разделения смеси'' заключается в том, чтобы, имея выборку <tex>X^m</tex> случайных и независимых наблюдений из смеси <tex>p(x)</tex>, зная число <tex>k</tex> и функцию <tex>\varphi</tex>, оценить вектор параметров <tex>\Theta = (w_1,...,w_k,\theta_1,...,\theta_k)</tex> | ||
+ | |||
+ | В данной статье рассматривается смесь гауссовских распределений выборки. Предполагается, что произвольную функцию распределения можно представить в виде их линейной комбинации. Количество компонент смеси, т.е. число гауссианов в линейной комбинации, произвольно. | ||
+ | |||
+ | |||
+ | EM-алгоритм был предложен и исследован М.И.Шлезингером как инструмент для самопроизвольной классификации образов. Область его применения чрезвычайно широка: [[дискриминантный анализ]], [[кластеризация]], восстановление пропусков в данных, обработка сигналов и изображений. Алгоритм решает задачу [[исключающее или | исключающего или (XOR)]] | ||
== Постановка задачи == | == Постановка задачи == | ||
- | Задана выборка <tex>\{(\mathbf{x}_i,y_i)\}_{i=1}^ | + | Задана выборка <tex>\{(\mathbf{x}_i,y_i)\}_{i=1}^m</tex>, в которой <tex>X^m</tex> = <tex>\{\mathbf{x}_i\}_{i=1}^m</tex> - множество объектов, <tex>Y^m</tex> = <tex>\{\mathbf{y}_i\}_{i=1}^m</tex> - множество ответов. Предполагается, что на множестве объектов задана плотность распределения <tex>p(x)</tex>, представленная в виде смеси <tex>k</tex> гауссиан с параметрами <tex>\mu</tex> и <tex>\Sigma</tex>, |
<center><tex>p(x) = \sum_{i=1}^k w_jp_j(x) = \sum_{i=1}^k w_jN(x;\mu_j,\Sigma_j).</tex></center> | <center><tex>p(x) = \sum_{i=1}^k w_jp_j(x) = \sum_{i=1}^k w_jN(x;\mu_j,\Sigma_j).</tex></center> | ||
+ | <center><tex>N(x;\mu_j,\Sigma_j) = \frac{1}{\sqrt{(2\pi)^ndet\Sigma_j}}e^{-\frac{1}{2}(x-\mu_j)\Sigma_j^{-1}(x-\mu_j)^{T}}</tex></center> | ||
Задача разделения смеси заключается в том, чтобы, имея выборку <tex>X^m</tex> | Задача разделения смеси заключается в том, чтобы, имея выборку <tex>X^m</tex> | ||
- | |||
случайных и независимых наблюдений из смеси <tex>p(x)</tex> оценить вектор параметров <tex>\theta = (w_1,...,w_k,\mu_1,...,\mu_k,\Sigma_1,...,\Sigma_k)</tex> доставляющий максимум функции правдоподобия | случайных и независимых наблюдений из смеси <tex>p(x)</tex> оценить вектор параметров <tex>\theta = (w_1,...,w_k,\mu_1,...,\mu_k,\Sigma_1,...,\Sigma_k)</tex> доставляющий максимум функции правдоподобия | ||
- | <center><tex>Q(\Theta) = \ln\prod_{i=1}^mp(x_i|w,\mu,\Sigma) = \sum_{i=1}^m\ln\sum_{j=1}^kw_jp_j(x_i) \rightarrow max_{\Theta}</tex></center> | + | <center><tex>Q(\Theta) = \ln\prod_{i=1}^mp(x_i|w,\mu,\Sigma) = \sum_{i=1}^m\ln\sum_{j=1}^kw_jp_j(x_i) \rightarrow \max_{\Theta}</tex></center> |
== Алгоритм отыскания оптимальных параметров == | == Алгоритм отыскания оптимальных параметров == | ||
Строка 22: | Строка 28: | ||
по текущим значениям векторов <tex>G</tex> и <tex>\Theta</tex>. | по текущим значениям векторов <tex>G</tex> и <tex>\Theta</tex>. | ||
- | Если число компонент смеси заранее неизвестно, то применяется EM-алгоритм с последовательным добавлением компонент. | + | Если число компонент смеси заранее неизвестно, то применяется EM-алгоритм с последовательным добавлением компонент. Предположим, что смесь содержит одну компоненту (<tex>k=1</tex>) и проделаем алгоритм EM(<tex>X,1</tex>). Найдем плохо классифицированные элементы: Если функция правдоподобия на объекте меньше своего максимального значения в R раз, то добавим элемент ко множеству U. Параметр R выбирается на основании эвристических соображений, как правило <tex>R \in [2,10]</tex>. Множество U полагается пустым и увеличивается по мере добавления в него элементов. Если размер U оказался больше <tex>m_0</tex>, то считаем, что текущее распределение плохо описывает смесь. Текущее распределение определяется только числом компонент <tex>k</tex>. Увеличим |
- | < | + | его на единицу и запустим еще раз EM(<tex>X,k+1</tex>). Алгоритм остановится, когда число плохо классифицированных объектов будет меньше <tex>m_0</tex>. Этот параметр характеризует количество элементов, по которому можно восстановить гауссовское распределение. Как правило <tex>m_0 \geq 10</tex> |
+ | |||
*'''Вход:''' | *'''Вход:''' | ||
Строка 48: | Строка 55: | ||
Алгоритм тестируется на модельных и реальных данных. | Алгоритм тестируется на модельных и реальных данных. | ||
===Пример 1=== | ===Пример 1=== | ||
- | Рассмотрим пример на модельных данных. Выборка состоит из четырех классов. | + | Рассмотрим пример на модельных данных. Выборка состоит из четырех классов. Красный класс представляет собой смесь двух гауссовских распределений с диагональной и недиагональной матрицами ковариации. Остальные классы являются одним гауссовским рапределением. |
- | + | Дисперсия зеленого класса меньше дисперсий остальных, поэтому его элементы находятся ближе к центру. Дисперсия бирюзовых по одной координате больше, чем по другой, в результате чего класс визуально вытянулся. Центры классов располагаются близко, некоторые классы линейно неразделимы. | |
- | + | ||
<source lang="matlab"> | <source lang="matlab"> | ||
[X1, Y1] = gengaussdata(150, [0;0], [1/4,1/2]); | [X1, Y1] = gengaussdata(150, [0;0], [1/4,1/2]); | ||
Строка 80: | Строка 87: | ||
Качество обучения алгоритма проверяется на той же выборке. На правом рисунке кружками показаны полученные ответы, цвет отвечает за принадлежность к соответствующему классу. Центры классов, отмечены черным кружками. Алгоритм нашел восемь гауссовских распределений вместо четырех, причем одна из красных компонент описывается сразу 4 гауссианами, в то время как остальные компоненты выборки - одной. Этот факт говорит о том, что одна гауссиана плохо приближает данное распределение, и, для уменьшения числа ошибок, следует приблизить её большим числом гауссиан. | Качество обучения алгоритма проверяется на той же выборке. На правом рисунке кружками показаны полученные ответы, цвет отвечает за принадлежность к соответствующему классу. Центры классов, отмечены черным кружками. Алгоритм нашел восемь гауссовских распределений вместо четырех, причем одна из красных компонент описывается сразу 4 гауссианами, в то время как остальные компоненты выборки - одной. Этот факт говорит о том, что одна гауссиана плохо приближает данное распределение, и, для уменьшения числа ошибок, следует приблизить её большим числом гауссиан. | ||
Алгоритм допустил 16 ошибок, что на выборке из 820 элементов составляет менее 2%. | Алгоритм допустил 16 ошибок, что на выборке из 820 элементов составляет менее 2%. | ||
- | |||
===Пример 2=== | ===Пример 2=== | ||
- | В качестве второго примера возьмем два плохо разделимых класса. | + | В качестве второго примера возьмем два плохо разделимых класса. Центры классов находятся на расстоянии меньшем дисперсии каждого из них. Можно наблюдать синие элементы, расположенные ближе к центру красного класса, чем к центру своего. |
[[Изображение:twobadclasses.png|400px]] | [[Изображение:twobadclasses.png|400px]] | ||
- | |||
[[Изображение:twobadclasses_sorted.png|400px]] | [[Изображение:twobadclasses_sorted.png|400px]] | ||
<br/> | <br/> | ||
- | + | Алгоритм выделил четыре гауссовских распределения в синем классе. Благодаря этому, хорошо классифицировались некоторые синие элементы, находящиеся ближе к красному классу. | |
- | + | ||
=== Ирисы Фишера === | === Ирисы Фишера === | ||
Строка 122: | Строка 127: | ||
[[Изображение:Ireses_sorted¢ers.png|300px]] | [[Изображение:Ireses_sorted¢ers.png|300px]] | ||
- | Алгоритм хорошо отделил ирисы setosa от остальных, но допустил | + | Алгоритм хорошо отделил ирисы setosa от остальных, но допустил 30% ошибок при разделении ирисов versicolor и virginica. Это произошло потому, что алгоритм изначально решал задачу кластеризации и лишь потом задачу классификации, приписывая каждому кластеру номер наиболее хорошо приближаемого им класса. Для разделения последних двух классов можно использовать [[Линейный классификатор|линейные алгоритмы классификации]], либо решать с помощью [[EM алгоритм (пример)|EM-алгоритма]], используя все четыре признака. |
- | + | ||
- | последних двух классов можно использовать [[Линейный классификатор|линейные алгоритмы классификации]], либо решать с помощью [[EM алгоритм (пример)|EM-алгоритма]], используя все четыре признака. | + | |
== Исходный код == | == Исходный код == | ||
- | Скачать листинги алгоритмов можно здесь [http://mlalgorithms.svn.sourceforge.net/ | + | Скачать листинги алгоритмов можно здесь [http://mlalgorithms.svn.sourceforge.net/svnroot/mlalgorithms/Group674/Pavlov2009EMwithAdding] |
== Смотри также == | == Смотри также == | ||
* [[EM алгоритм (пример)|EM алгоритм]] | * [[EM алгоритм (пример)|EM алгоритм]] | ||
+ | * [[ЕМ-алгоритм, его модификации и обобщения]] | ||
* [[Метод ближайших соседей]] | * [[Метод ближайших соседей]] | ||
* [[Линейный классификатор]] | * [[Линейный классификатор]] | ||
Строка 136: | Строка 140: | ||
==Литература== | ==Литература== | ||
- | |||
*К. В. Воронцов, Лекции по статистическим (байесовским) алгоритмам классификации | *К. В. Воронцов, Лекции по статистическим (байесовским) алгоритмам классификации | ||
- | {{ | + | *Bishop C. - Pattern Recognition and Machine Learning (Springer, 2006) |
- | + | * [http://www.inference.phy.cam.ac.uk/mackay/itila/ The on-line textbook: Information Theory, Inference, and Learning Algorithms], by [[David J.C. MacKay]] includes simple examples of the EM-algorithm such as clustering using the soft K-means algorithm, and emphasizes the variational view of the EM-algorithm. | |
+ | *[[Журавлёв, Юрий Иванович]] Об алгебраическом подходе к решению задач распознавания или классификации // Проблемы кибернетики. 1978 Т. 33.С. 5–68. | ||
+ | *Jordan M. I., Xu L. Convergence results for the EM algorithm to mixtures of experts architectures: Tech. Rep. A.I. Memo No. 1458: MIT, Cambridge, MA, 1993. | ||
+ | *Шлезингер М., Главач В. Десять лекций по статистическому и структурному распознаванию. - Киев: Наукова думка, 2004. ISBN 966-00-0341-2 | ||
+ | *Шлезингер М. И. О самопроизвольном различении образов // Читающие автоматы. - Киев, Наукова думка, 1965 | ||
+ | |||
+ | {{ЗаданиеВыполнено|Кирилл Павлов|В.В.Стрижов|28 мая 2009|Pavlov99|Strijov}} | ||
- | + | [[Категория:Оценивание вероятностных распределений]] | |
- | + | [[Категория:Байесовская теория классификации]] | |
- | [[Категория: | + | [[Категория:Практика и вычислительные эксперименты]] |
- | [[Категория: | + |
Текущая версия
|
EM-алгоритм с последовательным добавлением компонент — метод нахождения функции плотности объектов, представляющей смесь распределений. В тех случаях, когда "форму" класса не удаётся описать каким-либо одним распределением, можно попробовать описать её смесью распределений, каждое из которых описывается функцией правдоподобия .
- априорная вероятность -й компоненты. Функции правдоподобия принадлежат параметрическому семейству распределений и отличаются только значениями параметра
Задача разделения смеси заключается в том, чтобы, имея выборку случайных и независимых наблюдений из смеси , зная число и функцию , оценить вектор параметров
В данной статье рассматривается смесь гауссовских распределений выборки. Предполагается, что произвольную функцию распределения можно представить в виде их линейной комбинации. Количество компонент смеси, т.е. число гауссианов в линейной комбинации, произвольно.
EM-алгоритм был предложен и исследован М.И.Шлезингером как инструмент для самопроизвольной классификации образов. Область его применения чрезвычайно широка: дискриминантный анализ, кластеризация, восстановление пропусков в данных, обработка сигналов и изображений. Алгоритм решает задачу исключающего или (XOR)
Постановка задачи
Задана выборка , в которой = - множество объектов, = - множество ответов. Предполагается, что на множестве объектов задана плотность распределения , представленная в виде смеси гауссиан с параметрами и ,
Задача разделения смеси заключается в том, чтобы, имея выборку случайных и независимых наблюдений из смеси оценить вектор параметров доставляющий максимум функции правдоподобия
Алгоритм отыскания оптимальных параметров
Оптимальные параметры отыскиваются последовательно с помощью EM-алгоритма. Идея заключается во введении вспомогательного вектора скрытых переменных , обладающего двумя замечательными свойствами. С одной стороны, он может быть вычислен, если известны значения вектора параметров , с другой стороны, поиск максимума правдоподобия сильно упрощается, если известны значения скрытых переменных. EM-алгоритм состоит из итерационного повторения двух шагов. На E-шаге вычисляется ожидаемое значение (expectation) вектора скрытых переменных по текущему приближению вектора параметров . На М-шаге решается задача максимизации правдоподобия (maximization) и находится следующее приближение вектора по текущим значениям векторов и .
Если число компонент смеси заранее неизвестно, то применяется EM-алгоритм с последовательным добавлением компонент. Предположим, что смесь содержит одну компоненту () и проделаем алгоритм EM(). Найдем плохо классифицированные элементы: Если функция правдоподобия на объекте меньше своего максимального значения в R раз, то добавим элемент ко множеству U. Параметр R выбирается на основании эвристических соображений, как правило . Множество U полагается пустым и увеличивается по мере добавления в него элементов. Если размер U оказался больше , то считаем, что текущее распределение плохо описывает смесь. Текущее распределение определяется только числом компонент . Увеличим его на единицу и запустим еще раз EM(). Алгоритм остановится, когда число плохо классифицированных объектов будет меньше . Этот параметр характеризует количество элементов, по которому можно восстановить гауссовское распределение. Как правило
- Вход:
Выборка ; - максимальный допустимый разброс правдоподобия объектов; - минимальная длина выборки, по которой можно восстановить плотность; - параметр критерия останова;
- Выход:
- число компонент смеси;
- Алгоритм
1. начальное приближение - одна компонента:
2. для всех
3. выделить объекты с низким правдоподобием
4. Если то выход из цикла по
5. Начальное приближение для компоненты:
6.
Вычислительный эксперимент
Алгоритм тестируется на модельных и реальных данных.
Пример 1
Рассмотрим пример на модельных данных. Выборка состоит из четырех классов. Красный класс представляет собой смесь двух гауссовских распределений с диагональной и недиагональной матрицами ковариации. Остальные классы являются одним гауссовским рапределением. Дисперсия зеленого класса меньше дисперсий остальных, поэтому его элементы находятся ближе к центру. Дисперсия бирюзовых по одной координате больше, чем по другой, в результате чего класс визуально вытянулся. Центры классов располагаются близко, некоторые классы линейно неразделимы.
[X1, Y1] = gengaussdata(150, [0;0], [1/4,1/2]); [X2, Y2] = gengaussdata(150, [4;0], [1 5/6;5/6 1]); [X4, Y4] = gengaussdata(120, [2;4], [1/10;1/10]); [X3, Y3] = gengaussdata(200, [-2,2], [1/3, 1/3]); [X5, Y5] = gengaussdata(200, [2,2], [1.25, 1/20]); X=[X1;X2;X3;X4;X5]; %Y are answers (numbers of classes) Y=[Y1;Y2;Y3+1;Y4+2;Y5+3]; hold off drawdata(X,Y,'*'); %learning algorithm [W,M,Sigma,k,Ytheta] = emlearn(X, Y, [2,40,0.001]) %testing and geting answers from algorithm [Yanswer] = emtest(X, M, Sigma, Ytheta); drawdata(X,Yanswer,'o'); %printing centers of classes according to algorithm decision printcenters(M);
Истинное распределение классов показано на рисунке слева. Одинаковым цветом помечены элементы одного класса. Как можно заметить, некоторые представители "красных", "бирюзовых" и "синих" перемешались.
Качество обучения алгоритма проверяется на той же выборке. На правом рисунке кружками показаны полученные ответы, цвет отвечает за принадлежность к соответствующему классу. Центры классов, отмечены черным кружками. Алгоритм нашел восемь гауссовских распределений вместо четырех, причем одна из красных компонент описывается сразу 4 гауссианами, в то время как остальные компоненты выборки - одной. Этот факт говорит о том, что одна гауссиана плохо приближает данное распределение, и, для уменьшения числа ошибок, следует приблизить её большим числом гауссиан. Алгоритм допустил 16 ошибок, что на выборке из 820 элементов составляет менее 2%.
Пример 2
В качестве второго примера возьмем два плохо разделимых класса. Центры классов находятся на расстоянии меньшем дисперсии каждого из них. Можно наблюдать синие элементы, расположенные ближе к центру красного класса, чем к центру своего.
Алгоритм выделил четыре гауссовских распределения в синем классе. Благодаря этому, хорошо классифицировались некоторые синие элементы, находящиеся ближе к красному классу.
Ирисы Фишера
Проверку алгоритма проведем на классической задаче: Ирисы Фишера Объектами являются три типа ирисов: setosa, versicolor, virginica
У каждого объекта есть четыре признака: длина лепестка, ширина лепестка, длина чашелистика, ширина чашелистика. Для удобства визуализации результатов будем использовать первые два признака.
load 'iris2.data' X = iris2(:,[3,4]); Y = [ones([50,1]);2*ones([50,1]);3*ones([50,1])]; hold off drawdata(X,Y,'*'); title('Irises classification') xlabel('petal width, cm'); ylabel('petal length, cm'); legend('Iris Setosa','Iris Versicolour','Iris Virginica','Location','NorthWest'); [W,M,Sigma,k,Ytheta] = emlearn(X, Y, [2,20,0.0005]) [Yanswer] = emtest(X, M, Sigma, Ytheta); drawdata(X,Yanswer,'o')
Алгоритм хорошо отделил ирисы setosa от остальных, но допустил 30% ошибок при разделении ирисов versicolor и virginica. Это произошло потому, что алгоритм изначально решал задачу кластеризации и лишь потом задачу классификации, приписывая каждому кластеру номер наиболее хорошо приближаемого им класса. Для разделения последних двух классов можно использовать линейные алгоритмы классификации, либо решать с помощью EM-алгоритма, используя все четыре признака.
Исходный код
Скачать листинги алгоритмов можно здесь [1]
Смотри также
- EM алгоритм
- ЕМ-алгоритм, его модификации и обобщения
- Метод ближайших соседей
- Линейный классификатор
- Многомерная случайная величина
Литература
- К. В. Воронцов, Лекции по статистическим (байесовским) алгоритмам классификации
- Bishop C. - Pattern Recognition and Machine Learning (Springer, 2006)
- The on-line textbook: Information Theory, Inference, and Learning Algorithms, by David J.C. MacKay includes simple examples of the EM-algorithm such as clustering using the soft K-means algorithm, and emphasizes the variational view of the EM-algorithm.
- Журавлёв, Юрий Иванович Об алгебраическом подходе к решению задач распознавания или классификации // Проблемы кибернетики. 1978 Т. 33.С. 5–68.
- Jordan M. I., Xu L. Convergence results for the EM algorithm to mixtures of experts architectures: Tech. Rep. A.I. Memo No. 1458: MIT, Cambridge, MA, 1993.
- Шлезингер М., Главач В. Десять лекций по статистическому и структурному распознаванию. - Киев: Наукова думка, 2004. ISBN 966-00-0341-2
- Шлезингер М. И. О самопроизвольном различении образов // Читающие автоматы. - Киев, Наукова думка, 1965
Данная статья была создана в рамках учебного задания.
См. также методические указания по использованию Ресурса MachineLearning.ru в учебном процессе. |