machine-learning - que - metodo del codo python
Elegir la cantidad de clusters en Agrupamiento aglomerativo jerárquico con scikit (2)
El artículo de wikipedia sobre cómo determinar el número de clústeres en un conjunto de datos indicó que no necesito preocuparme por ese problema cuando uso el clúster jerárquico. Sin embargo, cuando traté de usar la agrupación aglomerativa de scikit-learn, veo que tengo que darle la cantidad de clústeres como parámetro "n_clusters", sin lo cual obtengo el valor predeterminado de dos clústeres. ¿Cómo puedo elegir el número correcto de clústeres para el conjunto de datos en este caso? ¿El artículo de la wiki está mal?
Wikipedia simplemente está haciendo una simplificación extrema que no tiene nada que ver con la vida real. La agrupación jerárquica no evita el problema con la cantidad de clústeres . Simplemente: construye el espaciamiento de árboles sobre todas las muestras , lo que muestra qué muestras (más adelante, clusters) se fusionan para crear un clúster más grande. Esto sucede recursivamente hasta que tenga solo dos clústeres (esta es la razón por la cual el número predeterminado de clústeres es 2) que se fusionan con el conjunto de datos completo. Te dejan solo con "cortar" a través del árbol para obtener una agrupación real. Una vez que ajuste AgglomerativeClustering, puede recorrer todo el árbol y analizar qué clústeres mantener
import numpy as np
from sklearn.cluster import AgglomerativeClustering
import itertools
X = np.concatenate([np.random.randn(3, 10), np.random.randn(2, 10) + 100])
clustering = AgglomerativeClustering()
clustering.fit(X)
[{''node_id'': next(itertools.count(X.shape[0])), ''left'': x[0], ''right'':x[1]} for x in clustering.children_]
ELKI (no scikit-learn, pero Java) tiene una serie de métodos avanzados que extraen clústeres de una agrupación jerárquica. Son más inteligentes que simplemente cortar el árbol a una altura particular, pero pueden producir una jerarquía de grupos de un tamaño mínimo, por ejemplo.
Puede verificar si estos métodos funcionan para usted.