Этот пример показывает, как моделировать данные из многомерного нормального распределения, и затем соответствовать Гауссовой модели смеси (GMM) к данным с помощью fitgmdist
. Чтобы создать известное, или полностью заданный, объект GMM, видят, Создают Гауссову Модель Смеси.
fitgmdist
требует матрицы данных и количества компонентов в GMM. Чтобы создать полезный GMM, необходимо выбрать k
тщательно. Очень небольшому числу компонентов не удается смоделировать данные точно (т.е. 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')
Соответствуйте двухкомпонентному 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)reshape(pdf(gm,[x(:) y(:)]),size(x)); hold on h = fcontour(gmPDF,[-8 6]); title('Simulated Data and Contour lines of pdf');
Отобразите оценки для средних значений, ковариаций и пропорций смеси
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) являются основанными на вероятности мерами образцовой подгонки, которые включают штраф за сложность (а именно, количество параметров). Можно использовать их, чтобы определить соответствующее количество компонентов для модели, когда количество компонентов не задано.
fitgmdist
| gmdistribution
| mvnrnd
| random