我已阅读k-means: Same clusters for every execution。
但它并没有解决我遇到的问题。我正在抽样大小不一的数据(大小增加)。我需要使用k-means聚类数据,但我遇到的问题是群集的每个样本都不同。需要注意的重要一点是,我的t+1
样本将始终包含t
样本中的所有组件。所以它慢慢变得越来越大。我需要的是一种能够让集群保持不变的方法。除了使用set.seeds
之外还有其他方法吗?我愿意接受任何解决方案。
答案 0 :(得分:2)
我能想到实现这一目标的最佳方式是首先使用k-means对数据进行聚类,然后将所有其他数据简单地分配给最近的聚类(设置随机种子将无法帮助您将新聚类嵌套到最近的聚类中在原来的)。正如this question的答案中详述的那样,flexclust
包使这很简单:
# Split into "init" (used for initial clustering) and "later" (assigned later)
set.seed(100)
spl <- sample(nrow(iris), 0.5*nrow(iris))
init <- iris[spl,-5]
later <- iris[-spl,-5]
# Build the initial k-means clusters with "init"
library(flexclust)
(km <- kcca(init, k=3, kccaFamily("kmeans")))
# kcca object of family ‘kmeans’
#
# call:
# kcca(x = init, k = 3, family = kccaFamily("kmeans"))
#
# cluster sizes:
#
# 1 2 3
# 31 25 19
# Assign each element of "later" to the closest cluster
head(predict(km, newdata=later))
# 2 5 7 9 14 18
# 2 2 2 2 2 2