【发布时间】:2017-03-24 20:32:33
【问题描述】:
我说有 25 位客户。每个客户都有我们系统的多个用户,例如客户 1 有 45 个用户,客户 2 有 46 个用户……客户 25 有 1000 个用户。
我想将每个客户放入一个存储桶中,每个存储桶包含大致相等数量的用户。我知道我总共想要 5 个桶。
(这里的桶代表服务器,我想将我的客户端分配到每个服务器的用户总数大致相等的不同服务器,以防止服务器过载。1个客户端必须在同一台服务器上(即不能将 1 个客户端拆分到 2 个服务器上)。
知道将客户分配到存储桶的合适方法吗?我认为一些聚类方法可能有效(我尝试使用 R 的 kmeans),但我似乎无法找到规定每个集群中的用户总数大致相同的方法。
这是我的 R 代码,作为我迄今为止所做的示例:
#Create dataset
r <- data.frame(users=c(1000, 960, 920, 870, 850, 700, 600, 550, 520, 500, 420, 400, 390, 300, 210, 200, 160, 80, 70, 50, 49, 48, 47, 46, 45))
#Try kmeans clustering
fit <- kmeans(r, 5)
#get cluster means
aggregate(r, by=list(fit$cluster),FUN = mean)
#append cluster assignment
r <- data.frame(r,fit$cluster)
#Plot cluster
library(cluster)
clusplot(r, fit$cluster, color=TRUE, shade=TRUE, labels=2, lines=0)
library(fpc)
plotcluster(r, fit$cluster)
这会将我的客户聚集到存储桶中,但每个存储桶中的用户数量并不大致相等。
我已将此标记为 R 问题,但如果其他包中有简单的解决方案,我会全力以赴 :-)
【问题讨论】:
标签: r statistics k-means bin-packing