exponenta event banner

fitgmdist

Соответствие модели смеси Гаусса данным

Описание

пример

GMModel = fitgmdist(X,k) возвращает модель распределения гауссовой смеси (GMModel) с k компоненты, подогнанные к данным (X).

пример

GMModel = fitgmdist(X,k,Name,Value) возвращает модель распределения гауссовой смеси с дополнительными опциями, заданными одним или несколькими Name,Value аргументы пары.

Например, можно указать значение регуляризации или тип ковариации.

Примеры

свернуть все

Создание данных из смеси двух двумерных гауссовых распределений.

mu1 = [1 2];
Sigma1 = [2 0; 0 0.5];
mu2 = [-3 -5];
Sigma2 = [1 0;0 1];
rng(1); % For reproducibility
X = [mvnrnd(mu1,Sigma1,1000); mvnrnd(mu2,Sigma2,1000)];

Поместите модель гауссовой смеси. Укажите, что существует два компонента.

GMModel = fitgmdist(X,2);

Постройте график данных на соответствующих контурах модели гауссовой смеси.

figure
y = [zeros(1000,1);ones(1000,1)];
h = gscatter(X(:,1),X(:,2),y);
hold on
gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(GMModel,[x0 y0]),x,y);
g = gca;
fcontour(gmPDF,[g.XLim g.YLim])
title('{\bf Scatter Plot and Fitted Gaussian Mixture Contours}')
legend(h,'Model 0','Model1')
hold off

Figure contains an axes. The axes with title {\bf Scatter Plot and Fitted Gaussian Mixture Contours} contains 3 objects of type line, functioncontour. These objects represent Model 0, Model1.

Создание данных из смеси двух двумерных гауссовых распределений. Создайте третий предиктор, который является суммой первого и второго предикторов.

mu1 = [1 2];
Sigma1 = [1 0; 0 1];
mu2 = [3 4];
Sigma2 = [0.5 0; 0 0.5];
rng(3); % For reproducibility
X1 = [mvnrnd(mu1,Sigma1,100);mvnrnd(mu2,Sigma2,100)];
X = [X1,X1(:,1)+X1(:,2)];

Столбцы X линейно зависимы. Это может привести к плохо обусловленным оценкам ковариации.

Подберите модель гауссовой смеси к данным. Вы можете использовать try / catch для управления сообщениями об ошибках.

rng(1); % Reset seed for common start values
try
    GMModel = fitgmdist(X,2)
catch exception
    disp('There was an error fitting the Gaussian mixture model')
    error = exception.message
end
There was an error fitting the Gaussian mixture model
error = 
'Ill-conditioned covariance created at iteration 3.'

Оценки ковариации плохо обусловлены. Следовательно, оптимизация прекращается, и появляется ошибка.

Снова установите модель гауссовой смеси, но используйте регуляризацию.

rng(3); % Reset seed for common start values
GMModel = fitgmdist(X,2,'RegularizationValue',0.1)
GMModel = 

Gaussian mixture distribution with 2 components in 3 dimensions
Component 1:
Mixing proportion: 0.536725
Mean:    2.8831    3.9506    6.8338

Component 2:
Mixing proportion: 0.463275
Mean:    0.8813    1.9758    2.8571

В этом случае алгоритм сходится к решению из-за регуляризации.

Гауссовы модели смесей требуют, чтобы перед подгонкой к данным было указано количество компонентов. Для многих приложений может быть трудно узнать соответствующее количество компонентов. В этом примере показано, как исследовать данные и попытаться получить начальное предположение о количестве компонентов с помощью анализа основных компонентов.

Загрузите набор данных радужки Фишера.

load fisheriris
classes = unique(species)
classes = 3x1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Набор данных содержит три класса видов радужки. Анализ продолжается так, как будто это неизвестно.

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

[~,score] = pca(meas,'NumComponents',2);

Подгоните три модели смеси Гаусса к данным, указав компоненты 1, 2 и 3. Увеличение числа итераций оптимизации до 1000. Используйте точечную нотацию для хранения окончательных оценок параметров. По умолчанию программное обеспечение полностью соответствует различным ковариациям для каждого компонента.

GMModels = cell(3,1); % Preallocation
options = statset('MaxIter',1000);
rng(1); % For reproducibility

for j = 1:3
    GMModels{j} = fitgmdist(score,j,'Options',options);
    fprintf('\n GM Mean for %i Component(s)\n',j)
    Mu = GMModels{j}.mu
end
 GM Mean for 1 Component(s)
Mu = 1×2
10-14 ×

    0.1044   -0.0429

 GM Mean for 2 Component(s)
Mu = 2×2

    1.3212   -0.0954
   -2.6424    0.1909

 GM Mean for 3 Component(s)
Mu = 3×2

    0.4856   -0.1287
    1.4484   -0.0904
   -2.6424    0.1909

GMModels - массив ячеек, содержащий три gmdistribution модели. Средства в трех компонентных моделях различны, что позволяет предположить, что модель различает три вида радужки.

Постройте графики по границам подогнанной модели гауссовой смеси. Поскольку набор данных включает метки, используйте gscatter для различения истинного числа компонентов.

figure
for j = 1:3
    subplot(2,2,j)
    h1 = gscatter(score(:,1),score(:,2),species);
    h = gca;
    hold on
    gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(GMModels{j},[x0 y0]),x,y);
    fcontour(gmPDF,[h.XLim h.YLim],'MeshDensity',100)
    title(sprintf('GM Model - %i Component(s)',j));
    xlabel('1st principal component');
    ylabel('2nd principal component');
    if(j ~= 3)
        legend off;
    end
    hold off
end
g = legend(h1);
g.Position = [0.7 0.25 0.1 0.1];

Figure contains 3 axes. Axes 1 with title GM Model - 1 Component(s) contains 4 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica. Axes 2 with title GM Model - 2 Component(s) contains 4 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica. Axes 3 with title GM Model - 3 Component(s) contains 4 objects of type line, functioncontour. These objects represent setosa, versicolor, virginica.

Трехкомпонентная модель гауссовой смеси в сочетании с РСА выглядит так, будто различает три вида радужки.

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

  • Сравнение нескольких моделей с различным количеством компонентов с использованием информационных критериев, например, AIC или BIC.

  • Оценка количества кластеров с помощью evalclusters, который поддерживает критерий Калински-Харабаша и статистику разрыва или другие критерии.

Гауссовы модели смесей требуют, чтобы перед подгонкой к данным было указано количество компонентов. Для многих приложений может быть трудно узнать соответствующее количество компонентов. В этом примере используется статистика соответствия AIC, которая помогает выбрать наиболее подходящую модель гауссовой смеси для различных компонентов.

Создание данных из смеси двух двумерных гауссовых распределений.

mu1 = [1 1];
Sigma1 = [0.5 0; 0 0.5];
mu2 = [2 4];
Sigma2 = [0.2 0; 0 0.2];
rng(1);
X = [mvnrnd(mu1,Sigma1,1000);mvnrnd(mu2,Sigma2,1000)];

plot(X(:,1),X(:,2),'ko')
title('Scatter Plot')
xlim([min(X(:)) max(X(:))]) % Make axes have the same scale
ylim([min(X(:)) max(X(:))])

Figure contains an axes. The axes with title Scatter Plot contains an object of type line.

Предполагая, что вы не знаете базовых значений параметров, графики рассеяния предполагают:

  • Существует два компонента.

  • Различия между кластерами различны.

  • Дисперсия внутри кластеров одинакова.

  • В кластерах нет ковариации.

Поместите двухкомпонентную модель гауссовой смеси. На основе проверки графика рассеяния укажите, что ковариационные матрицы являются диагональными. Распечатайте окончательную итерацию и статистику средств к существованию в командном окне, передав statset структура как значение Options аргумент пары имя-значение.

options = statset('Display','final');
GMModel = fitgmdist(X,2,'CovarianceType','diagonal','Options',options);
11 iterations, log-likelihood = -4787.38

GMModel является встроенным gmdistribution модель.

Осмотрите АПК на различное количество компонентов.

AIC = zeros(1,4);
GMModels = cell(1,4);
options = statset('MaxIter',500);
for k = 1:4
    GMModels{k} = fitgmdist(X,k,'Options',options,'CovarianceType','diagonal');
    AIC(k)= GMModels{k}.AIC;
end

[minAIC,numComponents] = min(AIC);
numComponents
numComponents = 2
BestModel = GMModels{numComponents}
BestModel = 

Gaussian mixture distribution with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.501719
Mean:    1.9824    4.0013

Component 2:
Mixing proportion: 0.498281
Mean:    0.9880    1.0511

Наименьшая AIC возникает, когда программное обеспечение подходит под двухкомпонентную модель гауссовой смеси.

Оценки параметров модели гауссовой смеси могут изменяться с различными исходными значениями. В этом примере показано, как управлять начальными значениями при подгонке гауссовых моделей смесей с помощью fitgmdist.

Загрузите набор данных радужки Фишера. Используйте длины и ширину лепестков в качестве предикторов.

load fisheriris
X = meas(:,3:4);

Поместите модель смеси по Гауссу в данные, используя начальные значения по умолчанию. Существует три вида радужки, поэтому укажите k = 3 компонента.

rng(10); % For reproducibility
GMModel1 = fitgmdist(X,3);

По умолчанию программное обеспечение:

  1. Реализует k-means + + Алгоритм инициализации для выбора k = 3 начальных центров кластера.

  2. Устанавливает начальные ковариационные матрицы диагональными, где элемент (j, j) является дисперсией X(:,j).

  3. Рассматривает исходные пропорции смешивания как однородные.

Поместите модель гауссовой смеси, соединив каждое наблюдение со своей меткой.

y = ones(size(X,1),1);
y(strcmp(species,'setosa')) = 2;
y(strcmp(species,'virginica')) = 3;

GMModel2 = fitgmdist(X,3,'Start',y);

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

Mu = [1 1; 2 2; 3 3];
Sigma(:,:,1) = [1 1; 1 2];
Sigma(:,:,2) = 2*[1 1; 1 2];
Sigma(:,:,3) = 3*[1 1; 1 2];
PComponents = [1/2,1/4,1/4];
S = struct('mu',Mu,'Sigma',Sigma,'ComponentProportion',PComponents);

GMModel3 = fitgmdist(X,3,'Start',S);

Использовать gscatter для построения диаграммы рассеяния, которая различает виды радужки. Для каждой модели постройте график соответствующих контуров модели гауссовой смеси.

figure
subplot(2,2,1)
h = gscatter(X(:,1),X(:,2),species,[],'o',4);
haxis = gca;
xlim = haxis.XLim;
ylim = haxis.YLim;
d = (max([xlim ylim])-min([xlim ylim]))/1000;
[X1Grid,X2Grid] = meshgrid(xlim(1):d:xlim(2),ylim(1):d:ylim(2));
hold on
contour(X1Grid,X2Grid,reshape(pdf(GMModel1,[X1Grid(:) X2Grid(:)]),...
    size(X1Grid,1),size(X1Grid,2)),20)
uistack(h,'top')
title('{\bf Random Initial Values}');
xlabel('Sepal length');
ylabel('Sepal width');
legend off;
hold off
subplot(2,2,2)
h = gscatter(X(:,1),X(:,2),species,[],'o',4);
hold on
contour(X1Grid,X2Grid,reshape(pdf(GMModel2,[X1Grid(:) X2Grid(:)]),...
    size(X1Grid,1),size(X1Grid,2)),20)
uistack(h,'top')
title('{\bf Initial Values from Labels}');
xlabel('Sepal length');
ylabel('Sepal width');
legend off
hold off
subplot(2,2,3)
h = gscatter(X(:,1),X(:,2),species,[],'o',4);
hold on
contour(X1Grid,X2Grid,reshape(pdf(GMModel3,[X1Grid(:) X2Grid(:)]),...
    size(X1Grid,1),size(X1Grid,2)),20)
uistack(h,'top')
title('{\bf Initial Values from the Structure}');
xlabel('Sepal length');
ylabel('Sepal width');
legend('Location',[0.7,0.25,0.1,0.1]);
hold off

Figure contains 3 axes. Axes 1 with title {\bf Random Initial Values} contains 4 objects of type contour, line. These objects represent virginica, versicolor, setosa. Axes 2 with title {\bf Initial Values from Labels} contains 4 objects of type contour, line. These objects represent virginica, versicolor, setosa. Axes 3 with title {\bf Initial Values from the Structure} contains 4 objects of type contour, line. These objects represent virginica, versicolor, setosa.

По контурам, GMModel2 кажется, предполагает небольшую тримодальность, в то время как другие предполагают бимодальные распределения.

Отображение оцененных значений компонентов.

table(GMModel1.mu,GMModel2.mu,GMModel3.mu,'VariableNames',...
    {'Model1','Model2','Model3'})
ans=3×3 table
         Model1               Model2              Model3     
    _________________    ________________    ________________

    5.2115     2.0119    4.2857    1.3339    1.4604    0.2429
     1.461    0.24423     1.462     0.246    4.7509    1.4629
    4.6829     1.4429    5.5507    2.0316    5.0158    1.8592

GMModel2 кажется, что лучше всего различают виды радужки.

Входные аргументы

свернуть все

Данные, которым соответствует модель смеси Гаусса, заданная как числовая матрица.

Строки X соответствуют наблюдениям и столбцам X соответствуют переменным. Количество наблюдений должно быть больше каждого из следующих: количество переменных и количество компонентов.

NaNs указывает на отсутствие значений. Программа удаляет строки X содержащий, по крайней мере, один NaN перед подгонкой, что уменьшает эффективный размер выборки.

Типы данных: single | double

Число компонентов, используемых при подборе гауссовой модели смеси, указанное как положительное целое число. Например, при указании k = 3, то программное обеспечение подходит для модели гауссовой смеси с тремя различными средствами, матрицами ковариаций и пропорциями компонентов к данным (X).

Типы данных: single | double

Аргументы пары «имя-значение»

Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.

Пример: 'RegularizationValue',0.1,'CovarianceType','diagonal' задает значение параметра регуляризации 0,1 и подгоняет диагональные ковариационные матрицы.

Тип ковариационной матрицы для соответствия данным, определяемый как разделенная запятыми пара, состоящая из 'CovarianceType' и либо 'diagonal' или 'full'.

Если установить 'diagonal', то программное обеспечение подходит для диагональных ковариационных матриц. В этом случае программное обеспечение оценивает k*d ковариационные параметры, где d - количество столбцов в X (т.е. d = size(X,2)).

В противном случае программное обеспечение полностью подходит для ковариационных матриц. В этом случае программное обеспечение оценивает k*d*(d+1)/2 ковариационные параметры.

Пример: 'CovarianceType','diagonal'

Опции оптимизации итерационного алгоритма EM, заданные как разделенная запятыми пара, состоящая из 'Options' и statset структура опций.

В этой таблице описаны доступные аргументы пары имя-значение.

ИмяСтоимость
'Display'

'final'Показать окончательный вывод.

'iter': Отображение итеративных выходных данных в окне команд для некоторых функций; в противном случае выведите окончательный результат.

'off': Не отображать информацию об оптимизации.

'MaxIter'Положительное целое число, указывающее максимальное допустимое число итераций. Значение по умолчанию: 100
'TolFun'Положительный скаляр, указывающий допуск окончания для значения функции loglikeliquity. Значение по умолчанию: 1e-6.

Пример: 'Options',statset('Display','final','MaxIter',1500,'TolFun',1e-5)

Допуск для задних вероятностей, определяемый как пара, разделенная запятыми, состоящая из ProbabilityTolerance и неотрицательное скалярное значение в диапазоне [0,1e-6].

В каждой итерации, после оценки задних вероятностей, fitgmdist устанавливает любую заднюю вероятность, которая не больше значения допуска, равной нулю. Использование ненулевого допуска может ускорить fitgmdist.

Пример: 'ProbabilityTolerance',0.0000025

Типы данных: single | double

Значение параметра регуляризации, указанное как пара, разделенная запятыми, состоящая из 'RegularizationValue' и неотрицательный скаляр.

Набор RegularizationValue к малому положительному скаляру, чтобы гарантировать, что оцененные ковариационные матрицы являются положительными определенными.

Пример: 'RegularizationValue',0.01

Типы данных: single | double

Количество повторений алгоритма EM с использованием нового набора начальных значений, заданного как пара, разделенная запятыми, состоящая из 'Replicates' и положительное целое число.

Если Replicates больше, чем 1, то:

  • Аргумент пары имя-значение Start должно быть plus (значение по умолчанию) или randSample.

  • GMModel подходит с самым большим источником средств к существованию.

Пример: 'Replicates',10

Типы данных: single | double

Флаг, указывающий, являются ли все ковариационные матрицы идентичными (т.е. соответствуют объединенной оценке), указанный как пара, разделенная запятыми, состоящая из 'SharedCovariance' и либо логическое значение false или true.

Если SharedCovariance является true, тогда все k ковариационные матрицы равны, а количество ковариационных параметров масштабируется в множитель k.

Метод установки начального значения, заданный как разделенная запятыми пара, состоящая из 'Start' и 'randSample', 'plus'вектор целых чисел или структурный массив.

Значение Start определяет начальные значения, требуемые программой оптимизации для каждого гауссова параметра компонента - среднего значения, ковариации и пропорции смешения. В этой таблице представлены доступные параметры.

СтоимостьОписание
'randSample'Программа выбирает k наблюдения из X случайным образом в качестве начального компонентного средства. Пропорции смешивания однородны. Начальные ковариационные матрицы для всех компонентов диагональны, где элемент j на диагонали - дисперсия X(:,j).
'plus'Программа выбирает k наблюдения из X используя алгоритм k-means + +. Исходные пропорции смешивания являются однородными. Начальные ковариационные матрицы для всех компонентов диагональны, где элементj на диагонали - дисперсия X(:,j).
Вектор целых чисел Вектор длиной n (количество наблюдений), содержащий начальное предположение индекса компонента для каждой точки. То есть каждый элемент является целым числом от 1 до k, что соответствует компоненту. Программное обеспечение собирает все наблюдения, соответствующие одному и тому же компоненту, вычисляет средства, ковариации и пропорции смешения для каждого и устанавливает начальные значения для этих статистических данных.
Структурный массив

Предположим, что есть d переменные (т.е. d = size(X,2)). Структурный массив, например, S, должно иметь три поля:

  • S.mu: A kоколо-d матрица, определяющая начальное среднее для каждого компонента

  • S.SigmaЧисловой массив, определяющий ковариационную матрицу каждого компонента. Sigma является одним из следующих:

    • A dоколо-dоколо-k массив. Sigma(:,:,j) - начальная ковариационная матрица компонента j.

    • A 1около-dоколо-k массив. diag(Sigma(:,:,j)) - начальная ковариационная матрица компонента j.

    • A dоколо-d матрица. Sigma - начальная ковариационная матрица для всех компонентов.

    • A 1около-d вектор. diag(Sigma) - начальная ковариационная матрица для всех компонентов.

  • S.ComponentProportion: A 1около-k вектор скаляров, задающий начальные пропорции смешения каждого компонента. Значение по умолчанию - uniform.

Пример: 'Start',ones(n,1)

Типы данных: single | double | char | string | struct

Выходные аргументы

свернуть все

Подогнанная модель гауссовой смеси, возвращенная как gmdistribution модель.

Свойства доступа GMModel с использованием точечной нотации. Например, просмотрите AIC путем ввода GMModel.AIC.

Совет

fitgmdist может:

  • Сходятся к решению, где один или несколько компонентов имеют плохо обусловленную или сингулярную ковариационную матрицу.

    Следующие проблемы могут привести к плохо обусловленной ковариационной матрице:

    • Количество измерений данных относительно велико, и наблюдений недостаточно.

    • Некоторые из предикторов (переменных) ваших данных сильно коррелированы.

    • Некоторые или все функции являются дискретными.

    • Была предпринята попытка поместить данные в слишком много компонентов.

    В целом, вы можете избежать получения плохо кондиционированных ковариационных матриц, используя одну из следующих мер предосторожности:

    • Выполните предварительную обработку данных для удаления коррелированных элементов.

    • Набор 'SharedCovariance' кому true для использования равной ковариационной матрицы для каждого компонента.

    • Набор 'CovarianceType' кому 'diagonal'.

    • Использовать 'RegularizationValue' чтобы добавить очень маленькое положительное число к диагонали каждой ковариационной матрицы.

    • Попробуйте использовать другой набор начальных значений.

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

Алгоритмы

свернуть все

Оптимизация правдоподобия модели гауссовой смеси

Программное обеспечение оптимизирует вероятность модели смеси Гаусса с помощью итеративного алгоритма ожидания-максимизации (EM).

fitgmdist подгоняет GMM к данным с использованием итеративного алгоритма ожидания-максимизации (EM). Используя начальные значения для составляющих, ковариационных матриц и пропорций смешения, алгоритм ЭМ продолжает использовать эти шаги.

  1. Для каждого наблюдения алгоритм вычисляет апостериорные вероятности членств компонентов. Можно представить результат как матрицу n-by-k, где элемент (i, j) содержит заднюю вероятность того, что наблюдение i находится из компонента j. Это E-шаг алгоритма EM.

  2. Используя апостериорные вероятности компонента-членства в качестве весов, алгоритм оценивает средства компонента, ковариационные матрицы и пропорции смешения путем применения максимального правдоподобия. Это M-шаг алгоритма EM.

Алгоритм выполняет итерацию по этим шагам до сходимости. Поверхность правдоподобия сложна, и алгоритм может сходиться к локальному оптимуму. Кроме того, результирующий локальный оптимум может зависеть от начальных условий. fitgmdist имеет несколько вариантов выбора начальных условий, включая случайные назначения компонентов для наблюдений и алгоритм k-means + + .

k-means + + Алгоритм инициализации

Алгоритм k-means + + использует эвристику, чтобы найти начальные числа центроидов для кластеризации k-means.fitgmdist может применять тот же принцип для инициализации алгоритма EM с использованием алгоритма k-means + + для выбора начальных значений параметров для подогнанной модели гауссовой смеси.

Алгоритм k-means + + предполагает, что число кластеров равно k, и выбирает начальные значения параметров следующим образом.

  1. Выберите вероятность смешения компонентов как однородную вероятность pi = 1k, где i = 1,..., k.

  2. Выберите матрицы ковариации, которые должны быть диагональными и идентичными, где starti = diag (a1, a2,..., ak) и aj = var (Xj).

  3. Выберите первый начальный центр компонента мк1 равномерно из всех точек данных в X.

  4. Для выбора центра j:

    1. Вычислите расстояния Махаланобиса от каждого наблюдения до каждого центроида и назначьте каждое наблюдение ближайшему центроиду.

    2. Для m = 1,..., n и p = 1,..., j - 1 выберите центроид j случайным образом из X с вероятностью

      d2 (xm, мкр) ∑h;xh∈Μpd2 (xh, мкр)

      где d (xm, мкм) - расстояние между наблюдением m и мкм, а Mp - множество всех наблюдений, наиболее близких к центроиду, и xm принадлежит Mp.

      То есть выберите каждый последующий центр с вероятностью, пропорциональной расстоянию от самого себя до ближайшего центра, который вы уже выбрали.

  5. Повторяйте шаг 4 до тех пор, пока не будут выбраны k центроидов.

Ссылки

[1] Маклахлан, G. и D. Кожица. Модели конечных смесей. Хобокен, Нью-Джерси: John Wiley & Sons, Inc., 2000.

Представлен в R2014a