使用python的分层聚类树形图

时间:2014-10-18 23:20:29

标签: python graph cluster-analysis hierarchical-clustering dendrogram

图论和数据挖掘是计算机科学的两个领域,我还是新手,所以请原谅我的基本理解。

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

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

下一步是对图形进行聚类,然后从该聚类图中绘制树形图。

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

注意:

到目前为止,我一直在使用图形工具绘制图形,我还运行了一个我在互联网上从Scipy.clustering.hierarchy包中找到的测试代码,它似乎具有所有需要的功能。

1 个答案:

答案 0 :(得分:2)

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

来自您的陈述'到目前为止,我已经能够从输入中绘制图表了。 我假设你有一个很好的开始将输入数据输入python等..

启动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这里'平均'是连接的方法 Z=sch.linkage(distances,'average')

获取从数据生成的指标维度值的界限 max_dist=distances.max()

0.2.max_dist就像一个阈值,尝试不同的值 fclster=sch.fcluster(Z,0.2*max_dist,'distance')

结束python聚类伪代码

Z是您数据的链接层次聚合聚类 另一种说法是它是一个(分层)“树”,其根节点分支到你的叶子节点,叶子节点通常是你想要聚类的输入数据中的记录或行

Deprogram只是这棵树的可视化。有很多方法可以做到这一点,你可以从Z的维度获得绘图变量。最好的方法是使用matlab或octave。 通常你使用scipy的树形图来绘制'树状图'

import matplotlib.pyplot as plt

然后

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