Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Ajustar modelos de mezcla gaussiana

En este ejemplo se muestra cómo determinar el mejor ajuste del modelo de mezcla gaussiana (GMM) ajustando el número de componentes y la estructura de matriz de covarianza del componente.

Cargue el conjunto de datos de iris de Fisher. Considere las mediciones de pétalo como predictores.

load fisheriris; X = meas(:,3:4); [n,p] = size(X); rng(1); % For reproducibility  figure; plot(X(:,1),X(:,2),'.','MarkerSize',15); title('Fisher''s Iris Data Set'); xlabel('Petal length (cm)'); ylabel('Petal width (cm)'); 

Supongamos que es el número de componentes o clústeres deseados, yk es la estructura de covarianza de todos los componentes. Siga estos pasos para ajustar un GMM.

  1. Elija un (,k ) y, a continuación, ajustar un GMM utilizando la especificación de parámetro elegida y todo el conjunto de datos.

  2. Estime el AIC y el BIC.

  3. Repita los pasos 1 y 2 hasta agotar todos los (,k ) pares de intereses.

  4. Elija el GMM ajustado que equilibra la baja AIC con la simplicidad.

Para este ejemplo, elija una cuadrícula de valores para que incluyan 2 y 3, y algunos números circundantes.k Especifique todas las opciones disponibles para la estructura de covarianza. Si es demasiado alto para el conjunto de datos, las covarianzas de componente estimadas pueden estar mal condicionadas.k Especifique si desea utilizar la regularización para evitar matrices de covarianza mal acondicionadas. Aumente el número de iteraciones del algoritmo EM a 10000.

k = 1:5; nK = numel(k); Sigma = {'diagonal','full'}; nSigma = numel(Sigma); SharedCovariance = {true,false}; SCtext = {'true','false'}; nSC = numel(SharedCovariance); RegularizationValue = 0.01; options = statset('MaxIter',10000); 

Ajuste los GMMs utilizando toda la combinación de parámetros. Calcule el AIC y el BIC para cada ajuste. Realice un seguimiento del estado de convergencia del terminal de cada ajuste.

% Preallocation gm = cell(nK,nSigma,nSC); aic = zeros(nK,nSigma,nSC); bic = zeros(nK,nSigma,nSC); converged = false(nK,nSigma,nSC);  % Fit all models for m = 1:nSC;     for j = 1:nSigma;         for i = 1:nK;             gm{i,j,m} = fitgmdist(X,k(i),...                 'CovarianceType',Sigma{j},...                 'SharedCovariance',SharedCovariance{m},...                 'RegularizationValue',RegularizationValue,...                 'Options',options);             aic(i,j,m) = gm{i,j,m}.AIC;             bic(i,j,m) = gm{i,j,m}.BIC;             converged(i,j,m) = gm{i,j,m}.Converged;         end     end end  allConverge = (sum(converged(:)) == nK*nSigma*nSC) 
 allConverge =    logical     1  

es una matriz de celdas que contiene todos los objetos de modelo ajustados.gmgmdistribution Todas las instancias de empalme convergieron.

Trace gráficos de barras separados para comparar el AIC y el BIC entre todos los ajustes. Agrupe las barras por.k

figure; bar(reshape(aic,nK,nSigma*nSC)); title('AIC For Various $k$ and $\Sigma$ Choices','Interpreter','latex'); xlabel('$k$','Interpreter','Latex'); ylabel('AIC'); legend({'Diagonal-shared','Full-shared','Diagonal-unshared',...     'Full-unshared'});  figure; bar(reshape(bic,nK,nSigma*nSC)); title('BIC For Various $k$ and $\Sigma$ Choices','Interpreter','latex'); xlabel('$c$','Interpreter','Latex'); ylabel('BIC'); legend({'Diagonal-shared','Full-shared','Diagonal-unshared',...     'Full-unshared'}); 

De acuerdo con los valores AIC y BIC, el mejor modelo tiene 3 componentes y una estructura de matriz de covarianza completa y no compartida.

Agruque los datos de entrenamiento utilizando el modelo de mejor ajuste. Trace los datos agrupados y las elipses del componente.

gmBest = gm{3,2,2}; clusterX = cluster(gmBest,X); kGMM = gmBest.NumComponents; d = 500; x1 = linspace(min(X(:,1)) - 2,max(X(:,1)) + 2,d); x2 = linspace(min(X(:,2)) - 2,max(X(:,2)) + 2,d); [x1grid,x2grid] = meshgrid(x1,x2); X0 = [x1grid(:) x2grid(:)]; mahalDist = mahal(gmBest,X0); threshold = sqrt(chi2inv(0.99,2));  figure; h1 = gscatter(X(:,1),X(:,2),clusterX); hold on; for j = 1:kGMM;     idx = mahalDist(:,j)<=threshold;     Color = h1(j).Color*0.75 + -0.5*(h1(j).Color - 1);     h2 = plot(X0(idx,1),X0(idx,2),'.','Color',Color,'MarkerSize',1);     uistack(h2,'bottom'); end h3 = plot(gmBest.mu(:,1),gmBest.mu(:,2),'kx','LineWidth',2,'MarkerSize',10); title('Clustered Data and Component Structures'); xlabel('Petal length (cm)'); ylabel('Petal width (cm)'); legend(h1,'Cluster 1','Cluster 2','Cluster 3','Location','NorthWest'); hold off 

Este conjunto de datos incluye etiquetas. Determine qué tan bien agrupa los datos comparando cada predicción con las etiquetas verdaderas.gmBest

species = categorical(species); Y = zeros(n,1); Y(species == 'versicolor') = 1; Y(species == 'virginica') = 2; Y(species == 'setosa') = 3;  miscluster = Y ~= clusterX; clusterError = sum(miscluster)/n 
 clusterError =      0.0800  

El mejor ajuste de GMM agrupa el 8% de las observaciones en el cluster equivocado.

no siempre conserva el orden del clúster.cluster Es decir, si se agrupara varios modelos ajustados, podría asignar diferentes etiquetas de clúster para componentes similares.gmdistributioncluster

Consulte también

| |

Temas relacionados