68 votos

¿Es importante escalar los datos antes de agruparlos?

He encontrado este tutorial lo que sugiere que debería ejecutar la función de escala en las características antes de agruparlas (creo que convierte los datos en puntuaciones z).

Me pregunto si es necesario. Lo pregunto sobre todo porque hay un punto de codo agradable cuando no escalar los datos, pero desaparece cuando se escala. :)

1 votos

En su lugar, puede utilizar técnicas de agrupación invariante de escala, véase datasciencentral.com/perfiles/blogs/

91voto

Alan Puntos 7273

La cuestión es qué representa una buena medida de distancia entre casos.

Si tiene dos características, una en la que las diferencias entre los casos son grandes y la otra pequeñas, ¿está dispuesto a que la primera sea casi el único factor determinante de la distancia?

Así, por ejemplo, si se agrupa a las personas en función de su peso en kilogramos y su altura en metros, ¿es tan significativa una diferencia de 1 kg como una diferencia de 1 m en altura? ¿Importa que se obtengan agrupaciones diferentes según el peso en kilogramos y la altura en centímetros? Si tus respuestas son "no" y "sí" respectivamente, entonces probablemente deberías escalar.

Por otro lado, si desea agrupar las ciudades canadienses en función de las distancias este/oeste y norte/sur, aunque normalmente habrá diferencias mucho mayores este/oeste, puede que le resulte más cómodo utilizar distancias sin escalar en kilómetros o millas (aunque es posible que desee ajustar los grados de longitud y latitud en función de la curvatura de la Tierra).

0 votos

Es un poco ambiguo a qué se une el "respectivamente" en el segundo párrafo. Se une al "sí", ¿verdad?

0 votos

@user5965026 si una diferencia de 1kg no es tan importante como una diferencia de 1m, y si quieres que 2m de altura tengan el mismo resultado que 200cm entonces probablemente deberías escalar

57voto

Juriy Puntos 133

Otras respuestas son correctas, pero puede ayudar a comprender intuitivamente el problema ver un ejemplo. A continuación, genero un conjunto de datos que tiene dos conglomerados claros, pero la dimensión no agrupada es mucho mayor que la dimensión agrupada (observe las diferentes escalas en los ejes). El clustering en los datos no normalizados falla. La agrupación en los datos normalizados funciona muy bien.

Lo mismo ocurriría con los datos agrupados en ambas dimensiones, pero la normalización ayudaría menos. En ese caso, podría ser útil hacer un ACP y luego normalizar, pero eso sólo ayudaría si los conglomerados son linealmente separables y no se solapan en las dimensiones del ACP. (Este ejemplo sólo funciona tan claramente debido al bajo número de conglomerados).

synthetic clustered data, with k-means clustering on both the normalised and non-normalised versions

import numpy as np
import seaborn
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

rnorm = np.random.randn

x = rnorm(1000) * 10  
y = np.concatenate([rnorm(500), rnorm(500) + 5])

fig, axes = plt.subplots(3, 1)

axes[0].scatter(x, y)
axes[0].set_title('Data (note different axes scales)')

km = KMeans(2)

clusters = km.fit_predict(np.array([x, y]).T)

axes[1].scatter(x, y, c=clusters, cmap='bwr')
axes[1].set_title('non-normalised K-means')

clusters = km.fit_predict(np.array([x / 10, y]).T)

axes[2].scatter(x, y, c=clusters, cmap='bwr')
axes[2].set_title('Normalised K-means')

34voto

Amadiere Puntos 5606

En depende de sus datos .

Si tiene atributos con un significado bien definido. Por ejemplo, latitud y longitud, entonces no debe escalar sus datos, porque esto causará distorsión. (K-means podría ser una mala elección, también - usted necesita algo que puede manejar lat / lon naturalmente)

Si tienes datos numéricos mezclados, en los que cada atributo es algo totalmente diferente (por ejemplo, el número de calzado y el peso) y tiene diferentes unidades (lb, toneladas, m, kg...), entonces estos valores no son realmente comparables; estandarizarlos en z es la mejor práctica para darles el mismo peso.

Si tiene valores binarios, atributos discretos o atributos categoriales, manténgase alejado de k-means. K-means necesita calcular significa y el valor medio no es significativo en este tipo de datos.

0 votos

Si tienes un gran conjunto de datos discretos, entonces el valor medio ES significativo en este caso, ¿verdad?

0 votos

@user5965026, si tienes datos discretos, no usarías la media sino la moda

7voto

gui jun Puntos 61

La normalización es un paso importante del preprocesamiento de datos.

controla la variabilidad del conjunto de datos, convierte los datos en un rango específico utilizando una transformación lineal que genera clusters de buena calidad y mejora la precisión de los algoritmos de clustering, echa un vistazo al siguiente enlace para ver sus efectos en el análisis k-means.

https://pdfs.semanticscholar.org/1d35/2dd5f030589ecfe8910ab1cc0dd320bf600d.pdf

5voto

jpmuc Puntos 4817

Como se explica en este papel El algoritmo k-means minimiza la función de error mediante el algoritmo de Newton, es decir, un algoritmo de optimización basado en el gradiente. La normalización de los datos mejora la convergencia de estos algoritmos. Véase aquí para obtener más información.

La idea es que si los diferentes componentes de los datos (características) tienen diferentes escalas, entonces los derivados tienden a alinearse a lo largo de las direcciones con mayor varianza, lo que conduce a una convergencia más pobre / lenta.

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