图论和数据挖掘是计算机科学的两个领域,我还是新手,所以请原谅我的基本理解。
我被要求绘制分层聚类图的树状图。 我给出的输入如下:该图的所有边的列表。
到目前为止,我已经能够从输入中绘制图形。
下一步是对图形进行聚类,然后从该聚类图中绘制树形图。
我的问题是: 有人可以给我一步一步指导吗?在过程的两个步骤中需要/返回什么输入/输出。 (聚类,得到树状图)
注意:
到目前为止,我一直在使用图形工具绘制图形,我还运行了一个我在互联网上从Scipy.clustering.hierarchy包中找到的测试代码,它似乎具有所有需要的功能。
答案 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)