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

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

一、代码

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,
层次聚类分析是一种基于距离度量的聚类算法,它通过计算不同样本之间的距离,将样本逐步合并为越来越大的簇,直至达到预设的聚类数量或者满足某种条件为止。 在基站定位数据商圈分析中,我们可以将商圈看作是一个点集合,每个点表示商圈中心的位置。我们可以使用层次聚类分析对这些点进行聚类,从而发现不同的商圈、商圈之间的相似性以及热门商圈的分布情况。 下面是一个使用Python进行层次聚类分析的示例代码: ```python import pandas as pd import numpy as np from scipy.spatial.distance import pdist, squareform from scipy.cluster.hierarchy import linkage, dendrogram # 读取商圈数据 df = pd.read_csv('business_districts.csv') # 计算商圈之间的距离矩阵 dist_matrix = pdist(df.iloc[:, 1:], metric='euclidean') # 使用Ward方法进行层次聚类 linkage_matrix = linkage(dist_matrix, method='ward') # 绘制树状图 dendrogram(linkage_matrix) # 显示结果 plt.show() ``` 在上面的代码中,我们首先读取了商圈数据,并计算了商圈之间的欧几里得距离矩阵。然后使用Ward方法进行层次聚类,并绘制了树状图。 树状图可以帮助我们直观地了解聚类结果,其中每个叶节点表示一个商圈,不同颜色的线段表示不同的簇。我们可以根据树状图中的切割点,将商圈分成不同的簇,从而得到不同的商圈群组。 除了树状图,我们还可以使用其他的聚类评估指标,如轮廓系数、Calinski-Harabasz指数等,来评估聚类结果的质量。最终,我们可以根据聚类结果,进一步分析商圈的特点和分布情况,为商业决策提供参考。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值