scipy聚类图dendrogram详解

发布时间:2024年01月21日

文章目录

入手

dendrogram是scipy提供的聚类树形图绘制函数,其使用方法大致如下

from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
Y = [[i] for i in [2, 8, 0, 4, 1, 9, 9, 0]]

Z = linkage(Y, 'single')
dendrogram(Z)
plt.show()

其效果如图所示

在这里插入图片描述

很明显 2 , 5 , 1 , 0 , 3 , 4 2,5,1,0,3,4 2,5,1,0,3,4并不是 Y Y Y中的数据,而应该理解为 Y Y Y中数据类别的编号,记作 X X X

Y28041990
X01234567

下面逐条解析聚类图

  • 2 2 2 7 7 7对应 0 0 0 0 0 0,二者相差0,并且组成一个新的类,编号为8。
  • 5 5 5 6 6 6对应 9 9 9 9 9 9,二者相差0,组成新类,编号为9。
  • 0 0 0 4 4 4对应 2 2 2 3 3 3,二者相差1,组成新类,编号为10。
  • 3 3 3 8 8 8对应 4 4 4 { 2 : 0 , 7 : 0 } \{2:0,7:0\} {2:0,7:0},距离为2,组成新类,编号为11。
  • ……以此类推

这个图与矩阵 Z Z Z有着一一对应的关系,下面以 Z i j Z_{ij} Zij?表示矩阵 Z Z Z的第 i i i行第 j j j列,列表如下

i i i Z i 0 Z_{i0} Zi0? Z i 1 Z_{i1} Zi1? Z i 2 Z_{i2} Zi2? Z i 3 Z_{i3} Zi3?类别
027028
156029
2041210
38101411
4191312
53112513
612134814

至此便明白了聚类图以及聚类矩阵的含义。

参数

dendrogram函数的完整参数如下

dendrogram(Z, p=30, truncate_mode=None, color_threshold=None, get_leaves=True, orientation='top', labels=None, count_sort=False, distance_sort=False, show_leaf_counts=True, no_plot=False, no_labels=False, leaf_font_size=None, leaf_rotation=None, leaf_label_func=None, show_contracted=False, link_color_func=None, ax=None, above_threshold_color='C0')

各参数含义如下

  • Z 连接矩阵
  • p 调节truncate_mode的参数
  • truncate_mode 当Z特别大的时候,聚类图会变得很难看,本参数的作用就是让聚类图适当稀疏一些,有一下几个选项
    • None 不做任何优化
    • 'lastp' 最后面的p个簇显示为一个叶节点。
    • 'level' 只现实到第p级的聚类簇。
  • color_threshold 设置颜色阈值
  • get_leaves 为True时,在结果字典中包含 R[‘leaves’]=H 的列表。
  • orientation 图的方向,可选参数包括:'top', 'botton', 'left', 'right'
  • labels 默认为None,则直接用节点号作为标签;否则可输入一个列表,用于映射标签。
  • count_sort 对于节点n,其两个下级连接的左右次序由本参数决定,可选下列参数
    • False 什么也不做
    • 'ascending'或者True 先画小值子节点
    • 'descending' 先画大值子节点
  • distance_sortcount_sort功能相似,且二者不能同时为True,可选参数如下
    • False 什么也不做
    • 'ascending'或者True 先画距离更小的子节点
    • 'descending' 先画距离更大的子节点
  • show_leaf_counts 当为True时,叶节点在括号中标注其所包含的观测数据的数量。
  • no_plotTrue时,不对图形进行渲染,此时无法调用plt.show()
  • no_labels 设为True则不显示标签
  • leaf_rotation 标签文字旋转角度
  • leaf_font_size 标签的字体尺寸
  • leaf_label_func 用于调整标签的函数
  • show_contracted 当为True时,进入截断模式,即对叶节点进行缩进,变成十字。
  • link_color_func 用于调整连接线颜色的函数
  • ax 绘图的坐标轴,用matplotlib的都懂,不用的也没必要知道
  • above_threshold_color 绘图颜色字符串,默认为C0

显示层级

dendrogram中的参数实在是太多了,没法一一演示,下面演示一下参数 p p p对聚类图像的调控

import numpy as np
import matplotlib.pyplot as plt
ys = np.random.randint(200, size=[50,1])
Z = linkage(ys, 'single')

fig = plt.figure()

ax = fig.add_subplot(211, title='None')
dn = dendrogram(Z, ax=ax)

for i,L in enumerate([1,2,4], 4):
    ax = fig.add_subplot(2,3,i,title=f"level={L}")
    dn = dendrogram(Z, p=L, truncate_mode='level', ax=ax, show_contracted=True)

plt.show()

结果如下

在这里插入图片描述

文章来源:https://blog.csdn.net/m0_37816922/article/details/135653200
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。