我尝试使用 k-means 集群(使用 SQLserver + R),我想知道如何正确估计距离。
例如,如果我们考虑欧几里得距离形成集群的中心,如果对于同一个数据集,我们有不同大小的集群会发生什么?大集群中的“正常”点的距离将高于小集群中的“异常”点。
所以:
- 它与每个集群上的中心/尺度欧几里得距离有关吗?(然后将异常值视为具有最高比例距离的异常值)
- 还有其他距离需要考虑吗?
我尝试使用 k-means 集群(使用 SQLserver + R),我想知道如何正确估计距离。
例如,如果我们考虑欧几里得距离形成集群的中心,如果对于同一个数据集,我们有不同大小的集群会发生什么?大集群中的“正常”点的距离将高于小集群中的“异常”点。
所以:
在考虑您的问题时,需要牢记几个要点:
在应用 k-means 聚类之前,您应该始终规范化或标准化您的数据。大多数其他聚类算法也是如此。如果您在多个维度上进行聚类,则距离度量是没有意义的,除非每个维度具有相同的权重,因此标准化是必不可少的。想象一下按体重和收入将人们聚集在一起。如果没有标准化,结果将取决于您是以英镑和美元、公斤和比索还是摩尔和欧元来考虑的。缺乏规范化引入了非确定性。
严格来说,k-means 算法的稳定性已经证明了欧几里得距离度量,并且不能保证与其他距离度量的收敛。更实际地,大多数明智的指标都达到了收敛性,这并不是什么大问题,但值得提出警告。
k-means 不是一种易于用于集群内统计分析的聚类算法。空间中的每个点都是 k 个集群之一的成员,无论该点有多少异常值。还有其他聚类方法更擅长发现和忽略异常值。 DBSCAN就是这样一种算法,它非常好,可以发现集群并忽略噪声。
现在,回答你的问题:
它与每个集群上的中心/尺度欧几里得距离有关吗?(然后将异常值视为具有最高比例距离的异常值)
是的,你当然可以这样做。将 k-means 与异常值检测相结合当然是可能的,但可能不是最优雅或最有效的算法。听起来有点像穷人的 DBSCAN。欧几里得距离工作正常,但只需使用聚类的质心和标准偏差进行第二组归一化。
是否有其他类型的距离需要考虑?
由于许多不同的原因,还有许多其他有用的指标。如前所述,k 均值收敛证明仅适用于欧几里得距离。对于异常值检测,欧几里得似乎是最好的,但在某些情况下,余弦相似度指标可能有用。人们可能会建议 L1(曼哈顿)距离指标,但我发现这仅在您的数据存在显着的线性相关性时才有用,这可以通过降维来解决。
简短的回答:
试一试,因为欧几里得应该可以正常工作,但也可以通过 DBSCAN 进行聚类,它内置了异常值检测。
希望这可以帮助!