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

Posted

技术标签:

【中文标题】缩放数据会降低聚类的质量【英文标题】:Scaling data lowers the quality of clustering 【发布时间】:2016-09-16 11:57:29 【问题描述】:

我遇到了一个奇怪的现象。我创建了一个只有 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)

【问题讨论】:

由于 k-means 是一种随机工作的启发式算法,如果您对两者进行多次评估并进行比较,将会有所帮助。也许只是为 k-means 使用更多的起始配置(默认为 n_init=10)。很高兴看到一些排除错误的代码。但通常预处理应该像你提到的那样有所帮助。但是根据您生成的测试数据,如果方差没有那么不同(因为意味着看起来也一样;对于 b),则不需要此标准化步骤 按照您的要求,我添加了用于显示分区的代码。可以以图形方式检查缩放比例。关于多次运行该算法,似乎在分离良好的数据集(如这个)上,标准 k-means 算法总是收敛到相同的解决方案。这就是我在这个数据集上注意到的。 【参考方案1】:

因为您的跨集群方差都在 X 中,而集群内方差主要在 Y 中,所以使用标准化技术会降低质量。所以不要假设“最佳实践”总是是最好的。

这是一个玩具示例,实际数据不会是这样的。最有可能的是,标准化确实会产生更有意义的结果。

尽管如此,这很好地证明了盲目地扩展您的数据,也不是盲目地运行集群,将产生良好的结果。您总是需要尝试不同的变体并研究它们。

【讨论】:

感谢您的解释。

以上是关于缩放数据会降低聚类的质量的主要内容,如果未能解决你的问题,请参考以下文章

R语言层次聚类(hierarchical clustering):数据缩放PCA聚类结果可视化fpc包的clusterboot函数通过bootstrap重采样的方法评估hclust层次聚类的稳定性

缩放图像并在图像视图中设置会降低图像质量并挤压它

K-means

NIPT聚类项目说明

R语言生成仿真的3D高斯簇数据集使用scale函数进行数据缩放并使用KMeans进行聚类分析数据反向缩放并比较聚类生成的中心和实际数据的中心的差异预测新的数据所属的聚类簇

聚类的重要性是啥?