非聚类库函数调用简单实现凝聚式聚类算法,输入大于等于20的随机对象,输出分类结果,聚类过程中得到的最短距离值以及距离矩阵
时间: 2023-07-12 17:11:00 浏览: 113
一种聚类算法,简单有效
好的,我可以帮你实现凝聚式聚类算法。以下是代码实现:
```
import random
# 随机生成大于等于20个对象,用列表表示
objects = [random.random() for _ in range(random.randint(20, 50))]
# 初始化距离矩阵
dist_matrix = [[abs(objects[i] - objects[j]) for j in range(len(objects))] for i in range(len(objects))]
# 初始化聚类结果,每个对象单独一类
clusters = [[i] for i in range(len(objects))]
# 聚类过程
while len(clusters) > 1:
# 找出距离最近的两个聚类
min_dist = float('inf')
min_i, min_j = None, None
for i in range(len(clusters)):
for j in range(i+1, len(clusters)):
dist = min([dist_matrix[x][y] for x in clusters[i] for y in clusters[j]])
if dist < min_dist:
min_dist = dist
min_i, min_j = i, j
# 合并两个聚类
clusters[min_i] += clusters[min_j]
del clusters[min_j]
# 更新距离矩阵
for i in range(len(clusters)):
if i == min_i:
continue
dist_matrix[min_i][i] = dist_matrix[i][min_i] = min([dist_matrix[x][y] for x in clusters[min_i] for y in clusters[i]])
# 输出结果
print(clusters)
print(min_dist)
print(dist_matrix)
```
这段代码会随机生成大于等于20个对象,然后使用列表来表示这些对象。接着,我们会初始化距离矩阵和聚类结果,每个对象单独一类。然后进入聚类过程,每次找出距离最近的两个聚类进行合并,直到只剩下一个聚类为止。最后输出分类结果,聚类过程中得到的最短距离值以及距离矩阵。
阅读全文