图论和数据挖掘是我对计算机科学还很陌生的两个领域,所以请原谅我的基本理解。
我被要求绘制层次聚类图的树状图。 我得到的输入如下:该图所有边的列表。
到目前为止,我已经能够根据输入绘制图表。
下一步将对图进行聚类,然后根据该聚类图绘制树状图。
我的问题是: 有人可以给我一个循序渐进的指南吗?在该过程的两个步骤中需要/返回什么输入/输出。 (聚类,获取树状图)
注:
到目前为止,我一直在使用 graph-tool 来绘制图表,我还运行了我在互联网上从 Scipy.clustering.hierarchy 包中找到的测试代码,它似乎具有所有需要的功能。
你是对的,“Scipy.clustering.hierarchy package”是正确的,这里有一些 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)
这是Python中树状图的代码
# Import necessary libraries
import numpy as np
import pandas as pd
from scipy.cluster.hierarchy import linkage, fcluster, dendrogram
import matplotlib.pyplot as plt
# Sample data: Replace this with your actual grain data
# For example, let's create a DataFrame with some sample grain data
data = {
'Variety': ['Wheat', 'Barley', 'Oats', 'Rye', 'Corn'],
'Feature1': [1.0, 2.0, 1.5, 2.5, 3.0],
'Feature2': [2.0, 1.0, 1.5, 2.0, 3.5]
}
# Create a DataFrame
df = pd.DataFrame(data)
# Extract the features and varieties
samples = df[['Feature1', 'Feature2']].values
varieties = df['Variety'].values
# Calculate the linkage: mergings
mergings = linkage(samples, method='complete')
# Plot the dendrogram, using varieties as labels
plt.figure(figsize=(10, 5))
dendrogram(mergings,
labels=varieties,
leaf_rotation=90,
leaf_font_size=10,
)
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Varieties')
plt.ylabel('Distance')
plt.show()