k-medias con centros iniciales seleccionados

Estoy tratando de k-medias agrupación con centroides iniciales seleccionados. Aquí dice que para especificar sus centros iniciales:

init : {'k-means++', 'random' or an ndarray} 

Si se pasa un ndarray , debe ser de forma ( n_clusters , n_features ) y da los centros iniciales.

Mi código en Python:

 X = np.array([[-19.07480000, -8.536], [22.010800000,-10.9737], [12.659700000,19.2601]], np.float64) km = KMeans(n_clusters=3,init=X).fit(data) # print km centers = km.cluster_centers_ print centers 

Devuelve un error:

 RuntimeWarning: Explicit initial center position passed: performing only one init in k-means instead of n_init=10 n_jobs=self.n_jobs) 

Y devuelven los mismos centros iniciales. ¿Alguna idea de cómo formar los centros iniciales para que pueda ser aceptado?

El comportamiento predeterminado de KMeans es inicializar el algoritmo varias veces utilizando diferentes centroides aleatorios (es decir, el método Forgy ). El número de inicializaciones aleatorias se controla mediante el parámetro n_init= ( docs ):

n_init : int, predeterminado: 10

Número de veces que se ejecutará el algoritmo k-means con diferentes semillas de centroides. Los resultados finales serán la mejor salida de n_init corridas consecutivas en términos de inercia.

Si pasa una matriz como el argumento init= entonces solo se realizará una inicialización utilizando los centroides explícitamente especificados en la matriz. Recibirá un RuntimeWarning porque todavía está pasando el valor predeterminado de n_init=10 ( aquí están las líneas relevantes del código fuente).

En realidad, es totalmente correcto ignorar esta advertencia, pero puede hacer que desaparezca completamente al pasar n_init=1 si su parámetro init= es una matriz.