在R中为K-Prototype聚类生成类似clusplot的类簇可视化
实现K-Prototype聚类的可视化(类似K-Means的clusplot)
嗨,刚接触K-Prototype就能想到要做可视化,这点很棒!因为混合类型数据的聚类可视化确实比纯数值数据麻烦一点,但我们可以通过两种方式来实现类似clusplot的效果——一种是看聚类的特征轮廓,另一种是做降维后的聚类分布散点图:
1. 先完善你的K-Prototype模型代码
首先确保你的模型能稳定运行,lambda参数设为NULL时,函数会自动根据数据中分类变量的占比计算权重;你也可以手动调整(比如lambda=0.5,平衡连续和分类变量的影响)。另外keep.data=TRUE一定要保留,这样后续可视化能调用原始数据:
install.packages("clustMixType") install.packages("cluster") # 后续计算Gower距离会用到 install.packages("ggplot2") # 制作美观的散点图 library(clustMixType) library(cluster) library(ggplot2) # 读取客户数据 data = read.csv("customerdata.csv", header = TRUE) # 训练K-Prototype模型(建议nstart设大一点,避免局部最优) kproto = kproto(data, k=5, lambda = NULL, iter.max = 100, nstart = 5, keep.data = TRUE)
2. 方法一:用clprofiles绘制聚类特征轮廓图
这是clustMixType包自带的可视化工具,能直接展示每个聚类在连续变量上的均值和分类变量上的众数,帮你快速理解每个聚类的核心特征,类似clusplot里的特征展示部分:
# 绘制聚类轮廓图,用自定义颜色区分不同聚类 clprofiles(kproto, data, col = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2"), main = "K-Prototype 聚类特征轮廓", las = 2) # las=2让纵轴标签垂直,避免文字重叠
这个图会把每个变量的特征按聚类分组展示:连续变量用折线呈现均值变化,分类变量用柱状图展示众数占比,非常直观。
3. 方法二:制作类似clusplot的降维散点图
如果你想要像clusplot那样把高维数据降到2维,直观展示聚类的分布和边界,可以按以下步骤操作:
步骤3.1 计算混合数据的Gower距离
K-Prototype本身基于混合数据的距离逻辑,我们用Gower距离匹配模型的计算规则:
# 计算Gower距离矩阵(适配混合类型数据) gower_dist = daisy(data, metric = "gower")
步骤3.2 用MDS做降维(得到2维坐标)
MDS(多维缩放)适合基于距离矩阵的降维,能最大程度保留样本间的相对距离关系:
# 执行MDS降维,得到2维坐标 mds = cmdscale(gower_dist, k=2) # 把坐标转成数据框,方便后续绘图 mds_df = data.frame( Dim1 = mds[,1], Dim2 = mds[,2], Cluster = as.factor(kproto$cluster) )
步骤3.3 绘制类似clusplot的散点图
用ggplot2绘制美观的散点图,添加聚类中心和置信椭圆,模拟clusplot的效果:
# 计算每个聚类的MDS中心 cluster_centers = aggregate(cbind(Dim1, Dim2) ~ Cluster, data = mds_df, FUN = mean) # 绘制散点图 ggplot(mds_df, aes(x=Dim1, y=Dim2, color=Cluster)) + geom_point(size=2, alpha=0.7) + # 绘制样本点 geom_point(data=cluster_centers, aes(x=Dim1, y=Dim2), size=5, shape=8) + # 标记聚类中心 stat_ellipse(level=0.68, linetype=2) + # 添加聚类置信椭圆(类似clusplot的边界) labs(title="K-Prototype 聚类2维可视化(MDS降维)", x="维度1", y="维度2") + theme_minimal() + scale_color_manual(values = c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2"))
这个图就和clusplot的核心效果一致了——能直观看到不同聚类在2维空间的分布,椭圆可以帮你判断聚类的紧凑程度。
小提示
- 如果你的数据里分类变量占比很高,也可以先用MCA(多重对应分析)处理分类变量,再和PCA处理的连续变量结果合并,但Gower距离+MDS的方法更通用,适配所有混合类型数据场景。
nstart参数建议设为5或10,能让K-Prototype找到更优的聚类结果,避免陷入局部最优解。
内容的提问来源于stack exchange,提问作者Marshall Gu
相关产品推荐
相关产品推荐

