当前位置:   article > 正文

hierarchy层次聚类绘图与展平(python)_python hierarchy

python hierarchy

hierarchy是一种常用的聚类方法,可以自顶向下无限二分,从而得到不同层次的聚类结果。Python实现一般使用以下函数,其输出为一个n行4列的矩阵,表示层次聚类后的树状图。

tree = scipy.cluster.hierarchy.linkage(arr,'ward')

输出示例如下,前两列代表每一步合并的两个簇,第三列为簇间距离,第四列表示合并后新簇所包含的点数量。

  1. >>> tree
  2. array([[ 0. , 1. , 1. , 2. ],
  3. [ 3. , 4. , 1. , 2. ],
  4. [ 6. , 7. , 1. , 2. ],
  5. [ 9. , 10. , 1. , 2. ],
  6. [ 2. , 12. , 1.29099445, 3. ],
  7. [ 5. , 13. , 1.29099445, 3. ],
  8. [ 8. , 14. , 1.29099445, 3. ],
  9. [11. , 15. , 1.29099445, 3. ],
  10. [16. , 17. , 5.77350269, 6. ],
  11. [18. , 19. , 5.77350269, 6. ],
  12. [20. , 21. , 8.16496581, 12. ]])

这种输出结果很方便绘制树形的可视化聚类图,例如使用dendrogram()函数:

  1. dendrogram(tree)
  2. plt.show()

注意dendrogram()绘制的时候调用了matplotlib库,因此在头文件处设置backend是没用的,需要在调用的函数内部设置或者查看backend,函数如下:

  1. matplotlib.use('TkAgg')
  2. dendgrotam(tree)
  3. print(matplotlib.get_backend())

如果要得到不同层次确切的聚类结果需使用fcluser()函数:

result = fcluster(tree,t=3,criterion='distance')

t为形成簇时的threshold,可以控制生成簇的层次与数量。函数输出为每个样本对应簇类别所组成的列表,最大值即为簇数。结合dict.keys()与dict.values()的对应关系能够很方便地找到聚类前后的样本类别对应关系。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/774663
推荐阅读
相关标签
  

闽ICP备14008679号