You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:36:25