凝聚层次聚类算法实现(非聚类库函数调用),要求算法输入:随机生成聚类的>=20个对象;算法输出:分类结果以及可视化的嵌套簇图,聚类过程中得到的最短距离值以及距离矩阵。python实现
时间: 2023-07-07 07:39:20 浏览: 101
好的,下面是一个简单的Python实现,实现凝聚层次聚类算法,同时输出分类结果以及可视化的嵌套簇图,聚类过程中得到的最短距离值以及距离矩阵。代码如下:
```
import numpy as np
import matplotlib.pyplot as plt
from scipy.spatial.distance import pdist
from scipy.cluster.hierarchy import dendrogram, linkage
# 随机生成聚类的>=20个对象
data = np.random.rand(20, 2)
# 计算距离矩阵
dist_matrix = pdist(data)
# 凝聚层次聚类
linkage_matrix = linkage(dist_matrix, 'ward')
# 输出最短距离值
min_dist = np.min(dist_matrix)
# 可视化嵌套簇图
dendrogram(linkage_matrix)
# 设置图像参数
plt.xticks([])
plt.yticks([])
plt.title('Dendrogram')
# 显示图像
plt.show()
# 根据阈值划分簇
threshold = min_dist * 2
clusters = np.arange(20)
for i in range(len(linkage_matrix)):
cluster1 = int(linkage_matrix[i, 0])
cluster2 = int(linkage_matrix[i, 1])
dist = linkage_matrix[i, 2]
if dist > threshold:
break
clusters[clusters == cluster1] = clusters.max() + 1
clusters[clusters == cluster2] = clusters.max()
# 输出分类结果
print(clusters)
```
这个实现中,我们使用了NumPy和Matplotlib库来生成随机数据,并可视化嵌套簇图。同时,我们使用SciPy库中的pdist函数来计算距离矩阵,使用linkage函数来进行凝聚层次聚类,并使用dendrogram函数可视化嵌套簇图。最后,我们根据阈值将簇划分,并输出分类结果。
阅读全文