文章目录
入手参数
入手
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
Y28041990X01234567
下面逐条解析聚类图
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类别027028156029204121038101411419131253112513612134814
至此便明白了聚类图以及聚类矩阵的含义。
参数
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_sort 和count_sort功能相似,且二者不能同时为True,可选参数如下
False 什么也不做'ascending'或者True 先画距离更小的子节点'descending' 先画距离更大的子节点 show_leaf_counts 当为True时,叶节点在括号中标注其所包含的观测数据的数量。no_plot 为True时,不对图形进行渲染,此时无法调用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()
结果如下
相关链接
发表评论