如何用hclust绘制聚类结果?求R语言类似kmeans的聚类绘图方法
当然有办法啦!我来一步步给你讲清楚怎么用hclust实现类似kmeans的聚类绘图效果,再给你推荐几个好用的工具函数~
用hclust实现类似的聚类着色绘图
hclust属于层次聚类,和kmeans的聚类逻辑不同,但我们可以通过几个步骤实现和你给出的kmeans代码一样的可视化效果:
- 先对数据做标准化(和kmeans的步骤保持一致,避免变量尺度影响)
- 计算样本间的距离(常用欧氏距离,也可以根据需求换曼哈顿、余弦等)
- 构建层次聚类树
- 切割聚类树,得到指定数量的簇
- 用聚类结果给原始数据点着色绘图
具体代码如下:
# 数据标准化 data_scaled <- scale(data) # 计算样本间欧氏距离 dist_matrix <- dist(data_scaled, method = "euclidean") # 执行层次聚类,这里用ward.D2方法(聚合类内方差最小的策略,也可换single/complete等) fit_hclust <- hclust(dist_matrix, method = "ward.D2") # 切割聚类树,分成3个簇(和kmeans的k=3对应) clusters_hclust <- cutree(fit_hclust, k = 3) # 绘制和kmeans效果一致的2D着色图 plot(data_scaled, col = clusters_hclust, pch = 16, main = "Hierarchical Clustering Results")
注意:hclust的聚类结果可能和kmeans略有差异,毕竟两者的聚类逻辑不同,但可视化的呈现形式是完全一致的——按聚类类别给原始数据点着色。
其他支持多聚类方法的绘图工具
如果想要更简便、美观的可视化,或者支持更多聚类算法,推荐这些实用工具:
- factoextra包的
fviz_cluster函数:这是聚类可视化的利器,支持kmeans、hclust、dbscan等多种聚类方法,自动处理细节,输出美观的结果:
library(factoextra) # kmeans聚类可视化 fviz_cluster(kmeans(data_scaled, 3), data = data_scaled, geom = "point") # hclust聚类可视化(先把聚类结果整理成函数需要的格式) hc_result <- list(data = data_scaled, cluster = clusters_hclust) fviz_cluster(hc_result, geom = "point")
- ggplot2自定义绘图:如果你需要高度自定义绘图细节,用ggplot2结合聚类结果来画会非常灵活:
library(ggplot2) # 把标准化数据转换成数据框,添加聚类标签 data_df <- as.data.frame(data_scaled) data_df$cluster <- as.factor(clusters_hclust) # 绘制散点图 ggplot(data_df, aes(x = V1, y = V2, color = cluster)) + geom_point(size = 3) + theme_minimal() + labs(title = "Clustering Results with ggplot2")
- dbscan包(密度聚类):如果你的数据适合密度聚类,dbscan包可以实现,同样能轻松可视化:
library(dbscan) # 执行密度聚类,eps是邻域半径,minPts是邻域内最小样本数 fit_dbscan <- dbscan(data_scaled, eps = 0.5, minPts = 5) # +1是为了把噪声点(标记为0)换成不同的颜色 plot(data_scaled, col = fit_dbscan$cluster + 1, pch = 16, main = "DBSCAN Clustering Results")
内容的提问来源于stack exchange,提问作者Abdirizak
相关产品推荐
相关产品推荐

