基于R语言apcluster库与iris数据集:留存聚类所属样本的方法
嘿,这就帮你搞定用R的apcluster包对iris数据集做聚类分析的需求,步骤清晰,结果直接能用!
使用R的apcluster库对iris数据集进行聚类分析
1. 准备工作:安装加载包与数据集
首先得确保apcluster包已经安装,没装的话先搞定安装,然后加载包和经典的iris数据集:
# 检查并安装apcluster包 if (!require("apcluster")) { install.packages("apcluster") library(apcluster) } # 加载iris数据集 data(iris)
2. 运行亲和传播聚类
亲和传播的好处是不需要预先指定聚类数量,它会自动根据数据推导。这里我们用iris的前4个特征列来计算相似度(默认用负的平方欧氏距离,因为apcluster需要的是“相似度”而非“距离”,值越高代表样本越相似):
# 执行亲和传播聚类 ap_result <- apcluster(negDistMat(r=2), iris[,1:4])
3. 查看聚类核心信息
运行完聚类后,我们先看看有多少个聚类,以及每个聚类包含多少样本:
# 查看聚类总数 cat("聚类总数:", length(ap_result@clusters), "\n") # 提取并打印每个聚类的样本数量 cluster_sizes <- sapply(ap_result@clusters, length) cat("各聚类样本数:\n") print(cluster_sizes)
你会得到类似这样的输出(因为亲和传播有一定随机性,结果可能略有波动,但iris数据很规整,通常会分出3类,和原始物种对应):
聚类总数: 3 各聚类样本数: [1] 50 50 50
4. 留存每个聚类的样本
接下来把每个聚类的样本单独提取出来,可以存在列表里方便后续分析,也可以直接导出成CSV文件永久保存:
# 把每个聚类的样本提取到列表中 cluster_samples <- lapply(ap_result@clusters, function(idx) iris[idx, ]) # (可选)将每个聚类导出为CSV文件 for (i in 1:length(cluster_samples)) { write.csv(cluster_samples[[i]], file = paste0("iris_cluster_", i, ".csv"), row.names = FALSE) }
5. 生成带聚类标签的结果表格
如果需要一个完整的表格,显示每个样本所属的聚类,我们可以给原始iris数据集添加一列聚类标签,然后导出:
# 创建带聚类标签的数据集 iris_with_cluster <- iris iris_with_cluster$cluster <- NA # 先初始化聚类列 # 给每个样本分配对应的聚类编号 for (i in 1:length(ap_result@clusters)) { iris_with_cluster$cluster[ap_result@clusters[[i]]] <- i } # 查看前6行结果 head(iris_with_cluster) # (可选)导出完整结果表格到CSV write.csv(iris_with_cluster, file = "iris_clustered_full_result.csv", row.names = FALSE)
带聚类标签的表格示例(前6行):
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species | cluster |
|---|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa | 1 |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa | 1 |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa | 1 |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa | 1 |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa | 1 |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa | 1 |
内容的提问来源于stack exchange,提问作者psysky
相关产品推荐
相关产品推荐

