如何将含分类与连续变量的数据集转换为矩阵以构建相似性树状图?
构建含分类+连续变量的相似性树状图方案
你的思路完全正确——要做相似性树状图,第一步必须把包含分类和连续变量的数据集转换成距离矩阵,因为层次聚类(树状图的基础)依赖样本间的距离/相似性度量。下面给你两种主流工具的具体实现方案:
R语言实现
- 计算混合变量距离:用
cluster包的daisy()函数,它原生支持混合类型变量,默认用Gower距离(专门针对混合变量设计的距离算法)library(cluster) # 假设你的数据框是df,包含分类列cat1、cat2和连续列num1 dist_matrix <- daisy(df, metric = "gower") - 层次聚类:用
hclust()生成聚类树结构,聚类方法可以根据需求更换(比如complete、single,ward.D2是常用的最小化类内方差的方法)hc <- hclust(dist_matrix, method = "ward.D2") - 绘制树状图:
plot(hc, main = "相似性树状图", xlab = "样本", ylab = "距离")
Python语言实现
- 计算Gower距离:Python原生没有内置混合变量距离工具,需要用
gower库(先通过pip install gower安装)import gower import scipy.cluster.hierarchy as sch import matplotlib.pyplot as plt # 假设df是你的pandas数据框 dist_matrix = gower.gower_matrix(df) - 生成聚类树并绘图:
linkage_matrix = sch.linkage(dist_matrix, method='ward') plt.figure(figsize=(10, 6)) sch.dendrogram(linkage_matrix, labels=df.index, leaf_rotation=90) plt.title("相似性树状图") plt.xlabel("样本") plt.ylabel("距离") plt.show()
补充说明
- Gower距离是处理混合类型变量的首选,它会自动对不同类型变量做标准化和适配计算
- 聚类方法可以灵活调整:如果希望类间差异最大化,可选
complete;如果想让相似样本优先聚在一起,可选single - 若分类变量是有序类型(比如“低/中/高”),可以在计算距离时给不同变量设置权重,
daisy()和gower_matrix()都支持权重参数
内容的提问来源于stack exchange,提问作者Diogo Bichon
相关产品推荐
相关产品推荐

