10 votos

Abedul algoritmo no clúster como se esperaba

Estoy usando el algoritmo de Abedul de scipy-aprender Python paquete para la agrupación de un conjunto de puntos en una pequeña ciudad en grupos 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, yo siempre iba a terminar con series de 10 puntos. En mi caso, ahora, tengo 650 puntos del clúster, y n_clusters es de 65.

Pero, mi problema es que con muy bajo umbral termino con 1 dirección de un clúster, sólo una pequeña más grande de umbral de 40 direcciones por cada clúster.

¿Qué estoy haciendo mal aquí?

10voto

Chris Kloberdanz Puntos 1871

He hecho un poco de investigación. Me tomó algunos puntos en dos sistemas de coordenadas no métrico (WGS84) y métrica (Polonia 1992).

He utilizado este código:

from scipy import loadtxt
from sklearn.cluster import Birch
import matplotlib.pyplot as plt

data84 = loadtxt("/home/damian/workspace/84.csv", delimiter=",")
data90 = loadtxt("/home/damian/workspace/90.csv", delimiter=",")

brc = Birch(threshold=0.5)

Entonces me ajuste de nuestro modelo con los datos de la métrica:

brc.fit(data90)

Y graficar los resultados, donde cruza fueron mis puntos y círculos eran mis subgrupos:

c = brc.subcluster_centers_
plt.plot(data90[:,0], data90[:,1], '+')
plt.plot(c[:,0], c[:,1], 'o')
plt.show()

Esto es lo que obtuve: enter image description here

Usted puede ver, que el valor de umbral era demasiado pequeño, porque en él encontramos el subgrupo en cada punto.

Definición de umbral:

El radio del subgrupo obtiene mediante la fusión de una nueva muestra y el más cercano subgrupo debe ser menor que el umbral. De lo contrario, una nuevo subgrupo se inicia.

Así que en este caso tenemos que aumentar este valor.

Para:

brc = Birch(threshold=5000)

fue mucho mejor:

enter image description here

Y el WGS84 puntos para el umbral de 0.5:

brc = Birch(threshold=0.5)
brc.fit(data84)

enter image description here

Sólo un subgrupo, no es bueno. Pero en este caso se debe disminuir el valor de umbral, de modo de 0.05:

brc = Birch(threshold=0.05)
brc.fit(data84)

enter image description here

Tenemos buenos resultados.

Conclusión:

CRS asuntos. Usted necesita encontrar un adecuado valor de umbral, depende de tus datos de sistemas de coordenadas y la distancia entre los puntos. Si no tiene métrica de CRS, el umbral debe ser relativamente menor que con el sistema métrico. Usted tiene que saber la diferencia entre metros y grados, si la distancia entre dos puntos es igual a 10000m, será de menos de 1 grado en WGS84. Verificación de google para obtener más precisa de los valores.

También hay más puntos que n_clusters valor. Está bien, no hay centroides de los clusters, pero subgrupos. Si se intenta predecir algo, o la impresión de las etiquetas, se clasificará el punto de que uno de n_clusters áreas (o de impresión de puntos clasificados a 0,1,2,...,n_clusters etiqueta).

Si usted no quiere tratar diferentes parámetros, siempre se puede tomar otro algoritmo. Muy simple y común algoritmo de clustering es K-means el algoritmo.

http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html

Se debe encontrar n grupos para los datos sin la atención acerca de los umbrales, etc.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X