R语言中为K-means聚类结果匹配鸢尾花物种标签的方法咨询
K-means聚类编号映射鸢尾花物种优化方案
K-means输出的聚类编号本身是无顺序的随机标识,硬编码编号和物种的对应关系、固定随机种子的方式适配性极差,你可以用以下更简便的方案实现需求:
方案1:静态映射(替代原有循环,代码极简)
用命名向量做批量匹配,完全替代多层循环,代码量大幅缩减:
# 按需调整编号对应的物种名即可 cluster_map <- c("1" = "versicolor", "2" = "setosa", "3" = "virginica") km.out$cluster <- cluster_map[as.character(km.out$cluster)]方案2:自动动态映射(无需固定随机种子)
不需要提前指定编号对应关系,通过统计每个聚类中占比最高的真实鸢尾花物种,自动完成映射,适配所有运行环境和参数调整场景:
基础包实现(无需加载第三方库)
# 生成聚类编号和真实物种的交叉表 cross_tb <- table(km.out$cluster, iris$Species) # 每个聚类匹配出现频次最高的物种 cluster_map <- colnames(cross_tb)[max.col(cross_tb)] names(cluster_map) <- rownames(cross_tb) # 批量替换聚类编号 km.out$cluster <- cluster_map[as.character(km.out$cluster)]dplyr实现(语法更易读)
library(dplyr) cluster_map <- data.frame(cluster = km.out$cluster, species = iris$Species) %>% group_by(cluster) %>% count(species, sort = TRUE) %>% slice(1) %>% pull(species, name = cluster) km.out$cluster <- cluster_map[as.character(km.out$cluster)]
内容的提问来源于stack exchange,提问作者Jason。
相关产品推荐
相关产品推荐

