1

图论和数据挖掘是计算机科学的两个领域,我还是一个新手,所以原谅我的基本理解。使用python的分层聚类树状图

我被要求绘制分层聚类图的树状图。 我给出的输入如下:该图的所有边的列表。

到目前为止,我已经能够从输入中绘制图形。

下一步将对图进行聚类,然后从该聚类图绘制聚类图。

我的问题是: 有人可以给我一步一步的指导,遵循?在这个过程的两个步骤中需要/返回哪些输入/输出。 (聚类,得到树状图)

注:

到目前为止,我一直在使用图形工具来绘制图表,我也跑一个测试代码,我发现在互联网上从Scipy.clustering.hierarchy包,它似乎具有所有需要的功能。

回答

2

你是对的'Scipy.clustering.hierarchy包'是正确的,这里有一些python伪代码来向你展示大概的想法。

从您的陈述'到目前为止,我已经能够从输入中绘制图形'。 我假设你有一个美好的开始获取数据输入到蟒蛇等..

开始蟒蛇聚类伪代码

我至少需要这些Python包

import scipy.cluster.hierarchy as sch 
import numpy as np 
import sys 

你需要一个“距离度量”,如果输入的数据是“串”,那么你会使用这样的

from Levenshtein import jaro

从标签的距离矩阵

distanceMatrixDimension= len(p_names)

得到的上三角
upper_triangle=np.triu_indices(distanceMatrixDimension,1)

的坐标获得的距离得到的矩阵尺寸 distances=np.apply_along_axis(dis,0,upper_triangle)

开始从聚类算法'Scipy.clustering.hierarchy'包 得到链接矩阵Z这里'average'是方法的联动 Z=sch.linkage(distances,'average')

获取绑定用于从数据 max_dist=distances.max()

0.2产生的度量维度值。max_dist的作用就像一个阈值,实验使用不同的值 fclster=sch.fcluster(Z,0.2*max_dist,'distance')

端蟒聚类伪代码

的Z是数据 另一种方式来说这是一个链接的分级凝聚群集它是一个(分层)”树“,根节点分支到您的叶节点,这些节点通常是您要聚类的输入数据中的记录或行

去程序只是此树的可视化。有很多方法可以做到这一点,您可以从Z的维度中获得绘图变量。最好的方法是使用matlab或八度。 通常使用树形从SciPy的绘制 '树形图'

import matplotlib.pyplot as plt

然后

dendrogram(Z, color_threshold=1, labels=[....],show_leaf_counts=True)

+0

阈值范围为其中2个值? – gaurus 2017-03-21 17:33:17

+0

门槛好的信息https://github.com/scikit-learn/scikit-learn/issues/3796 – 2017-03-24 14:47:50