多么棒的问题——这是一个展示如何检查任何统计方法的缺点和假设的机会。即:编一些数据,在上面试试算法!
我们将考虑您的两个假设,并看看当这些假设被打破时 k-means 算法会发生什么。我们将坚持使用二维数据,因为它很容易可视化。(非常感谢维度的诅咒,添加额外的维度可能会使这些问题更加严重,而不是更少)。我们将使用统计编程语言 R:您可以在此处找到完整的代码(以及此处的博客形式的帖子)。
消遣:Anscombe 的四重奏
首先,一个类比。想象一下有人提出以下观点:
我阅读了一些关于线性回归缺点的材料——它期望线性趋势,残差是正态分布的,并且没有异常值。但所有线性回归所做的都是最小化预测线的平方误差之和 (SSE)。这是一个无论曲线形状或残差分布如何都可以解决的优化问题。因此,线性回归不需要任何假设即可工作。
嗯,是的,线性回归通过最小化残差平方和来工作。但这本身并不是回归的目标:我们要做的是画一条线,作为基于x的y的可靠、无偏预测器。高斯-马尔可夫定理告诉我们,最小化 SSE 可以实现该目标——但该定理依赖于一些非常具体的假设。如果这些假设被打破,您仍然可以最小化 SSE,但它可能不会任何事物。想象一下,“你通过踩踏板来开车:驾驶本质上是一个‘踩踏板的过程’。油箱里有多少油都可以踩下踏板,所以即使油箱没了,你也可以踩下踏板开着车。”
但谈话很便宜。让我们看看冷硬的数据。或者实际上,虚构的数据。
![在此处输入图像描述](https://i.stack.imgur.com/1nOuj.png)
这实际上是我最喜欢的虚构数据:Anscombe 的四重奏。由统计学家弗朗西斯·安斯科姆(Francis Anscombe)于 1973 年创建,这个令人愉快的混合物说明了盲目相信统计方法的愚蠢。每个数据集具有相同的线性回归斜率、截距、p 值和R2- 但乍一看,我们可以看到其中只有一个I适合线性回归。在II中,它暗示了错误的形状,在III中,它被一个异常值扭曲了——而在IV中,显然根本没有趋势!
有人可以说“线性回归在这些情况下仍然有效,因为它可以最小化残差的平方和。” 但这是一场多么惨烈的胜利!线性回归总是会画一条线,但如果它是一条毫无意义的线,谁在乎呢?
所以现在我们看到,仅仅因为可以执行优化并不意味着我们正在实现我们的目标。我们看到,组成数据并将其可视化是检查模型假设的好方法。坚持这种直觉,我们马上就会需要它。
假设不成立:非球形数据
您认为 k-means 算法可以在非球形集群上正常工作。像……这样的非球形星团?
![在此处输入图像描述](https://i.stack.imgur.com/g5Jb8.png)
也许这不是您所期望的——但它是构建集群的一种完全合理的方式。看着这张图片,我们人类立即识别出两组自然的点——没有弄错它们。那么让我们看看 k-means 是如何做的:分配以颜色显示,估算中心显示为 X。
![在此处输入图像描述](https://i.stack.imgur.com/SlpL1.png)
嗯,这是不对的。K-means 试图在一个圆孔中安装一个方形钉- 试图找到周围有整齐球体的漂亮中心 - 但它失败了。是的,它仍然在最小化集群内的平方和——但就像上面 Anscombe 的四重奏一样,这是一场代价高昂的胜利!
你可能会说“这不是一个公平的例子......没有任何聚类方法可以正确找到那么奇怪的聚类。” 不对!尝试单链接 层次聚类:
![在此处输入图像描述](https://i.stack.imgur.com/vBuTf.png)
搞定了!这是因为单链接层次聚类对此数据集做出了正确的假设。(还有另一类失败的情况)。
你可能会说“这是一个单一的、极端的、病态的案例。” 但事实并非如此!例如,您可以将外部组设为半圆形而不是圆形,并且您会看到 k-means 仍然做得很糟糕(并且层次聚类仍然做得很好)。我可以很容易地想出其他有问题的情况,而这只是二维的。当您对 16 维数据进行聚类时,可能会出现各种问题。
最后,我应该指出,k-means 仍然可以挽救!如果您首先将数据转换为极坐标,则聚类现在可以工作:
![在此处输入图像描述](https://i.stack.imgur.com/0sUph.png)
这就是为什么理解一个方法背后的假设是必不可少的:它不仅仅告诉你一个方法什么时候有缺点,它告诉你如何解决它们。
错误假设:大小不均的集群
如果集群的点数不均匀怎么办——这是否也会破坏 k-means 聚类?好吧,考虑这组大小为 20、100、500 的集群。我已经从多元高斯生成了每个集群:
![在此处输入图像描述](https://i.stack.imgur.com/WiH4T.png)
这看起来像 k-means 可能会找到那些集群,对吧?一切似乎都生成了整齐有序的组。所以让我们试试k-means:
![在此处输入图像描述](https://i.stack.imgur.com/zAI1g.png)
哎哟。这里发生的事情有点微妙。在寻求最小化集群内平方和的过程中,k-means 算法为更大的集群提供了更多的“权重”。在实践中,这意味着很高兴让那个小集群最终远离任何中心,而它使用这些中心来“分裂”一个更大的集群。
如果你稍微玩一下这些例子(这里是 R 代码!),你会发现你可以构建更多的场景,其中 k-means 会出现令人尴尬的错误。
结论:没有免费的午餐
数学民间传说中有一个迷人的结构,由Wolpert 和 Macready形式化,称为“没有免费午餐定理”。这可能是我在机器学习哲学中最喜欢的定理,我很高兴有机会提出它(我有没有提到我喜欢这个问题?)基本思想(非严格)表述为:“当在所有可能的情况下进行平均时,每种算法的表现都一样好。”
听起来违反直觉?考虑到对于算法有效的每一种情况,我都可以构建一个它严重失败的情况。线性回归假设您的数据沿着一条线下降 - 但如果它遵循正弦波怎么办?t 检验假设每个样本都来自正态分布:如果你加入异常值怎么办?任何梯度上升算法都可能陷入局部最大值,任何监督分类都可能陷入过度拟合。
这是什么意思?这意味着假设是您的力量的来源!当 Netflix 向您推荐电影时,假设您喜欢一部电影,您会喜欢类似的电影(反之亦然)。想象一个不真实的世界,你的品味完全随机——随意地散布在流派、演员和导演中。他们的推荐算法会非常失败。说“好吧,它仍在最小化一些预期的平方误差,所以算法仍在工作”是否有意义?如果不对用户的口味做出一些假设,您就无法做出推荐算法——就像您无法在不对这些集群的性质做出一些假设的情况下做出聚类算法一样。
所以不要只接受这些缺点。了解它们,以便它们可以告知您对算法的选择。了解它们,以便您可以调整算法并转换数据以解决它们。爱他们,因为如果你的模型永远不会错,那就意味着它永远不会正确。