k-means 是一种优化方法,可最大限度地减少将数据点分配到集群中的失真。失真是簇内平方和的总和。或者,如果L是一组标签,P是一组点,如果has表示一个点有一个特定的标签,d是点之间的距离,那么
distortion = sum [ d(p1, p2)^2 | p1 <- P
, p2 <- P
, l <- L
, p1 has l and p2 has l
]
我们可以通过讨论这种失真来研究成功 k-means 优化的结果。例如,给定任意两个相互重叠的点,我们有它们之间的距离d(p1, p2) = 0,因此如果它们在同一个簇中,那么它们根本不会增加失真。因此,很明显,一个好的聚类总是在同一个聚类中包含所有重复点。
现在考虑这样的一组 3 个点
A ? B
---p----------q----------r---
换句话说,三个等距点,两个在不同标签的外侧,一个在未知标签的内侧。距离(以-es 测量)为d(p,q) = 10 = d(q,r),因此如果我们将q 标记为A,我们会将失真增加100,如果我们将其标记为B,则相同。
如果我们通过复制点p 稍微改变这种情况,那么我们根本没有增加失真(因为d(p,s) = 0)但是标记q has A 然后我们将增加d(p,q)^2 + d(s,q)^2 = 100 + 100 = 200 的失真,而如果我们将其标记为q has B,然后失真仅增加d(q,r)^2 = 100。
A ? B
---p----------q----------r---
s
因此,此复制已将 q 与标签 A 击退。
现在,如果您玩弄一下 k-means,您可能会对上面的分析感到惊讶。事实证明,添加单个点的大量复制并不会真正产生它应该产生的线性缩放影响。
这是因为已知该指标的实际优化几乎在任何情况下都是 NP 难的。如果您真的想优化它并拥有带有K 标签的n 点,那么最好的选择是检查所有K^n 标签。因此,大多数 k 均值算法都是近似的,因此您在真正的最优值和算法结果之间会遇到一些搜索错误。
对于 k-意思是,这会发生,尤其是当有很多复制点时,因为这些“复制池”仍然根据它们与质心的距离来抓取点......实际上并不是由于它们的全局最小化属性。
最后,当谈到机器学习算法中的复制时,值得注意的是,大多数机器学习算法都基于对数据的假设,这些假设积极排除了复制数据点的想法。这被广泛称为“一般位置”,许多证明都是从假设您的数据处于“一般位置”开始的。
我们的想法是,如果您的点真正分布在 R^n 中,那么在任何“好”到足以在其上构建算法的概率分布下,两个点相同的概率为 0。
这通常意味着,如果您拥有包含大量重复点的数据,则应在分析之前考虑一个小的“平滑”步骤的影响。如果通过一个小的正态分布跳跃来扰乱你的所有点不会影响数据的含义......那么你可能完全可以运行正常的 ML 算法来预测R^n 中的数据。如果不是,那么您应该考虑更好地尊重您的数据结构的算法——也许最好将您的数据视为一棵树并在结构化数据上运行机器学习算法。