聚类初始化

数据挖掘 聚类 无监督学习
2022-02-25 16:04:19

我在处理集群时遇到了问题。我处理具有高斯白噪声的数据。我遇到的所有方法都使用某种随机初始化来设置聚类的均值和协方差矩阵。

我的问题是:由于初始化是随机的,我有可能得到一个非常糟糕的起点,这会给我带来糟糕的结果。我该如何处理?

我正在考虑的一种特定初始化是 K-Means++,它比严格随机更好,因为它至少尝试使用数据进行知情初始化,但它最终也是随机的。

人们通常会进行多次运行并进行最佳初始化吗?

那对于流数据呢?

2个回答

你有两个选择:

1) 让 K-means 算法运行大量迭代(如果为sklearn,则更改 的max_iter参数值sklearn.cluster.KMeans)。它最终会收敛到一个好的结果(但需要更多时间)

2) 对初始起点进行“有根据的猜测”。一种方法是在您知道您的点只能位于特定区域内的空间中转换您的数据:从那里,您可以评估从哪里开始 K-means 的最佳种子。如需更清晰的解释,请参阅本文(有关快速概述,请查看相关幻灯片,特别是在第 3 步,幻灯片编号 10)

各种技术用于初始化。

在文献中,我看到了使用 k-means 查找初始中心的建议。可能在主教的书中。

例如,R 中的 mclust 似乎使用层次聚类(非常昂贵)来查找初始聚类,然后使用 GMM 来细化它们。可能是因为当时计算所有 exp 和 log 函数的成本更高。

ELKI 确实允许按照您的建议使用 k-means++ 初始化。它似乎也使用了一些好的启发式方法来选择初始协方差矩阵。这对我来说效果很好——它在我的实验中很好地融合了。不过,我没有检查他们的代码的详细信息(他们的代码中经常有文献参考,这非常好)。