如何为broom未支持的聚类方法实现tidy风格的聚类标签赋值?
解决方案
参考Stack Overflow上的提问《Alternatives to kmeans() for spotting small clusters for k=2》,评论区给出的GMM聚类示例需要先训练模型再预测标签,针对你想用dplyr风格为tibble数据集db添加簇标签的需求,有两种简洁实现方式:
方法1:自定义封装聚类函数
先写一个整合模型训练与预测逻辑的函数,直接接收选定列的数据集并返回簇标签:
library(ClusterR) library(dplyr) # 自定义GMM聚类函数,默认分2簇 gmm_cluster <- function(data, n_clusters = 2) { gmm_model <- GMM(data, gaussian_comps = n_clusters) predict(gmm_model, data) }
之后就可以按你想要的风格调用,用pick()作为列选择器(支持直接指定列名):
# 示例:选择mpg、disp、hp列进行聚类,添加cluster列 db %>% mutate(cluster = gmm_cluster(pick(mpg, disp, hp))) -> db
方法2:匿名函数一次性实现
如果不需要复用聚类逻辑,也可以直接用匿名函数在mutate内完成:
db %>% mutate(cluster = { selected_cols <- pick(mpg, disp, hp) # 选择目标列 predict(GMM(selected_cols, gaussian_comps = 2), selected_cols) }) -> db
注意事项
- 确保选定的列都是数值型,GMM算法仅支持数值数据输入
- 若需要调整簇数,修改
gaussian_comps参数即可
内容的提问来源于stack exchange,提问作者GiulioGCantone
相关产品推荐
相关产品推荐

