Подходящая смешанная гауссовская модель к данным

В этом примере показано, как симулировать данные из многомерного нормального распределения, и затем соответствовать смешанной гауссовской модели (GMM) к данным с помощью fitgmdist. Чтобы создать известное, или полностью заданный, объект GMM, видят, Создают смешанную гауссовскую модель.

fitgmdist требует матрицы данных и количества компонентов в GMM. Чтобы создать полезный GMM, необходимо выбрать k тщательно. Очень небольшому числу компонентов не удается смоделировать данные точно (i.e., underfitting к данным). Слишком много компонентов приводят к сверхподходящей модели с сингулярными ковариационными матрицами.

Симулируйте данные из смеси двух двумерных Распределений Гаусса с помощью mvnrnd.

mu1 = [1 2];
sigma1 = [2 0; 0 .5];
mu2 = [-3 -5];
sigma2 = [1 0; 0 1];
rng(1); % For reproducibility
X = [mvnrnd(mu1,sigma1,1000);
     mvnrnd(mu2,sigma2,1000)];

Отобразите симулированные данные на графике.

scatter(X(:,1),X(:,2),10,'.') % Scatter plot with points of size 10
title('Simulated Data')

Figure contains an axes object. The axes object with title Simulated Data contains an object of type scatter.

Соответствуйте двухкомпонентному GMM. Используйте 'Options' аргумент пары "имя-значение", чтобы отобразить окончательный вывод алгоритма подбора.

options = statset('Display','final');
gm = fitgmdist(X,2,'Options',options)
5 iterations, log-likelihood = -7105.71

gm = 

Gaussian mixture distribution with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.500000
Mean:   -3.0377   -4.9859

Component 2:
Mixing proportion: 0.500000
Mean:    0.9812    2.0563

Постройте PDF подходящего GMM.

gmPDF = @(x,y) arrayfun(@(x0,y0) pdf(gm,[x0 y0]),x,y);
hold on
h = fcontour(gmPDF,[-8 6]);
title('Simulated Data and Contour lines of pdf');

Figure contains an axes object. The axes object with title Simulated Data and Contour lines of pdf contains 2 objects of type scatter, functioncontour.

Отобразите оценки для средних значений, ковариаций и пропорций смеси

ComponentMeans = gm.mu
ComponentMeans = 2×2

   -3.0377   -4.9859
    0.9812    2.0563

ComponentCovariances = gm.Sigma
ComponentCovariances = 
ComponentCovariances(:,:,1) =

    1.0132    0.0482
    0.0482    0.9796


ComponentCovariances(:,:,2) =

    1.9919    0.0127
    0.0127    0.5533

MixtureProportions = gm.ComponentProportion 
MixtureProportions = 1×2

    0.5000    0.5000

Подбирайте четыре модели к данным, каждому с растущим числом компонентов, и сравните значения Критерия информации о Akaike (AIC).

AIC = zeros(1,4);
gm = cell(1,4);
for k = 1:4
    gm{k} = fitgmdist(X,k);
    AIC(k)= gm{k}.AIC;
end

Отобразите количество компонентов, которое минимизирует значение AIC.

[minAIC,numComponents] = min(AIC);
numComponents
numComponents = 2

Двухкомпонентная модель имеет наименьшее значение AIC.

Отобразите двухкомпонентный GMM.

gm2 = gm{numComponents}
gm2 = 

Gaussian mixture distribution with 2 components in 2 dimensions
Component 1:
Mixing proportion: 0.500000
Mean:   -3.0377   -4.9859

Component 2:
Mixing proportion: 0.500000
Mean:    0.9812    2.0563

И AIC и Байесовы информационные критерии (BIC) являются основанными на вероятности мерами подгонки модели, которые включают штраф за сложность (а именно, количество параметров). Можно использовать их, чтобы определить соответствующее количество компонентов для модели, когда количество компонентов не задано.

Смотрите также

| | |

Похожие темы