fitgmdist

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

Синтаксис

GMModel = fitgmdist(X,k)
GMModel = fitgmdist(X,k,Name,Value)

Описание

пример

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 = @(x1,x2)reshape(pdf(GMModel,[x1(:) x2(:)]),size(x1));
g = gca;
fcontour(gmPDF,[g.XLim g.YLim])
title('{\bf Scatter Plot and Fitted Gaussian Mixture Contours}')
legend(h,'Model 0','Model1')
hold off

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

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 2.'

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

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

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 array
    {'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.2861   -0.0871

 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 = @(x1,x2)reshape(pdf(GMModels{j},[x1(:) x2(:)]),size(x1));
    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];

Трехкомпонентная Гауссова модель смеси, в сочетании с PCA, похожа на него, различает три ирисовых разновидности.

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

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

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

Гауссовы модели смеси требуют, чтобы вы задали много компонентов перед стать подходящим к данным. Для многих приложений может быть трудно знать соответствующее количество компонентов. Этот пример использует статистическую величину подгонки 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(:))])

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

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

  • Отклонения между кластерами отличаются.

  • Отклонение в кластерах является тем же самым.

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

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

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

GMModel является подходящей моделью gmdistribution.

Исследуйте AIC по переменным количествам компонентов.

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-средние-значения ++ Алгоритм для Инициализации, чтобы выбрать 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

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

Отобразите предполагаемые средние значения компонента.

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 соответствуют переменным. Количество наблюдений должно быть больше, чем каждое следующее: количество переменных и количество компонентов.

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (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'Положительная скалярная величина, указывающая на допуск завершения к loglikelihood значению функции. Значением по умолчанию является 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 является подгонкой с самым большим loglikelihood.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

свернуть все

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

Доступ к свойствам GMModel с помощью записи через точку. Например, отобразите AIC путем ввода GMModel.AIC.

Советы

fitgmdist может:

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

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

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

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

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

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

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

    • Предварительно обработайте свои данные, чтобы удалить коррелируемые функции.

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

    • Установите 'CovarianceType' на 'diagonal'.

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

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

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

Алгоритмы

свернуть все

Гауссова оптимизация вероятности модели смеси

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

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

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

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

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

k-средние-значения ++ Алгоритм для Инициализации

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

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

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

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

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

  4. Выбрать центр j:

    1. Вычислите расстояния Mahalanobis от каждого наблюдения до каждого центроида и присвойте каждое наблюдение его самому близкому центроиду.

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

      d2(xm,μp)h;xhΜpd2(xh,μp)

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

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

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

Ссылки

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

Введенный в R2014a