Các câu trả lời khác là đúng, nhưng nó có thể giúp nắm bắt trực quan vấn đề bằng cách xem một ví dụ. Dưới đây, tôi tạo một tập dữ liệu có hai cụm rõ ràng, nhưng kích thước không phân cụm lớn hơn nhiều so với kích thước cụm (lưu ý các tỷ lệ khác nhau trên các trục). Phân cụm trên dữ liệu không chuẩn hóa thất bại. Phân cụm trên dữ liệu chuẩn hóa hoạt động rất tốt.
Điều tương tự sẽ áp dụng với dữ liệu được nhóm trong cả hai chiều, nhưng chuẩn hóa sẽ giúp ít hơn. Trong trường hợp đó, có thể giúp thực hiện PCA, sau đó bình thường hóa, nhưng điều đó chỉ có ích nếu các cụm được phân tách tuyến tính và không trùng lặp về kích thước PCA. (Ví dụ này chỉ hoạt động rõ ràng vì số lượng cụm thấp)
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')