python层次聚类——基于sci库的代码实现和解释

本文介绍了如何使用Python的SciPy库进行层次聚类,详细讲解了linkage和fcluster两个关键函数,并提供了相关资源链接,帮助理解层次聚类的原理和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、代码

from scipy.cluster.hierarchy import linkage, fcluster
import numpy as np
from matplotlib import pyplot as plt

data = np.random.rand(100, 2)
# 进行层次聚类(linkage返回聚类结果矩阵z)
z = linkage(data, method = 'complete', metric = 'euclidean' )
# 输入阈值获取聚类的结果(fcluster返回每个点所属的cluster的编号)
cluster_assignments = fcluster(z, t = 0.5, criterion = 'distance')
print('Cluster assignments:', cluster_assignments)

# np.where根据cluster编号取点的索引
clusters = [np.where(i == cluster_assignments)[0].tolist() for i in range(1, cluster_assignments.max() + 1)]
print('Clusters:', clusters)
# 绘制聚类结果
for indices in clusters:
    plt.scatter(data[indices][:, 0], data[indices][:, 1])
plt.show()

输出结果:

Cluster assignments: [8 4 3 1 9 2 1 3 5 9 4 2 2 4 5 5 7 5 7 6 8 9 9 1 9 6 3 5 6 8 3 1 6 6 9 8 2 9 2 8 8 7 2 9 8 8 5 4 5 4 4 1 2 9 8 4 9 2 7 6 3 9 1 9 2 7 1 3 7 2 2 7 8 2 6 7 7 2 3 5 4 6 5 2 6 9 2 9 3 1 5 2 2 8 1 9 9 5 7 3]
Cluster: [[3, 6, 23, 31, 51, 62, 66, 89, 94], [5, 11, 12, 36, 38, 42, 52, 57, 64, 69, 70, 73, 77, 83, 86, 91, 92], [2, 7, 26, 30, 60, 67, 78, 88, 99], [1, 10, 13, 47, 49, 50, 55, 80], [8, 14, 15, 17, 27, 46, 48, 79, 82, 90, 97], [19, 25, 28, 32, 33, 59, 74, 81, 84], [16, 18, 41, 58, 65, 68, 71, 75, 76, 98], [0, 20, 29, 35, 39, 40, 44, 45, 54, 72, 93], [4, 9, 21, 22, 24, 34, 37, 43, 53, 56, 61, 63, 85, 87, 95, 96]]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值