我正在使用 dplyr 和 broom 为我的数据计算 kmeans。我的数据包含 X 和 Y 坐标的测试和训练集,并按某个参数值(在本例中为 lambda)分组:
mds.test = data.frame()
for(l in seq(0.1, 0.9, by=0.2)) {
new.dist <- run.distance.model(x, y, lambda=l)
mds <- preform.mds(new.dist, ndim=2)
mds.test <- rbind(mds.test, cbind(mds$space, design[,c(1,3,4,5)], lambda=rep(l, nrow(mds$space)), data="test"))
}
> head(mds.test)
Comp1 Comp2 Transcripts Genes Timepoint Run lambda data
7A_0_AAGCCTAGCGAC -0.06690476 -0.25519106 68125 9324 Day 0 7A 0.1 test
7A_0_AAATGACTGGCC -0.15292848 0.04310200 28443 6746 Day 0 7A 0.1 test
7A_0_CATCTCGTTCTA -0.12529445 0.13022908 27360 6318 Day 0 7A 0.1 test
7A_0_ACCGGCACATTC -0.33015913 0.14647857 23038 5709 Day 0 7A 0.1 test
7A_0_TATGTCGGAATG -0.25826098 0.05424976 22414 5878 Day 0 7A 0.1 test
7A_0_GAAAAAGGTGAT -0.24349387 0.08071162 21907 6766 Day 0 7A 0.1 test
我有head
上面的测试数据集,但我也有一个mds.train
包含我的训练数据坐标的名称。我的最终目标是对按 lambda 分组的两个集合运行 k-means,然后为训练中心上的测试数据计算 inside.ss、between.ss 和 total.ss。多亏了有关 broom 的大量资源,我只需执行以下操作即可为测试集的每个 lambda 运行 kmeans:
test.kclusts = mds.test %>%
group_by(lambda) %>%
do(kclust=kmeans(cbind(.$Comp1, .$Comp2), centers=length(unique(design$Timepoint))))
然后我可以为每个 lambda 中的每个集群计算这些数据的中心:
test.clusters = test.kclusts %>%
group_by(lambda) %>%
do(tidy(.$kclust[[1]]))
这就是我卡住的地方。我如何计算参考页面上类似显示的功能分配(例如kclusts %>% group_by(k) %>% do(augment(.$kclust[[1]], points.matrix))
),其中 my points.matrix
ismds.test
是一个 data.frame ,length(unique(mds.test$lambda))
其行数应为应有的倍数?有没有办法以某种方式使用训练集中的中心来计算glance()
基于测试任务的统计数据?
任何帮助将不胜感激!谢谢!
编辑:更新进度。我已经弄清楚如何汇总测试/培训作业,但在尝试从两组计算 kmeans 统计数据时仍然遇到问题(测试中心的培训作业和培训中心的测试作业)。更新的代码如下:
test.kclusts = mds.test %>% group_by(lambda) %>% do(kclust=kmeans(cbind(.$Comp1, .$Comp2), centers=length(unique(design$Timepoint))))
test.clusters = test.kclusts %>% group_by(lambda) %>% do(tidy(.$kclust[[1]]))
test.clusterings = test.kclusts %>% group_by(lambda) %>% do(glance(.$kclust[[1]]))
test.assignments = left_join(test.kclusts, mds.test) %>% group_by(lambda) %>% do(augment(.$kclust[[1]], cbind(.$Comp1, .$Comp2)))
train.kclusts = mds.train %>% group_by(lambda) %>% do(kclust=kmeans(cbind(.$Comp1, .$Comp2), centers=length(unique(design$Timepoint))))
train.clusters = train.kclusts %>% group_by(lambda) %>% do(tidy(.$kclust[[1]]))
train.clusterings = train.kclusts %>% group_by(lambda) %>% do(glance(.$kclust[[1]]))
train.assignments = left_join(train.kclusts, mds.train) %>% group_by(lambda) %>% do(augment(.$kclust[[1]], cbind(.$Comp1, .$Comp2)))
test.assignments$data = "test"
train.assignments$data = "train"
merge.assignments = rbind(test.assignments, train.assignments)
merge.assignments %>% filter(., data=='test') %>% group_by(lambda) ... ?
我在下面附上了一个图表,说明了我在这一点上的进展。重申一下,我想计算训练数据中心在测试任务/坐标(中心看不到的图)上的 kmeans 统计量(在平方和内、总平方和之间以及在平方和之间):