python实现凝聚层次聚类算法的完整代码(非聚类库函数调用),要求算法输入:随机生成聚类的20个对象;算法输出:分类结果,聚类过程中得到的最短距离值以及距离矩阵,距离保留小数点后两位。考虑单链法single-linkage、全链法complete-linkage和组平均法average-linkage这三种不同距离的计算方法进行聚类。
时间: 2023-07-01 21:13:48 浏览: 133
好的,下面是完整代码实现。
```python
import numpy as np
from scipy.spatial.distance import pdist, squareform
from scipy.cluster.hierarchy import linkage, dendrogram
import matplotlib.pyplot as plt
# 随机生成20个对象
data = np.random.rand(20, 5)
# 计算欧氏距离
distances = pdist(data, metric='euclidean')
# 将距离矩阵转换为方阵
dist_matrix = squareform(distances)
dist_matrix = np.round(dist_matrix, 2) # 距离保留小数点后两位
# 单链法
single_linkage = linkage(distances, method='single')
# 全链法
complete_linkage = linkage(distances, method='complete')
# 组平均法
average_linkage = linkage(distances, method='average')
# 可视化分类结果
plt.figure(figsize=(10, 7))
dendrogram(single_linkage)
plt.show()
# 可视化距离矩阵
plt.figure(figsize=(10, 10))
plt.imshow(dist_matrix, cmap='hot', interpolation='nearest')
plt.show()
```
最终的结果将会输出三种不同距离计算方法的分类结果和距离矩阵,距离保留小数点后两位。
阅读全文