在Python中计算K-意味着对位置数据进行聚类



我有一个用户及其音乐播放的数据集,每个播放都有位置数据。对于每一个用户,我都想把他们的播放进行聚类,看看他们是否在给定的位置播放音乐。

我计划使用sci工具包learn k-means包,但我如何使其与位置数据一起使用,而不是默认的欧氏距离?

一个它工作的例子真的会帮助我!

不要将k-均值与欧几里得距离以外的任何距离一起使用。

K-means是而不是设计用于处理其他距离度量(参见曼哈顿距离的K-medians,任意其他距离函数的K-medoid aka.PAM)。

k-均值的概念是方差最小化。方差本质上与欧几里得距离的平方相同,但它与其他距离不同。

你考虑过DBSCAN吗?sklearn应该有DBSCAN,现在应该有索引支持,使其快速运行。

数据是否已经在矢量空间中,例如gps坐标?如果是这样的话,你可以直接对它进行聚类,lat和lon离x和y足够近,这应该无关紧要。如果没有,则必须应用预处理将其转换为矢量空间格式(例如,将位置表查找为坐标)。欧几里得距离是处理向量空间数据的一个很好的选择。

要回答他们是否在给定位置播放音乐的问题,首先根据他们的位置数据拟合kmean模型,然后使用cluster_centers_属性找到他们集群的"位置"。然后检查这些集群中心是否离您要检查的位置足够近。这可以通过对scipy.spatial.distance.中的距离函数进行阈值处理来实现

提供一个完整的例子有点困难,因为我没有数据集,但如果你想要的话,我可以提供一个给定任意x和y坐标的例子。

还要注意,KMean可能并不理想,因为您必须手动设置集群的数量"k",这可能因人员而异,或者在KMean周围有更多的包装代码来确定"k"。还有其他聚类模型可以自动确定聚类的数量,例如meanshift,在这种情况下可能更理想,也可以告诉你聚类中心。

相关内容

  • 没有找到相关文章

最新更新