Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

cluster

Crear grupos aglomerativos a partir de enlaces

Descripción

T = cluster(Z,'Cutoff',C) define grupos a partir de un árbol aglomerativo de grupos jerárquicos Z. La entrada Z es la salida de la función linkage para una matriz de datos de entrada X. cluster corta Z en grupos, utilizando C como umbral para los coeficientes de inconsistencia (o valores inconsistent) de los nodos del árbol. La salida T contiene las asignaciones de grupo de cada observación (fila de X).

ejemplo

T = cluster(Z,'Cutoff',C,'Depth',D) evalúa los valores inconsistent analizándolos a una profundidad D por debajo de cada nodo.

ejemplo

T = cluster(Z,'Cutoff',C,'Criterion',criterion) utiliza 'inconsistent' (de forma predeterminada) o 'distance' como criterion para definir los grupos. criterion debe ser inferior a C para que cluster defina grupos.

ejemplo

T = cluster(Z,'MaxClust',N) define un máximo de N grupos utilizando 'distance' como criterio para definirlos.

Ejemplos

contraer todo

Realice un agrupación aglomerativa en datos generados de manera aleatoria y evalúe los valores inconsistentes hasta una profundidad de cuatro por debajo de cada nodo.

Genere de manera aleatoria los datos de muestra.

rng('default'); % For reproducibility
X = [(randn(20,2)*0.75)+1;
    (randn(20,2)*0.25)-1];

Cree una gráfica de dispersión de los datos.

scatter(X(:,1),X(:,2));
title('Randomly Generated Data');

Figure contains an axes object. The axes object with title Randomly Generated Data contains an object of type scatter.

Cree un árbol de grupos jerárquicos con el método de enlace ward.

Z = linkage(X,'ward');

Cree un dendrograma de los datos.

dendrogram(Z)

Figure contains an axes object. The axes object contains 29 objects of type line.

La gráfica de dispersión y el dendrograma parecen mostrar dos grupos en los datos.

Agrupe los datos con un umbral de 3 para el coeficiente de inconsistencia y busque una profundidad de 4 por debajo de cada nodo. Represente los grupos resultantes.

T = cluster(Z,'cutoff',3,'Depth',4);
gscatter(X(:,1),X(:,2),T)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent 1, 2.

cluster identifica dos grupos en los datos.

Realice una agrupación aglomerativa en el conjunto de datos fisheriris utilizando 'distance' como criterio para definir los grupos. Visualice las asignaciones de grupos de los datos.

Cargue el conjunto de datos fisheriris.

load fisheriris

Visualice una gráfica de dispersión 2D de los datos utilizando especies como variable de agrupación. Especifique los colores y símbolos de los marcadores de las tres especies diferentes.

gscatter(meas(:,1),meas(:,2),species,'rgb','do*')
title("Actual Clusters of Fisher's Iris Data")

Figure contains an axes object. The axes object with title Actual Clusters of Fisher's Iris Data contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

Cree un árbol de grupos jerárquicos con el método 'average' y la métrica 'chebychev'.

Z = linkage(meas,'average','chebychev');

Agrupe los datos utilizando un umbral de 1,5 para el criterio 'distance'.

T = cluster(Z,'cutoff',1.5,'Criterion','distance')
T = 150×1

     2
     2
     2
     2
     2
     2
     2
     2
     2
     2
      ⋮

T contiene números que corresponden a las asignaciones de grupos. Halle el número de clases que identifica cluster.

length(unique(T))
ans = 3

cluster identifica tres clases para los valores especificados de cutoff y Criterion.

Visualice una gráfica de dispersión 2D de los resultados de la agrupación utilizando T como variable de agrupación. Especifique los colores y símbolos de los marcadores de las tres clases diferentes.

gscatter(meas(:,1),meas(:,2),T,'rgb','do*')
title("Cluster Assignments of Fisher's Iris Data")

Figure contains an axes object. The axes object with title Cluster Assignments of Fisher's Iris Data contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent 1, 2, 3.

La agrupación identifica correctamente que la clase setosa (clase 2) pertenece a un grupo distinto, pero distingue mal entre las clases versicolor y virginica (clases 1 y 3, respectivamente). Tenga en cuenta que la gráfica de dispersión etiqueta las clases utilizando los números contenidos en T.

Encuentre un máximo de tres grupos en el conjunto de datos fisheriris y compare las asignaciones de grupos de las flores con su clasificación conocida.

Cargue los datos de muestra.

load fisheriris

Cree un árbol de grupos jerárquicos con el método 'average' y la métrica 'chebychev'.

Z = linkage(meas,'average','chebychev');

Encuentre un máximo de tres grupos en los datos.

T = cluster(Z,'maxclust',3);

Cree un dendrograma de Z. Para ver los tres grupos, utilice 'ColorThreshold' con un corte a medio camino entre el antepenúltimo y el penúltimo enlace.

cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

Figure contains an axes object. The axes object contains 29 objects of type line.

Muestre las dos últimas filas de Z para ver cómo se combinan los tres grupos en uno. linkage combina el grupo 293 (azul) con el grupo 297 (rojo) para formar el grupo 298 con un enlace de 1.7583. linkage combina entonces el grupo 296 (verde) con el grupo 298.

lastTwo = Z(end-1:end,:)
lastTwo = 2×3

  293.0000  297.0000    1.7583
  296.0000  298.0000    3.4445

Compruebe cómo las asignaciones de los grupos corresponden a las tres especies. Por ejemplo, uno de los grupos contiene 50 flores de la segunda especie y 40 flores de la tercera especie.

crosstab(T,species)
ans = 3×3

     0     0    10
     0    50    40
    50     0     0

Genere de forma aleatoria datos de muestra con 20.000 observaciones.

rng('default') % For reproducibility
X = rand(20000,3);

Cree un árbol de grupos jerárquicos con el método de enlace ward. En este caso, la opción 'SaveMemory' de la función clusterdata se establece en 'on' de forma predeterminada. En general, especifique el mejor valor para 'SaveMemory' en función de las dimensiones de X y de la memoria disponible.

Z = linkage(X,'ward');

Agrupe los datos en un máximo de cuatro grupos y represente el resultado.

c = cluster(Z,'Maxclust',4);
scatter3(X(:,1),X(:,2),X(:,3),10,c)

Figure contains an axes object. The axes object contains an object of type scatter.

cluster identifica cuatro grupos de los datos.

Argumentos de entrada

contraer todo

Árbol aglomerativo de grupos jerárquicos que es la salida de la función linkage, especificada como matriz numérica. En el caso de una matriz de datos de entrada X con m filas (u observaciones), linkage devuelve una matriz Z de 3 por (m – 1). Para obtener una explicación de cómo linkage crea el árbol de grupos, consulte Z.

Ejemplo: Z = linkage(X), donde X es una matriz de datos de entrada

Tipos de datos: single | double

Umbral para definir grupos, especificado como un escalar positivo o un vector de escalares positivos. cluster utiliza C como umbral para las alturas o los coeficientes de inconsistencia de los nodos, en función del criterion para definir los grupos en un árbol de grupos jerárquicos.

  • Si el criterio para definir los grupos es 'distance', cluster agrupa todas las hojas situadas en un nodo o por debajo de él en un grupo, siempre que la altura del nodo sea inferior a C.

  • Si el criterio para definir los grupos es 'inconsistent', los valores inconsistent de un nodo y de todos sus subnodos deben ser menores que C para que cluster los agrupe en un grupo. cluster comienza en la raíz del árbol de grupo Z y desciende hasta que encuentra un nodo cuyo valor inconsistent es menor que el umbral C, y cuyos subnodos (o descendientes) tienen valores inconsistentes inferiores a C. A continuación, cluster agrupa todas las hojas situadas en el nodo o por debajo de él en un grupo (o en un elemento singular si el propio nodo es una hoja). cluster sigue cada rama del árbol hasta que todos los nodos hoja están agrupados.

Ejemplo: cluster(Z,'Cutoff',0.5)

Tipos de datos: single | double

Profundidad para calcular valores inconsistentes, especificada como un escalar numérico. cluster evalúa los valores inconsistentes buscando una profundidad D por debajo de cada nodo.

Ejemplo: cluster(Z,'Cutoff',0.5,'Depth',3)

Tipos de datos: single | double

Criterio para definir grupos, especificado como 'inconsistent' o 'distance'.

Si el criterio para definir los grupos es 'distance', cluster agrupa todas las hojas situadas en un nodo o por debajo de él en un grupo (o en un elemento singular si el propio nodo es una hoja), siempre que la altura del nodo sea inferior a C. La altura de un nodo en un árbol representa la distancia entre los dos subnodos que se fusionan en él. Si se especifica 'distance', se obtienen grupos que corresponden a una sección horizontal de la gráfica dendrogram de Z.

Si el criterio para definir los grupos es 'inconsistent', cluster agrupa un nodo y todos sus subnodos en un grupo, siempre que los coeficientes de inconsistencia (o valores inconsistent) del nodo y los subnodos sean menores que C. Especificar 'inconsistent' es equivalente a cluster(Z,'Cutoff',C).

Ejemplo: cluster(Z,'Cutoff',0.5,'Criterion','distance')

Tipos de datos: char | string

Número máximo de grupos que se desean formar, especificado como un entero positivo o un vector de enteros positivos. cluster crea un máximo de N grupos, utilizando 'distance' como criterio para definirlos. La altura de cada nodo del árbol representa la distancia entre los dos subnodos que se fusionan en él. cluster encuentra la altura más pequeña a la que un corte horizontal a través del árbol dejará N grupos o menos. Para obtener más información, consulte Especificar grupos arbitrarios.

Ejemplo: cluster(Z,'MaxClust',5)

Tipos de datos: single | double

Argumentos de salida

contraer todo

Asignación de grupos, devuelta como vector numérico o matriz. En el caso del árbol de grupos jerárquicos Z de (m – 1) por 3 (la salida de linkage dada la entrada X), T contiene las asignaciones de grupos de las m filas (observaciones) de X.

El tamaño de T depende del tamaño correspondiente de C o N.

  • Si C es un escalar positivo, T es un vector con longitud m.

  • Si N es un entero positivo, T es un vector con longitud m.

  • Si C es un vector de escalares positivos de longitud l, T es una matriz de m por l con una columna por cada valor de C.

  • Si N es un vector de enteros positivos de longitud l, T es una matriz de m por l con una columna por cada valor de N.

Funcionalidad alternativa

Si tiene una matriz de datos de entrada X, puede utilizar clusterdata para realizar una agrupación aglomerativa y devolver índices de grupo para cada observación (fila) en X. La función clusterdata realiza todos los pasos necesarios, por lo que no necesita ejecutar las funciones pdist, linkage y cluster por separado.

Historial de versiones

Introducido antes de R2006a