如何在 R 中对给定固定簇大小的 lat-long 进行聚类?

Posted

技术标签:

【中文标题】如何在 R 中对给定固定簇大小的 lat-long 进行聚类?【英文标题】:How to cluster lat-long given fixed cluster size in R? 【发布时间】:2016-01-26 10:41:56 【问题描述】:

我有大约 50 个位置,我想在空间上对它们进行聚类,并且聚类的大小是固定的。说以下几个位置。

lat<-c(17.48693,17.49222,17.51965,17.49359,17.49284,17.47077)
long<-c(78.38945,78.39643,78.37835,78.40079,78.40686,78.35874)

假设我想用簇大小 ~ 3 对它们进行聚类

你能帮忙吗?

【问题讨论】:

您可以从标准算法(如 K-means 或层次聚类)开始,然后添加一些后处理来调整聚类的大小。有一些关于here和here的讨论。 如果空间坐标是唯一的特征,你不能手动定义集群吗? 50 个位置/3 个位置/集群 = 17 个集群或组。容易做,比编码快得多,但最简单的程序。 【参考方案1】:

您可以尝试使用 kmeans,它是 baseR 的一部分。这是一个针对 3 个中心的简单代码:

result <- kmeans(df, 3)
> result
K-means clustering with 3 clusters of sizes 4, 1, 1

Cluster means:
       lat      lng
1 17.49140 78.39838
2 17.47077 78.35874
3 17.51965 78.37835

Clustering vector:
[1] 1 1 3 1 1 2

请记住,不能保证您的数据可以很好地适合 kmeans 和 3 个中心。这轮 kmeans 导致 4 个观测值最终在一个集群中,而其他 2 个集群只有 1 个观测值。如果你对这次跑步不满意,你可以玩一会儿,直到你能集中精力找到合适的东西。

这里有一个link to a tutorial 可能会有所帮助。

【讨论】:

谢谢您的帮助。我的问题是我想要固定大小的集群。假设每个集群大约应该包含相同数量的点。 我不知道kmeans 是否允许这样做。为什么会有这个要求? 通常我使用包 'code'(leaderCluster) 对位置进行聚类,但它提供了不同大小的聚类。同上 对每个集群强制执行相同数量的观察可能会导致不合适的结果。为什么需要这个? 我需要这个,因为代理需要覆盖一些区域才能访问待售地块。他只能参观,比如说每天只能参观 10 间房子。因此,他可以在一周内覆盖 50 座房屋。因此,对于每个代理,我需要定义这 50 个不同的访问地点。因此我需要一个城市中大小为 50 的集群【参考方案2】:

对于这样的微小数据,

枚举所有可接受的选项(例如所有具有 3+3 个对象的选项) 选择最好的

必须定义什么是“最佳”解决方案。

【讨论】:

以上是关于如何在 R 中对给定固定簇大小的 lat-long 进行聚类?的主要内容,如果未能解决你的问题,请参考以下文章

如何在golang中对固定长度的数组进行排序?

R语言KMeans聚类模型示例

R语言ggplot2可视化:ggplot2可视化散点图并使用geom_mark_circle函数在数据簇或数据分组的数据点周围添加圆圈进行注释(自定义圆圈的大小)

如何在 R 中绘制时间序列簇? [复制]

如何在 2D numpy 数组中查找簇大小?

每次我使用融合位置 api 获取 lat-long 时都会改变 Lat-long,即使我仍然在同一个位置