我正在为我的数据科学类(class)介绍做一个数据科学项目,我们决定解决一个与加州海水淡化厂有关的问题:“我们应该在哪里放置 k 座工厂以尽量缩短与邮政编码的距离?”
到目前为止,我们拥有的数据是 zip 、城市、县、人口、纬度、经度、水量。
问题是,我找不到任何关于如何将质心限制在海岸上的资源。目前我们想到的是: 使用普通的 kmeans 算法,但是一旦集群稳定下来就将质心移到海岸(不好) 使用带有权重的普通 kmeans 算法,使沿海 zipper 具有无限的权重(有人告诉我这不是一个很好的解决方案)
大家怎么看?
最佳答案
K-means 不会最小化距离。
它最大限度地减少了平方误差,这是非常不同的。 差异大致是中位数和一维数据的平均值。错误可能很大。
这是一个反例,假设我们有坐标:
-1 0
+1 0
0 -1
0 101
k 均值选择的中心为 0,25。最佳位置是 0,0。 k-means 的距离总和 > 152,最佳位置的距离为 104。因此,这里的质心比最佳位置差近 50%!但是质心(= 多元均值)是 k-means 使用的!
k-means 不会最小化欧氏距离!
这是“k-means 对异常值敏感”的一种变体。
如果您试图将其限制为仅在海岸上放置“中心”,它并不会变得更好......
此外,您可能希望至少使用半正弦距离,因为在加利福尼亚州,北纬 1 度 != 东经 1 度,因为它不在赤道。
此外,您可能不假设每个位置都需要自己的管道,而是它们会像树一样连接起来。这大大降低了成本。
我强烈建议将其视为一般优化问题,而不是 k-means。 K-means 也是一种优化,但它可能会针对您的问题优化错误的函数...
关于python - 具有质心约束的 k-means,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44335137/