当前位置: 代码网 > it编程>软件设计>算法 > scipy聚类图dendrogram详解

scipy聚类图dendrogram详解

2024年08月02日 算法 我要评论
dendrogram是`scipy`提供的聚类树形图绘制函数,其使用方法大致如下。dendrogram中的参数实在是太多了,没法一一演示,下面演示一下参数$p$对聚类图像的调控

文章目录

入手

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()

结果如下

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com