¿Cómo asignar una nueva observación a los clústeres Kmeans existentes en función de la lógica centriodo de clúster más cercana en python?

Utilicé el siguiente código para crear clústeres de k-means utilizando Scikit learn.

kmean = KMeans(n_clusters=nclusters,n_jobs=-1,random_state=2376,max_iter=1000,n_init=1000,algorithm='full',init='k-means++') kmean_fit = kmean.fit(clus_data) 

También he guardado los centroides utilizando kmean_fit.cluster_centers_

Entonces decapé el K significa objeto.

 filename = pickle_path+'\\'+'_kmean_fit.sav' pickle.dump(kmean_fit, open(filename, 'wb')) 

De modo que pueda cargar el mismo objeto kmean_fit.predict(). y aplicarlo a los nuevos datos cuando llegue, utilizando kmean_fit.predict().

Preguntas:

  1. ¿El enfoque de cargar el objeto kmean_fit.predict() pickle y aplicar kmean_fit.predict() me permitirá asignar la nueva observación a los clústeres existentes en función del centroide de los clústeres existentes? ¿Este enfoque es simplemente un reagrupamiento desde cero en los nuevos datos?

  2. Si este método no funciona, ¿cómo asignar la nueva observación a los clústeres existentes dado que ya he guardado los periodiodos del clúster utilizando un código de Python eficaz?

PD: Sé que construir un clasificador utilizando clústeres existentes como variable dependiente es otra forma, pero no quiero hacerlo debido a la crisis de tiempo.

Sí. Si el objeto sklearn.cluster.KMeans está decapado o no ( si lo sklearn.cluster.KMeans correctamente, sklearn.cluster.KMeans con el “mismo” objeto original ) no afecta que pueda usar el método de predict para agrupar una nueva observación.

Un ejemplo:

 from sklearn.cluster import KMeans from sklearn.externals import joblib model = KMeans(n_clusters = 2, random_state = 100) X = [[0,0,1,0], [1,0,0,1], [0,0,0,1],[1,1,1,0],[0,0,0,0]] model.fit(X) 

Afuera:

 KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=2, n_init=10, n_jobs=1, precompute_distances='auto', random_state=100, tol=0.0001, verbose=0) 

Continuar:

 joblib.dump(model, 'model.pkl') model_loaded = joblib.load('model.pkl') model_loaded 

Afuera:

 KMeans(copy_x=True, init='k-means++', max_iter=300, n_clusters=2, n_init=10, n_jobs=1, precompute_distances='auto', random_state=100, tol=0.0001, verbose=0) 

¿Ves cómo los parámetros n_clusters y random_state son los mismos entre los objetos model y model_new ? Eres bueno para ir.

Predecir con el modelo “nuevo”:

 model_loaded.predict([0,0,0,0]) Out[64]: array([0])