python - 具有质心约束的 k-means

标签 python algorithm k-means data-science

我正在为我的数据科学类(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/

相关文章:

python - Matlab k-means cosine 将所有内容分配给一个簇

python - Python 异常的最佳实践?

DD-WRT嵌入式路由器上的Python脚本

c++ - 从3个数组生成最接近的三元组的有效算法?

php - 将字符串拆分为字典单词

algorithm - 如何计算数字的 k 进制表示中第 i 个数字的值?

python - 属性错误: 'list' object has no attribute 'dropna' (outlier)

python - 带有本地 Django 1.1 的 Google App Engine 出现间歇性故障

python - pandas 中的多个文件组合

algorithm - R kmeans 初始化