基于Pearson相关的R语言k-means聚类(ClusterR)实现求助
问题解决:ClusterR实现基于Pearson相关的K-Means聚类并指定迭代次数
问题诊断
你的代码存在三个核心问题:
- 算法选择错误:
Clara_Medoids是CLARA中心点聚类算法,并非K-Means,且确实不支持指定迭代次数; - 参数设置矛盾:
samples = entire_sample(用全量数据做采样)和sample_size = 1(采样大小为1)完全违背CLARA的采样逻辑,导致算法无法正常生成聚类结果; - 语法错误:最后赋值语句用反引号包裹,属于无效语法,无法将聚类标签写入原数据集。
修正后的代码
使用ClusterR包中的KMeans_rcpp函数,它支持基于Pearson相关的距离度量,且可以指定初始化/迭代次数:
library(ClusterR) library(dplyr) # 加载数据(假设Coefficients已存在) # 保留Panelist列用于后续匹配,仅用系数列做聚类 cluster_data <- Coefficients %>% select(Coeff1, Coeff2, Coeff3, Coeff4) # 运行基于Pearson相关的K-Means聚类,指定2类、20次初始化迭代 kmeans_result <- KMeans_rcpp( data = cluster_data, clusters = 2, num_init = 20, # 指定20次初始化迭代 distance_metric = "pearson_correlation", verbose = FALSE, seed = 1 ) # 将聚类标签合并到原数据集 Coefficients$clusterID <- kmeans_result$clusters # 保存结果 write.csv(Coefficients, "path/to/results.csv")
关键说明
- 算法适配:
KMeans_rcpp是ClusterR中专门实现K-Means的函数,支持pearson_correlation作为距离度量,完全匹配Systat中基于Pearson相关的K-Means需求; - 迭代次数控制:
num_init参数控制K-Means的初始化次数(每次初始化对应一轮完整的迭代收敛过程),设置为20即可满足你的需求; - 数据处理:用
dplyr::select更简洁地提取聚类用的系数列,避免重复赋值; - 语法修正:直接通过
kmeans_result$clusters提取聚类标签,无需反引号包裹赋值语句。
内容的提问来源于stack exchange,提问作者Stef
相关产品推荐
相关产品推荐

