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).
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')
1 votos
En su lugar, puede utilizar técnicas de agrupación invariante de escala, véase datasciencentral.com/perfiles/blogs/