在 R 中为 kmeans 设置静态中心
Set static centers for kmeans in R
我想根据预先确定的中心点 (my_center_Points) 对 Long 和 Lats (my_long_lats) 列表进行分组。
当我 运行:-
k <- kmeans(as.matrix(my_long_lats), centers = as.matrix(my_center_Points))
k$centers
不等于my_center_Points。
我假设 k-means 已经将我的中心点调整到最佳中心。但我需要的是 my_center_Points 不改变并围绕它们分组 my_long_lats。
在这个
他们谈论设置初始中心,但是如何设置一旦我 运行 k 意味着就不会改变的中心?或者有更好的聚类算法吗?
我什至可以满足于最小化中心的移动。
我在 R 方面还有很多东西要学习,非常感谢任何帮助。
centers
在执行 kmeans
聚类后自动计算。事实上,确定 centers
是划分簇组的关键点。我认为可以帮助您的几个选项。
限制iter.max
。您可以在 kmeans
函数调用中将其设置为 1
。这不能保证保持中心不变,但如果您处理大型数据集,变化会更少。
使用虚拟数据。您可以在所选 centers
附近的实际数据集中添加许多 dummy
数据。这将为预先确定的 centers
增加额外的权重。 centers
很可能会保持不变。
这里是使用 geosphere
库正确计算经纬度距离的计算。
变量closestcenter
是确定离每个点最近的中心的结果。
#define random data
centers<-data.frame(x=c(44,44, 50, 50), y=c(44, 50, 44, 50))
pts<-data.frame(x=runif(50, 40, 55), y=runif(50, 40, 55))
#allocate space
distance<-matrix(-1, nrow = length(pts$x), ncol= length(centers$x))
library(geosphere)
#calculate the dist matrix - the define centers to each point
#columns represent centers and the rows are the data points
dm<-apply(data.frame(1:length(centers$x)), 1, function(x){ replace(distance[,x], 1:length(pts$x), distGeo(centers[x,], pts))})
#find the column with the smallest distance
closestcenter<-apply(dm, 1, which.min)
#color code the original data for verification
colors<-c("black", "red", "blue", "green")
plot(pts , col=colors[closestcenter], pch=19)
我想根据预先确定的中心点 (my_center_Points) 对 Long 和 Lats (my_long_lats) 列表进行分组。
当我 运行:-
k <- kmeans(as.matrix(my_long_lats), centers = as.matrix(my_center_Points))
k$centers
不等于my_center_Points。
我假设 k-means 已经将我的中心点调整到最佳中心。但我需要的是 my_center_Points 不改变并围绕它们分组 my_long_lats。
在这个
我什至可以满足于最小化中心的移动。
我在 R 方面还有很多东西要学习,非常感谢任何帮助。
centers
在执行 kmeans
聚类后自动计算。事实上,确定 centers
是划分簇组的关键点。我认为可以帮助您的几个选项。
限制
iter.max
。您可以在kmeans
函数调用中将其设置为1
。这不能保证保持中心不变,但如果您处理大型数据集,变化会更少。使用虚拟数据。您可以在所选
centers
附近的实际数据集中添加许多dummy
数据。这将为预先确定的centers
增加额外的权重。centers
很可能会保持不变。
这里是使用 geosphere
库正确计算经纬度距离的计算。
变量closestcenter
是确定离每个点最近的中心的结果。
#define random data
centers<-data.frame(x=c(44,44, 50, 50), y=c(44, 50, 44, 50))
pts<-data.frame(x=runif(50, 40, 55), y=runif(50, 40, 55))
#allocate space
distance<-matrix(-1, nrow = length(pts$x), ncol= length(centers$x))
library(geosphere)
#calculate the dist matrix - the define centers to each point
#columns represent centers and the rows are the data points
dm<-apply(data.frame(1:length(centers$x)), 1, function(x){ replace(distance[,x], 1:length(pts$x), distGeo(centers[x,], pts))})
#find the column with the smallest distance
closestcenter<-apply(dm, 1, which.min)
#color code the original data for verification
colors<-c("black", "red", "blue", "green")
plot(pts , col=colors[closestcenter], pch=19)