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

如何将含分类与连续变量的数据集转换为矩阵以构建相似性树状图?

构建含分类+连续变量的相似性树状图方案

你的思路完全正确——要做相似性树状图,第一步必须把包含分类和连续变量的数据集转换成距离矩阵,因为层次聚类(树状图的基础)依赖样本间的距离/相似性度量。下面给你两种主流工具的具体实现方案:

R语言实现

  1. 计算混合变量距离:用cluster包的daisy()函数,它原生支持混合类型变量,默认用Gower距离(专门针对混合变量设计的距离算法)
    library(cluster)
    # 假设你的数据框是df,包含分类列cat1、cat2和连续列num1
    dist_matrix <- daisy(df, metric = "gower")
    
  2. 层次聚类:用hclust()生成聚类树结构,聚类方法可以根据需求更换(比如complete、single,ward.D2是常用的最小化类内方差的方法)
    hc <- hclust(dist_matrix, method = "ward.D2")
    
  3. 绘制树状图:
    plot(hc, main = "相似性树状图", xlab = "样本", ylab = "距离")
    

Python语言实现

  1. 计算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)
    
  2. 生成聚类树并绘图:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:56:06