缩放数据会降低群集质量

时间:2016-05-19 14:17:34

标签: python scikit-learn cluster-analysis data-mining k-means

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

enter image description here

如果我在其上运行k-means算法,我会得到以下分区:

enter image description here

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

enter image description here

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

enter image description here

现在,它看起来很糟糕。怎么会?建议在使用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)

1 个答案:

答案 0 :(得分:1)

由于您的跨群集差异全部在X中,而群内差异主要在Y中,因此使用标准化技术会降低质量。所以不要假设一个"最佳实践" 总是是最好的。

这是一个玩具示例,真实数据看起来不像这样。最有可能的是,标准化 会提供更有意义的结果。

尽管如此,这表明盲目扩展数据,也不盲目地运行群集,将会产生良好的效果。您将始终需要尝试不同的变体并学习