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.

fitgmdist

Ajuste el modelo de mezcla gaussiana a datos

Descripción

ejemplo

GMModel = fitgmdist(X,k) Devuelve un modelo de distribución de mezcla gaussiana () con componentes ajustados a datos ().GMModelkX

ejemplo

GMModel = fitgmdist(X,k,Name,Value) Devuelve un modelo de distribución de mezcla gaussiana con opciones adicionales especificadas por uno o más argumentos de par.Name,Value

Por ejemplo, puede especificar un valor de regularización o el tipo de covarianza.

Ejemplos

contraer todo

Genere datos a partir de una mezcla de dos distribuciones Gaussianas bivariadas.

mu1 = [1 2]; Sigma1 = [2 0; 0 0.5]; mu2 = [-3 -5]; Sigma2 = [1 0;0 1]; rng(1); % For reproducibility X = [mvnrnd(mu1,Sigma1,1000);mvnrnd(mu2,Sigma2,1000)];

Ajuste un modelo de mezcla Gaussiana. Especifique que hay dos componentes.

GMModel = fitgmdist(X,2);

Trace los datos sobre los contornos del modelo de mezcla gaussiana ajustada.

figure y = [zeros(1000,1);ones(1000,1)]; h = gscatter(X(:,1),X(:,2),y); hold on gmPDF = @(x1,x2)reshape(pdf(GMModel,[x1(:) x2(:)]),size(x1)); g = gca; fcontour(gmPDF,[g.XLim g.YLim]) title('{\bf Scatter Plot and Fitted Gaussian Mixture Contours}') legend(h,'Model 0','Model1') hold off

Genere datos a partir de una mezcla de dos distribuciones Gaussianas bivariadas. Cree un tercer predictor que sea la suma de los predictores primero y segundo.

mu1 = [1 2]; Sigma1 = [1 0; 0 1]; mu2 = [3 4]; Sigma2 = [0.5 0; 0 0.5]; rng(3); % For reproducibility X1 = [mvnrnd(mu1,Sigma1,100);mvnrnd(mu2,Sigma2,100)]; X = [X1,X1(:,1)+X1(:,2)];

Las columnas de son linealmente dependientes.X Esto puede causar estimaciones de covarianza mal condicionadas.

Ajuste un modelo de mezcla gaussiana a los datos. Puede usar/instrucciones para ayudar a administrar mensajes de error.trycatch

rng(1); % Reset seed for common start values try     GMModel = fitgmdist(X,2) catch exception     disp('There was an error fitting the Gaussian mixture model')     error = exception.message end
There was an error fitting the Gaussian mixture model 
error =  'Ill-conditioned covariance created at iteration 2.' 

Las estimaciones de la covarianza están mal condicionadas. En consecuencia, la optimización se detiene y aparece un error.

Vuelva a montar un modelo de mezcla gaussiana, pero utilice la regularización.

rng(3); % Reset seed for common start values GMModel = fitgmdist(X,2,'RegularizationValue',0.1)
GMModel =   Gaussian mixture distribution with 2 components in 3 dimensions Component 1: Mixing proportion: 0.536725 Mean:    2.8831    3.9506    6.8338  Component 2: Mixing proportion: 0.463275 Mean:    0.8813    1.9758    2.8571 

En este caso, el algoritmo converge a una solución debido a la regularización.

Los modelos de mezcla gaussiana requieren que se especifique un número de componentes antes de ajustarse a los datos. Para muchas aplicaciones, puede ser difícil conocer el número adecuado de componentes. En este ejemplo se muestra cómo explorar los datos e intentar obtener una suposición inicial del número de componentes mediante el análisis del componente principal.

Cargue el conjunto de datos de iris de Fisher.

load fisheriris classes = unique(species)
classes = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

El conjunto de datos contiene tres clases de especies de iris. El análisis continúa como si esto fuera desconocido.

Utilice el análisis del componente principal para reducir la dimensión de los datos a dos dimensiones para la visualización.

[~,score] = pca(meas,'NumComponents',2);

Ajuste tres modelos de mezcla gaussiana a los datos especificando 1, 2 y 3 componentes. Aumente el número de iteraciones de optimización.1000 Utilice la notación de puntos para almacenar las estimaciones de parámetros finales. De forma predeterminada, el software se ajusta a las covarianzas completas y diferentes para cada componente.

GMModels = cell(3,1); % Preallocation options = statset('MaxIter',1000); rng(1); % For reproducibility  for j = 1:3     GMModels{j} = fitgmdist(score,j,'Options',options);     fprintf('\n GM Mean for %i Component(s)\n',j)     Mu = GMModels{j}.mu end
 GM Mean for 1 Component(s) 
Mu = 1×2
10-14 ×

   -0.2907   -0.0890

 GM Mean for 2 Component(s) 
Mu = 2×2

    1.3212   -0.0954
   -2.6424    0.1909

 GM Mean for 3 Component(s) 
Mu = 3×2

    0.4856   -0.1287
    1.4484   -0.0904
   -2.6424    0.1909

es una matriz de celdas que contiene tres modelos ajustados.GMModelsgmdistribution Los medios en los tres modelos de componentes son diferentes, sugiriendo que el modelo distingue entre las tres especies de iris.

Trace las puntuaciones sobre los contornos del modelo de mezcla gaussiana ajustada. Puesto que el conjunto de datos incluye etiquetas, se utiliza para distinguir entre el verdadero número de componentes.gscatter

figure for j = 1:3     subplot(2,2,j)     h1 = gscatter(score(:,1),score(:,2),species);     h = gca;     hold on     gmPDF = @(x1,x2)reshape(pdf(GMModels{j},[x1(:) x2(:)]),size(x1));     fcontour(gmPDF,[h.XLim h.YLim],'MeshDensity',100)     title(sprintf('GM Model - %i Component(s)',j));     xlabel('1st principal component');     ylabel('2nd principal component');     if(j ~= 3)         legend off;     end     hold off end g = legend(h1); g.Position = [0.7 0.25 0.1 0.1];

El modelo de mezcla gaussiana de tres componentes, junto con PCA, parece distinguir entre las tres especies de iris.

Hay otras opciones que puede utilizar para ayudar a seleccionar el número adecuado de componentes para un modelo de mezcla Gaussiana. Por ejemplo,

  • Compare varios modelos con un número variable de componentes utilizando criterios de información, p. ej., AIC o BIC.

  • Calcule el número de clústeres que utiliza, que admite, el criterio Calinski-Harabasz y el estadístico de brecha, u otros criterios.evalclusters

Los modelos de mezcla gaussiana requieren que se especifique un número de componentes antes de ajustarse a los datos. Para muchas aplicaciones, puede ser difícil conocer el número adecuado de componentes. En este ejemplo se utiliza la estadística de ajuste AIC para ayudarle a elegir el modelo de mezcla gaussiano que mejor se adapte a un número variable de componentes.

Genere datos a partir de una mezcla de dos distribuciones Gaussianas bivariadas.

mu1 = [1 1]; Sigma1 = [0.5 0; 0 0.5]; mu2 = [2 4]; Sigma2 = [0.2 0; 0 0.2]; rng(1); X = [mvnrnd(mu1,Sigma1,1000);mvnrnd(mu2,Sigma2,1000)];  plot(X(:,1),X(:,2),'ko') title('Scatter Plot') xlim([min(X(:)) max(X(:))]) % Make axes have the same scale ylim([min(X(:)) max(X(:))])

Supongamos que no conoce los valores de los parámetros subyacentes, los trazados de dispersión sugieren:

  • Hay dos componentes.

  • Las desviaciones entre los clústeres son diferentes.

  • La varianza dentro de los clústeres es la misma.

  • No hay ninguna covarianza dentro de los clústeres.

Ajuste un modelo de mezcla gaussiana de dos componentes. En función de la inspección del gráfico de dispersión, especifique que las matrices de covarianza son diagonales. Imprima la estadística de iteración final y logverosimilitud en la ventana de comandos pasando una estructura como el valor del argumento de par nombre-valor.statsetOptions

options = statset('Display','final'); GMModel = fitgmdist(X,2,'CovarianceType','diagonal','Options',options);
11 iterations, log-likelihood = -4787.38 

es un modelo ajustado.GMModelgmdistribution

Examine la AIC sobre diferentes números de componentes.

AIC = zeros(1,4); GMModels = cell(1,4); options = statset('MaxIter',500); for k = 1:4     GMModels{k} = fitgmdist(X,k,'Options',options,'CovarianceType','diagonal');     AIC(k)= GMModels{k}.AIC; end  [minAIC,numComponents] = min(AIC); numComponents
numComponents = 2 
 BestModel = GMModels{numComponents}
BestModel =   Gaussian mixture distribution with 2 components in 2 dimensions Component 1: Mixing proportion: 0.501719 Mean:    1.9824    4.0013  Component 2: Mixing proportion: 0.498281 Mean:    0.9880    1.0511 

El AIC más pequeño se produce cuando el software se ajusta al modelo de mezcla gaussiana de dos componentes.

Las estimaciones de parámetros del modelo de mezcla gaussiana pueden variar con valores iniciales diferentes. Este ejemplo muestra cómo controlar los valores iniciales cuando se ajustan los modelos de mezcla gaussiana utilizando.fitgmdist

Cargue el conjunto de datos de iris de Fisher. Utilice las longitudes y anchos de pétalo como predictores.

load fisheriris X = meas(:,3:4);

Ajuste un modelo de mezcla gaussiana a los datos utilizando valores iniciales predeterminados. Hay tres especies de iris, así que especifique = 3 componentes.k

rng(10); % For reproducibility GMModel1 = fitgmdist(X,3);

Por defecto, el software:

  1. Implementa el para elegir = 3 centros de clúster iniciales.-significa + + algoritmo de inicializaciónkk

  2. Establece las matrices de covarianza iniciales en diagonal, donde Element (,) es la varianza de.jjX(:,j)

  3. Trata las proporciones de mezcla iniciales como uniformes.

Ajuste un modelo de mezcla gaussiana conectando cada observación a su etiqueta.

y = ones(size(X,1),1); y(strcmp(species,'setosa')) = 2; y(strcmp(species,'virginica')) = 3;  GMModel2 = fitgmdist(X,3,'Start',y);

Ajuste un modelo de mezcla gaussiana especificando explícitamente los medios iniciales, las matrices de covarianza y las proporciones de mezcla.

Mu = [1 1; 2 2; 3 3]; Sigma(:,:,1) = [1 1; 1 2]; Sigma(:,:,2) = 2*[1 1; 1 2]; Sigma(:,:,3) = 3*[1 1; 1 2]; PComponents = [1/2,1/4,1/4]; S = struct('mu',Mu,'Sigma',Sigma,'ComponentProportion',PComponents);  GMModel3 = fitgmdist(X,3,'Start',S);

Se utiliza para trazar un diagrama de dispersión que distingue entre las especies de iris.gscatter Para cada modelo, trace los contornos del modelo de mezcla gaussiana ajustada.

figure subplot(2,2,1) h = gscatter(X(:,1),X(:,2),species,[],'o',4); haxis = gca; xlim = haxis.XLim; ylim = haxis.YLim; d = (max([xlim ylim])-min([xlim ylim]))/1000; [X1Grid,X2Grid] = meshgrid(xlim(1):d:xlim(2),ylim(1):d:ylim(2)); hold on contour(X1Grid,X2Grid,reshape(pdf(GMModel1,[X1Grid(:) X2Grid(:)]),...     size(X1Grid,1),size(X1Grid,2)),20) uistack(h,'top') title('{\bf Random Initial Values}'); xlabel('Sepal length'); ylabel('Sepal width'); legend off; hold off subplot(2,2,2) h = gscatter(X(:,1),X(:,2),species,[],'o',4); hold on contour(X1Grid,X2Grid,reshape(pdf(GMModel2,[X1Grid(:) X2Grid(:)]),...     size(X1Grid,1),size(X1Grid,2)),20) uistack(h,'top') title('{\bf Initial Values from Labels}'); xlabel('Sepal length'); ylabel('Sepal width'); legend off hold off subplot(2,2,3) h = gscatter(X(:,1),X(:,2),species,[],'o',4); hold on contour(X1Grid,X2Grid,reshape(pdf(GMModel3,[X1Grid(:) X2Grid(:)]),...     size(X1Grid,1),size(X1Grid,2)),20) uistack(h,'top') title('{\bf Initial Values from the Structure}'); xlabel('Sepal length'); ylabel('Sepal width'); legend('Location',[0.7,0.25,0.1,0.1]); hold off

Según los contornos, parece sugerir una ligera trimodalidad, mientras que los otros sugieren distribuciones bimodales.GMModel2

Visualice los medios de componente estimados.

table(GMModel1.mu,GMModel2.mu,GMModel3.mu,'VariableNames',...     {'Model1','Model2','Model3'})
ans=3×3 table
         Model1               Model2              Model3     
    _________________    ________________    ________________

    5.2115     2.0119    4.2857    1.3339    1.4604    0.2429
     1.461    0.24423     1.462     0.246    4.7509    1.4629
    4.6829     1.4429    5.5507    2.0316    5.0158    1.8592

parece distinguir entre las especies de iris de las mejores.GMModel2

Argumentos de entrada

contraer todo

Datos a los que se ajusta el modelo de mezcla gaussiana, especificados como una matriz numérica.

Las filas corresponden a las observaciones y las columnas corresponden a las variables.XX El número de observaciones debe ser mayor que cada uno de los siguientes: el número de variables y el número de componentes.

s indican valores faltantes.NaN El software elimina las filas que contienen al menos una antes del ajuste, lo que disminuye el tamaño efectivo de la muestra.XNaN

Tipos de datos: single | double

Número de componentes que se utilizarán al ajustar el modelo de mezcla gaussiana, especificado como un entero positivo. Por ejemplo, si se especifica, el software se ajusta a un modelo de mezcla gaussiana con tres medios distintos, matrices de covarianzas y proporciones de componentes a los datos ().k = 3X

Tipos de datos: single | double

Argumentos de par nombre-valor

Especifique pares de argumentos separados por comas opcionales. es el nombre del argumento y es el valor correspondiente. deben aparecer dentro de las cotizaciones.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como.Name1,Value1,...,NameN,ValueN

Ejemplo: especifica un valor de parámetro de regularización de 0,1 y para ajustarse a matrices de covarianza diagonales.'RegularizationValue',0.1,'CovarianceType','diagonal'

Tipo de matriz de covarianza que se ajusta a los datos, especificado como el par separado por comas que consta de y cualquiera o.'CovarianceType''diagonal''full'

Si se establece, el software se ajusta a las matrices de covarianza diagonales.'diagonal' En este caso, el software estima los parámetros de covarianza, donde está el número de columnas en (es decir,).k*ddXd = size(X,2)

De lo contrario, el software se adapta a matrices de covarianza completas. En este caso, el software estima los parámetros de covarianza.k*d*(d+1)/2

Ejemplo: 'CovarianceType','diagonal'

Opciones de optimización de algoritmo EM iterativas, especificadas como el par separado por comas que consta de una estructura de opciones.'Options'statset

En esta tabla se describen los argumentos de par nombre-valor disponibles.

NombreValor
'Display'

:'final' Visualice la salida final.

:'iter' Visualice la salida iterativa en la ventana de comandos para algunas funciones; Mostrar de otro modo la salida final.

:'off' No Mostrar información de optimización.

'MaxIter'Entero positivo que indica el número máximo de iteraciones permitidas. El valor predeterminado es100
'TolFun'Escalar positivo que indica la tolerancia de terminación para el valor de la función logverosimilitud. El valor predeterminado es.1e-6

Ejemplo: 'Options',statset('Display','final','MaxIter',1500,'TolFun',1e-5)

Tolerancia para las probabilidades posteriores, especificada como el par separado por comas que consta de un valor escalar no negativo en el intervalo.ProbabilityTolerance[0,1e-6]

En cada iteración, después de la estimación de las probabilidades posteriores, establece cualquier probabilidad posterior que no sea mayor que el valor de tolerancia a cero.fitgmdist El uso de una tolerancia distinta de cero puede acelerar.fitgmdist

Ejemplo: 'ProbabilityTolerance',0.0000025

Tipos de datos: single | double

Valor del parámetro de regularización, especificado como el par separado por comas que consta de un escalar no negativo.'RegularizationValue'

Se establece en un pequeño escalar positivo para asegurarse de que las matrices de covarianza estimadas son definidas positivamente.RegularizationValue

Ejemplo: 'RegularizationValue',0.01

Tipos de datos: single | double

Número de veces que se repite el algoritmo EM mediante un nuevo conjunto de valores iniciales, especificado como el par separado por comas y que consta de un entero positivo.'Replicates'

Si es mayor que, entonces:Replicates1

  • El argumento de par nombre-valor debe ser (el valor predeterminado) o.StartplusrandSample

  • es el ajuste con la mayor logverosimilitud.GMModel

Ejemplo: 'Replicates',10

Tipos de datos: single | double

Indicador que indica si todas las matrices de covarianza son idénticas (es decir, se ajustan a una estimación agrupada), especificadas como el par separado por comas que consta de un valor lógico o bien.'SharedCovariance'falsetrue

Si es así, todas las matrices de covarianza son iguales, y el número de parámetros de covarianza se reduce verticalmente por un factor de.SharedCovariancetruekk

Método de configuración de valor inicial, especificado como el par separado por comas que consta de y, un vector de enteros, o una matriz de estructura.'Start''randSample''plus'

El valor de determina los valores iniciales requeridos por la rutina de optimización para cada parámetro de componente gaussiano (media, covarianza y proporción de mezcla).Start Esta tabla resume las opciones disponibles.

ValorDescripción
'randSample'El software selecciona las observaciones de al azar como medios iniciales del componente.kX Las proporciones de mezcla son uniformes. Las matrices de covarianza iniciales para todos los componentes son diagonales, donde el elemento en la diagonal es la varianza de.jX(:,j)
'plus'El software selecciona las observaciones del uso de la.kXKmeans + + algoritmo Las proporciones de mezcla iniciales son uniformes. Las matrices de covarianza iniciales para todos los componentes son diagonales, donde el elemento en la diagonal es la varianza de.jX(:,j)
Vector de enteros Un vector de longitud (el número de observaciones) que contiene una suposición inicial del índice del componente para cada punto.n Es decir, cada elemento es un número entero de 1 a, que corresponde a un componente.k El software recopila todas las observaciones correspondientes al mismo componente, calcula los medios, las covarianzas y las proporciones de mezcla para cada uno, y establece los valores iniciales en estas estadísticas.
Matriz de estructura

Supongamos que hay variables (es decir,).dd = size(X,2) La matriz de estructura, por ejemplo,, debe tener tres campos:S

  • :S.mu A-por-Matrix especificando la media inicial de cada componentekd

  • :S.Sigma Matriz numérica que especifica la matriz de covarianza de cada componente. es uno de los siguientes:Sigma

    • A-por--por-Array. es la matriz de covarianza inicial del componente.ddkSigma(:,:,j)j

    • A-por--por-Array. es la matriz de covarianza inicial del componente.1dkdiag(Sigma(:,:,j))j

    • A-por-matriz. es la matriz de covarianza inicial para todos los componentes.ddSigma

    • A-por-vector. es la matriz de covarianza inicial para todos los componentes.1ddiag(Sigma)

  • :S.ComponentProportion A-por-vector de escalares especificando las proporciones de mezcla iniciales de cada componente.1k El valor predeterminado es uniforme.

Ejemplo: 'Start',ones(n,1)

Tipos de datos: single | double | char | string | struct

Argumentos de salida

contraer todo

Modelo de mezcla gaussiana ajustado, devuelto como modelo.gmdistribution

Acceda a las propiedades del uso de notación de puntos.GMModel Por ejemplo, Mostrar la AIC introduciendo.GMModel.AIC

Sugerencias

fitgmdist Podría:

  • Converger en una solución en la que uno o varios de los componentes tengan una matriz de covarianza mal condicionada o singular.

    Los siguientes problemas pueden dar lugar a una matriz de covarianza mal condicionada:

    • El número de dimensiones de sus datos es relativamente alto y no hay suficientes observaciones.

    • Algunos de los predictores (variables) de los datos están altamente correlacionados.

    • Algunas o todas las características son discretas.

    • Ha intentado ajustar los datos a demasiados componentes.

    En general, puede evitar obtener matrices de covarianza mal acondicionadas mediante una de las siguientes precauciones:

    • Preprocese los datos para eliminar las características correlacionadas.

    • Se establece en para utilizar una matriz de covarianza igual para cada componente.'SharedCovariance'true

    • Establecido en.'CovarianceType''diagonal'

    • Utilícelas para añadir un número positivo muy pequeño a la diagonal de cada matriz de covarianza.'RegularizationValue'

    • Pruebe con otro conjunto de valores iniciales.

  • Pasar a través de un paso intermedio donde uno o más de los componentes tiene una matriz de covarianza mal acondicionadas. Pruebe con otro conjunto de valores iniciales para evitar este problema sin alterar los datos o el modelo.

Algoritmos

contraer todo

Mezcla gaussiana modelo de probabilidad optimización

El software optimiza la probabilidad del modelo de mezcla gaussiana utilizando el algoritmo iterativo de maximización de expectativas (EM).

ajusta los GMMs a los datos mediante el algoritmo iterativo (EM).fitgmdistExpectativa-maximización Utilizando los valores iniciales para los medios de componentes, matrices de covarianza y proporciones de mezcla, el algoritmo EM continúa utilizando estos pasos.

  1. Para cada observación, el algoritmo calcula las probabilidades posteriores de pertenencia a componentes. Se puede pensar en el resultado como una-por-matriz, donde Element (,) contiene la probabilidad posterior de que la observación es de componente.nkijij Este es el paso del algoritmo EM.E

  2. Utilizando las probabilidades posteriores de pertenencia a componentes como pesos, el algoritmo estima los medios de componentes, matrices de covarianza y proporciones de mezcla aplicando la máxima probabilidad. Este es el paso del algoritmo EM.M

El algoritmo recorre en iteración estos pasos hasta la convergencia. La superficie de probabilidad es compleja, y el algoritmo puede converger a un óptimo local. Además, el óptimo local resultante puede depender de las condiciones iniciales. tiene varias opciones para elegir las condiciones iniciales, incluidas las asignaciones de componentes aleatorias para las observaciones y el algoritmo-Means + +.fitgmdistk

-significa + + algoritmo de inicializaciónk

El algoritmo-Means + + utiliza una heurística para encontrar las semillas centroides para la agrupación en clústeres. puede aplicar el mismo principio para inicializar el algoritmo EM utilizando el algoritmo k-means + + para seleccionar los valores de parámetro iniciales para un modelo de mezcla gaussiana ajustado.kkfitgmdist

El algoritmo-Means + + asume que el número de clústeres es y elige los valores de los parámetros iniciales de la siguiente manera.kk

  1. Seleccione la probabilidad de mezcla de componentes para que sea la probabilidad uniforme pi=1k, donde = 1,...,.ik

  2. Seleccione las matrices de covarianza para que sean diagonales e idénticas, donde σi=diag(a1,a2,,ak) Y aj=var(Xj).

  3. Seleccione el primer centro de componentes inicialμ1 uniformemente de todos los puntos de datos en.X

  4. Para elegir el centro:j

    1. Calcule las distancias de Mahalanobis de cada observación a cada centroide y asigne cada observación a su centroide más cercano.

    2. Para = 1,..., y = 1,..., – 1, seleccione el centroide al azar de con la probabilidadmnpjjX

      d2(xm,μp)h;xhΜpd2(xh,μp)

      Dónde d(xm,μp) es la distancia entre la observación ym ΜpY Mp es el conjunto de todas las observaciones más cercanas al centroide Μp Y Xm pertenece a Mp.

      Es decir, seleccione cada centro subsiguiente con una probabilidad proporcional a la distancia de sí mismo al centro más cercano que ya eligió.

  5. Repita el paso 4 hasta que se seleccionen los centroides.k

Referencias

[1] McLachlan, G., and D. Peel. Finite Mixture Models. Hoboken, NJ: John Wiley & Sons, Inc., 2000.

Introducido en R2014a