Подбор Смешанной гауссовской модели к данным

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

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

Симулируйте данные из смеси двух двухмерных Гауссовых распределений с помощью 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. The axes 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. The axes 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

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

См. также

| | |

Похожие темы