sklearn means ejemplo cluster python scikit-learn k-means

python - ejemplo - Comprender el "puntaje" devuelto por scikit-learn KMeans



plot k means python (2)

En la documentación dice:

Returns: score : float Opposite of the value of X on the K-means objective.

Para entender lo que eso significa, necesita echarle un vistazo al algoritmo k-means. Lo que esencialmente hace k-means es encontrar centros de clusters que minimicen la suma de distancias entre las muestras de datos y sus centros de clúster asociados.

Es un proceso de dos pasos, donde (a) cada muestra de datos está asociada a su centro de clúster más cercano, (b) los centros de clúster se ajustan para que se encuentren en el centro de todas las muestras asociadas a ellos. Estos pasos se repiten hasta que se cumple un criterio (máximo de iteraciones / cambio mínimo entre las dos últimas iteraciones).

Como puede ver, queda una distancia entre las muestras de datos y sus centros de clúster asociados, y el objetivo de nuestra minimización es esa distancia (suma de todas las distancias).

Naturalmente, obtiene grandes distancias si tiene una gran variedad en muestras de datos, si la cantidad de muestras de datos es significativamente mayor que la cantidad de clústeres, que en su caso son solo dos . Por el contrario, si todas las muestras de datos fueran iguales, siempre obtendría una distancia cero independientemente del número de clústeres.

De la documentación, esperaría que todos los valores son negativos, sin embargo. Si observa valores negativos y positivos, tal vez haya más en el puntaje que eso.

Sin embargo, me pregunto cómo se te ocurrió la idea de agrupar en dos grupos.

Apliqué la agrupación en un conjunto de documentos de texto (alrededor de 100). Los convertí en vectores Tfidf usando TfIdfVectorizer y proporcioné los vectores como entrada para scikitlearn.cluster.KMeans(n_clusters=2, init=''k-means++'', max_iter=100, n_init=10) . Ahora cuando yo

model.fit() print model.score()

en mis vectores, obtengo un valor muy pequeño si todos los documentos de texto son muy similares, y obtengo un valor negativo muy grande si los documentos son muy diferentes.

Sirve para mi propósito básico de encontrar qué conjunto de documentos son similares, pero ¿alguien me puede ayudar a entender qué significa exactamente este valor de model.score() para un ajuste? ¿Cómo puedo usar este valor para justificar mis hallazgos?