使用 python 的层次聚类树状图

问题描述 投票:0回答:2

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

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

到目前为止,我已经能够根据输入绘制图表。

下一步将对图进行聚类,然后根据该聚类图绘制树状图。

我的问题是: 有人可以给我一个循序渐进的指南吗?在该过程的两个步骤中需要/返回什么输入/输出。 (聚类,获取树状图)

注:

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

python graph cluster-analysis hierarchical-clustering dendrogram
2个回答
3
投票

你是对的,“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)


0
投票

这是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()
© www.soinside.com 2019 - 2024. All rights reserved.