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

Ajustar el modelo de mezcla gaussiana a los datos

Descripción

ejemplo

GMModel = fitgmdist(X,k) devuelve un modelo de distribución de mezcla gaussiana ( ) con componentes ajustados a los 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

Generar 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);

Trazar los datos sobre los contornos del modelo de mezcla gaussiana ajustados.

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

Generar datos a partir de una mezcla de dos distribuciones gaussianas bivariadas. Cree un tercer predictor que sea la suma del primer y segundo predictor.

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 los 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 covarianza están mal condicionadas. Por lo tanto, la optimización se detiene y aparece un error.

Vuelva a colocar 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 según se requieren que especifique una serie 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 de componentes principales.

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 procede como si esto fuera desconocido.

Utilice el análisis de componentes principales 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 a .1000 Utilice la notación de puntos para almacenar las estimaciones de parámetros finales. De forma predeterminada, el software se adapta 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.2898   -0.0867

 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 de los tres modelos de componentes son diferentes, lo que sugiere que el modelo distingue entre las tres especies de iris.

Trazar las puntuaciones sobre los contornos del modelo de mezcla gaussiana ajustados. Dado que el conjunto de datos incluye etiquetas, utilice para distinguir entre el número real 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
Warning: Function behaves unexpectedly on array inputs. To improve performance, properly vectorize your function to return an output with the same size and shape as the input arguments. 
Warning: Function behaves unexpectedly on array inputs. To improve performance, properly vectorize your function to return an output with the same size and shape as the input arguments. 
g = legend(h1); g.Position = [0.7 0.25 0.1 0.1];

Warning: Function behaves unexpectedly on array inputs. To improve performance, properly vectorize your function to return an output with the same size and shape as the input arguments. 
Warning: Function behaves unexpectedly on array inputs. To improve performance, properly vectorize your function to return an output with the same size and shape as the input arguments. 

El modelo de mezcla gaussiana de tres componentes, junto con PCA, parece que distingue 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 diferentes números de componentes utilizando criterios de información, por ejemplo, AIC o BIC.

  • Estimar el número de clústeres utilizando , que admite, el criterio Calinski-Harabasz y la estadística de brechas, u otros criterios.evalclusters

Los modelos de mezcla gaussiana según se requieren que especifique una serie 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 gaussiana más adecuado en un número variable de componentes.

Generar 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 parámetro subyacentes, los gráficos de dispersión sugieren:

  • Hay dos componentes.

  • Las varianzas 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 de trazado de dispersión, especifique que las matrices de covarianza son diagonales. Imprima la estadística final de iteración y loglikelihood 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 el 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 adapta al modelo de mezcla gaussiana de dos componentes.

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

Cargue el conjunto de datos de iris de Fisher. Utilice las longitudes y anchuras de los pétalos como predictores.

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

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

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

De forma predeterminada, el software:

  1. Implementa el to elegir 3 centros de clúster iniciales.-means++ Algoritmo para inicializaciónkk

  2. Establece las matrices de covarianza iniciales como diagonales, 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 ajustados.

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 las medias estimadas del componente.

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 mejor.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 de corresponden a observaciones y las columnas de corresponden a variables.XX El número de observaciones debe ser mayor que cada una de las siguientes opciones: el número de variables y el número de componentes.

s indicar los valores que faltan.NaN El software elimina las filas de que contienen al menos una antes de la adaptación, lo que disminuye el tamaño efectivo de la muestra.XNaN

Tipos de datos: single | double

Número de componentes que se deben utilizar al ajustar el modelo de mezcla gaussiana, especificado como un entero positivo. Por ejemplo, si 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 opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.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 ajustar las matrices de covarianza diagonal.'RegularizationValue',0.1,'CovarianceType','diagonal'

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

Si 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 iterativas de optimización del algoritmo EM, especificadas como el par separado por comas que consta de y 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': Mostrar salida iterativa a la ventana de comandos para algunas funciones; de lo contrario mostrar la salida final.

'off': No muestre 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 loglikelihood. El valor predeterminado es .1e-6

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

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

En cada iteración, después de la estimación de probabilidades posteriores, establece cualquier probabilidad posterior que no sea mayor que el valor de tolerancia en cero.fitgmdist El uso de una tolerancia distinta de cero podría 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'

Establézcalo en un pequeño escalar positivo para asegurarse de que las matrices de covarianza estimadas son definitivas positivas.RegularizationValue

Ejemplo: 'RegularizationValue',0.01

Tipos de datos: single | double

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

Si es mayor que , entonces:Replicates1

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

  • es el ajuste con la mayor probabilidad de registro.GMModel

Ejemplo: 'Replicates',10

Tipos de datos: single | double

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

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

Método de configuración de valores iniciales, 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 observaciones al azar como medio de componente inicial.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 observaciones del uso de lakX -means++ algoritmok. 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 conjetura inicial del índice de componentes para cada punto.n Es decir, cada elemento es un entero de 1 a , que corresponde a un componente.k El software recopila todas las observaciones correspondientes al mismo componente, calcula las medias, las covarianzas y las proporciones de mezcla para cada una, y establece los valores iniciales en estas estadísticas.
Matriz de estructuras

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

  • S.mu: Matriz a por- que especifica 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

    • Matriz -by-----.. es la matriz de covarianza inicial del componente .ddkSigma(:,:,j)j

    • Matriz -by-----.. es la matriz de covarianza inicial del componente .1dkdiag(Sigma(:,:,j))j

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

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

  • S.ComponentProportion: Un vector -por- 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 ajustada, devuelto como modelo.gmdistribution

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

Sugerencias

fitgmdist Podría:

  • Converge a una solución donde uno o más de los componentes tienen 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 los 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 entidades son discretas.

    • Ha intentado ajustar los datos a demasiados componentes.

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

    • Preprocese los datos para eliminar las operaciones correlacionadas.

    • Establézalo para utilizar una matriz de covarianza igual para cada componente.'SharedCovariance'true

    • Establézalo en .'CovarianceType''diagonal'

    • Se utiliza para agregar un número positivo muy pequeño a la diagonal de cada matriz de covarianza.'RegularizationValue'

    • Pruebe con otro conjunto de valores iniciales.

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

Algoritmos

contraer todo

Optimización de probabilidad del modelo de mezcla gaussiana

El software optimiza la probabilidad del modelo de mezcla gaussiana utilizando el algoritmo iterativo Expectation-Maximization (EM).

adapta los GmM a los datos utilizando el algoritmo iterativo (EM).fitgmdistExpectativa-Maximización Utilizando valores iniciales para medias 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 pertenencias a componentes. Puede pensar en el resultado como una matriz -by-, donde el elemento ( , ) contiene la probabilidad posterior de que la observación sea del componente .nkijij Este es el paso del algoritmo EM.E

  2. Utilizando las probabilidades posteriores de pertenencia a componentes como ponderaciones, el algoritmo estima las medias del componente, las matrices de covarianza y las 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 podría converger a un óptimo local. Además, el óptimo local resultante podría depender de las condiciones iniciales. tiene varias opciones para elegir las condiciones iniciales, incluidas las asignaciones aleatorias de componentes para las observaciones y el algoritmo -means ++.fitgmdistk

-means++ Algoritmo para inicializaciónk

El algoritmo -means++ utiliza una heurística para encontrar semillas centroides para la agrupación en clústeres -means. 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 parámetro iniciales de la siguiente manera.kk

  1. Seleccione la probabilidad de mezcla de componentes para que sea la probabilidad uniforme pi=1k, donde se encuentra el número 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. Calcular las distancias Mahalanobis de cada observación a cada centroide, y asignar cada observación a su centroide más cercano.

    2. Para los números 1,..., y 1,..., – 1, seleccione centroide al azar con 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 a los centroides Μp Y Xm pertenece a Mp.

      Es decir, seleccione cada centro posterior con una probabilidad proporcional a la distancia desde sí mismo hasta el centro más cercano que ya haya elegido.

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

Referencias

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

Introducido en R2014a