【python-scipy】scipy.cluster.hierarchy 学习 & 总结 (fcluster, linkage等)

博主最近在依据scipy的手册学习,按每个模块进行记录,对scipy其他部分有疑惑的可以看一下博主的相关合集。p.s. 更新中

层级聚类原理

当我们需要对一个集合S中的元素进行聚类的时候,我们肯定预先有一个评价标准 d d d,用于计算任意两个节点a和b之间的距离 d ( a , b ) d(a,b) d(a,b),再依据计算的结果进行聚类。说得更清楚一些,有两个方式来实现聚类,一个是从单个到总体:我们首先将每个向量都当作一个类,利用 d d d计算出两两之间的距离,合并距离最小的两个,循环进行;另一个是从整体到单一:先把所有的看作同一类,利用 d d d计算出两两之间的距离,跳出距离最大的a,b,其他向量计算到a,b的距离进而分为2类,后续以此类推。
其实看到后面会发现,这个hierarchy cluster(层级聚类)在算法上是定死的,给我们留下的空间只在于选择何种评价标准 d d d。我们首先看看这个 d d d应该有哪些性质。

度量

数学上来讲,度量是一个二元函数 D × D → R ≥ 0 \mathbf{D} \times \mathbf{D} \rightarrow \mathbb{R}_{\geq 0} D×DR0,并且满足以下三条性质:

  • 非负性(分离性)
    d ( a , b ) ≥ 0 ( ∀ a , b ∈ D ) d(a,b) \geq 0 \quad (\forall a,b \in \mathbf{D})\quad d(a,b)0(a,bD) 并且 d ( a , b ) = 0   ⇔   a = b \quad d(a,b) = 0 \, \Leftrightarrow \, a = b d(a,b)=0a=b
  • 对称性
    d ( a , b )   = d ( b , a ) ( ∀ a , b ∈ D ) d(a,b) \, = d(b,a) \quad (\forall a,b \in \mathbf{D}) d(a,b)=d(b,a)(a,bD)
  • 三角不等式
    d ( a , c )   ≤   d ( a , b ) + d ( b , c ) ( ∀ a , b ,
  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 matplotlib 模块的 savefig 函数将树状图保存为图片文件,或者使用 scipy.cluster.hierarchy.dendrogram 函数的参数 leaf_label_func 将树状图的参数保存到一个列表中。 ### 回答2: scipy.cluster.hierarchy.dendrogram函数生成树状图的参数包括层次聚类的结果、树的结构、颜色等信息。要保存这些参数,可以将它们保存为字典或文件。 一种方法是将参数保存为字典,然后将字典保存为文件。可以使用Python的pickle模块将字典保存为二进制文件,或使用json模块将字典保存为文本文件。 示例代码如下: ```python import json import pickle from scipy.cluster.hierarchy import dendrogram # 第一步,生成树状图的参数 # ... # 将参数保存为字典 params = { 'clusters': dendrogram_obj['color_list'], 'tree_structure': dendrogram_obj['dcoord'], # 其他参数... } # 第二步,将参数保存为文件 # Pickle模块保存为二进制文件 with open('dendrogram_params.pkl', 'wb') as f: pickle.dump(params, f) # Json模块保存为文本文件 with open('dendrogram_params.json', 'w') as f: json.dump(params, f) ``` 另一种方法是直接将生成的树状图保存为图片文件。可以使用Python的matplotlib库中的savefig函数将树状图保存为图片格式,如PNG、JPEG等。 示例代码如下: ```python import matplotlib.pyplot as plt from scipy.cluster.hierarchy import dendrogram # 第一步,生成树状图的参数 # ... # 第二步,绘制树状图 fig = plt.figure(figsize=(10, 5)) dendrogram(dendrogram_obj) plt.title('Dendrogram') plt.xlabel('Samples') plt.ylabel('Distance') # 第三步,保存树状图为图片文件 plt.savefig('dendrogram.png') ``` 以上是保存scipy.cluster.hierarchy.dendrogram函数生成的树状图的参数的两种方法。可根据需求选择适合的保存形式。 ### 回答3: 要保存scipy.cluster.hierarchy.dendrogram函数生成的树状图的参数,首先需要理解dendrogram函数的输出。该函数会返回一个字典,其中包含一些关键信息。 要保存树状图的参数,可以按照以下步骤进行操作: 1. 导入必要的库和模块: ```python import scipy.cluster.hierarchy as sch import matplotlib.pyplot as plt ``` 2. 使用dendrogram函数生成树状图: ```python linkage_matrix = sch.linkage(data, method='complete') # 计算层次聚类所需的链接矩阵 dendrogram = sch.dendrogram(linkage_matrix) # 生成树状图并返回相关信息 ``` 3. 将树状图的参数保存到变量中: ```python dist = dendrogram['dcoord'] # 保存垂直距离(dendrogram['dcoord']) link = dendrogram['icoord'] # 保存连线坐标(dendrogram['icoord']) ``` 4. 可选:绘制树状图并保存为图片: ```python plt.figure(figsize=(10, 5)) plt.title('Dendrogram') plt.xlabel('Samples') plt.ylabel('Distance') plt.plot(link, dist) plt.savefig('dendrogram.png') # 将树状图保存为图片 ``` 通过以上步骤,我们可以将树状图的参数保存到变量中,从而实现对其后续处理或分析。另外,我们还可以选择将树状图保存为图片,以备后续查看或分享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值