缩放数据会降低聚类的质量

Scaling data lowers the quality of clustering

我遇到了一个奇怪的现象。我创建了一个只有 2 列填充数字的人工数据集:

如果我运行上面的k-means算法,我得到如下分区:

这看起来不错。现在,我使用 StandardScaler 缩放列并获得以下数据集:

但是如果我在上面运行 k-means算法,我得到如下分区:

现在看来,情况很糟糕。怎么会?建议在使用 k-means 之前缩放数值特征,所以我对这个结果感到非常惊讶。

这是显示分区的代码:

data = pd.read_csv("dataset_scaled.csv", sep = ",")
k_means = KMeans(n_clusters = 3)
k_means.fit(data)
partition =  k_means.labels_ + 1
colors = ["red", "green", "blue"]
ax = None
for i in range(1, 4):
    ax = d.iloc[partition == i].plot.scatter(x = 'a', y = 'b', color = colors[i - 1], legend = False, ax = ax)

因为您的跨集群方差全部在 X 中,而集群内方差主要在 Y 中,使用标准化技术会降低质量。所以不要假设 "best practise" 将 总是 是最好的。

这是一个玩具示例,真实数据不会像这样。最有可能的是,标准化 确实 给出了更有意义的结果。

尽管如此,这很好地证明了 盲目缩放数据 或盲目 运行 聚类都会产生良好的结果。您将始终需要尝试不同的变体并研究它们。