在如何理解 K-means 的缺点的答案中,我们已经详细讨论了 k-means 的缺点。
其中一些对于玩具示例似乎很容易应对(例如,通过取消对扭曲数据集的缩放),但实际数据会复杂得多,不幸的是,全局标准化可能还不够。
与其热修复这些问题,不如验证 k-means目标是否解决了您的问题。
这不仅仅是将点聚类到分区中。您想要解决一个潜在的问题。通过聚类,它通常是关于“洞察”您的数据。一个简单的方法是仔细研究结果并丢弃任何可疑的结果。这不能自动化(您可以自动生成不同的结果以避免冗余,请参阅“替代聚类”)。
k-means 最好被视为一种矢量量化方法,而不是聚类。它不会尝试识别数据中的结构,而是假设结构(k 个中心),然后优化模型参数。在优化过程中,它假设所有变量都相等,并且每个实例的成本都以平方和来衡量
cost(xi)=mincenter c∑dim d(xi,d−μc,d)2
只要数据没有假设的结构,或者这个成本函数不合适,它就会失败。
因此,每当考虑 k-means 时,首先需要检查最小化上述方程是否能解决您的问题。如果您不想回答“根据上述方程,哪些中心的成本最小”的问题,那么 k-means 是错误的算法!
这是一个正面的例子,其中 k-means 是一个不错的选择:
我们有一个 24 位深度 (8bpp) 的 RGB 图像,我们想要压缩该图像以便在 interwebz 上快速加载。我们希望仅使用 4 位索引到 16 色调色板,而不是每像素存储 24 位。游程编码将进一步帮助压缩数据。所以我们必须用一个调色板条目来近似每个像素。较大的偏差不好,因此使用平方会有所帮助,并且像素的颜色近似误差可以计算为。这与 k-means 的成本函数完全匹配——因此我们可以使用该算法来优化我们的调色板。ΔR2+ΔG2+ΔB2