Estoy usando el algoritmo Birch del paquete Python scipy-learn para agrupar un conjunto de puntos en una ciudad pequeña en conjuntos de 10.
Yo uso el siguiente código:
no = len(list_of_points)/10
brc = Birch(branching_factor=50, n_clusters=no, threshold=0.05,compute_labels=True)
En mi idea, siempre terminaría con series de 10 puntos. En mi caso ahora, tengo 650 puntos para agrupar, y n_clusters es 65.
Pero, mi problema es que con un umbral demasiado bajo termino con 1 dirección por clúster, solo un umbral más pequeño: 40 direcciones por clúster.
¿Qué estoy haciendo mal aquí?
python
clustering
scipy.spatial
kaboom
fuente
fuente
Respuestas:
He investigado un poco. Tomé algunos puntos en dos sistemas de coordenadas no métricos (WGS84) y métricos (Polonia 1992).
Usé este código:
Luego ajusto nuestro modelo con datos métricos:
Y trace los resultados, donde las cruces fueron mis puntos y los círculos fueron mis subgrupos:
Esto es lo que conseguí:
Puede ver que ese valor de umbral era demasiado pequeño porque encontró un subgrupo en cada punto.
Definición de umbral:
Entonces, en este caso, necesitamos aumentar este valor.
Por:
fue mucho mejor:
Y los puntos WGS84 para el umbral 0.5:
Solo un subgrupo, no es bueno. Pero en este caso deberíamos disminuir el valor umbral, entonces para 0.05:
Tenemos buenos resultados.
Conclusión:
CRS importa. Debe encontrar un valor umbral adecuado, depende de sus sistemas de coordenadas de datos y la distancia entre puntos. Si tiene CRS no métrico, el umbral debe ser relativamente más pequeño que con el sistema métrico. Debe saber la diferencia entre metros y grados, si la distancia entre dos puntos es igual a 10000 m, será menor a 1 grado en WGS84. Consulte google para obtener valores más precisos.
También hay más puntos que el valor n_clusters. Está bien, no hay centroides de grupos, sino subgrupos. Si intenta predecir algo o imprimir etiquetas, clasificará su punto en una de las áreas n_clusters (o imprimirá puntos clasificados en 0,1,2, ..., etiqueta n_clusters).
Si no desea probar diferentes parámetros, siempre puede tomar otro algoritmo. Algoritmo muy simple y común para la agrupación es el algoritmo K-means.
http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html
Debería encontrar n grupos para sus datos sin importar los umbrales, etc.
fuente