exponenta event banner

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

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

См. также

| | |

Связанные темы