最长距离complete linkage层次聚类python实现
时间: 2023-06-29 19:13:09 浏览: 131
下面是一个基于Python的最长距离complete linkage层次聚类的实现:
```python
import numpy as np
def euclidean_distance(x, y):
"""
计算欧几里得距离
"""
return np.sqrt(np.sum((x - y) ** 2))
def complete_linkage(data):
"""
最长距离complete linkage层次聚类算法实现
:param data: 二维数据集,每行代表一个样本
:return: 聚类结果,每个元素代表一个聚类,元素为聚类中心的下标
"""
n = data.shape[0]
# 初始化距离矩阵
distances = np.zeros((n, n))
for i in range(n):
for j in range(i+1, n):
distances[i, j] = euclidean_distance(data[i], data[j])
distances[j, i] = distances[i, j]
# 初始化聚类标号
clusters = np.arange(n)
# 合并聚类
for k in range(n-1):
# 找到距离最大的两个聚类
i, j = np.unravel_index(np.argmax(distances), distances.shape)
# 合并聚类
clusters[clusters == clusters[j]] = clusters[i]
# 更新距离矩阵
distances[i, :] = np.maximum(distances[i, :], distances[j, :])
distances[:, i] = distances[i, :]
distances[i, i] = np.inf
distances[j, :] = np.inf
distances[:, j] = np.inf
# 返回聚类结果
return np.unique(clusters)
```
可以直接调用 `complete_linkage(data)` 函数来实现最长距离complete linkage层次聚类。其中,`data` 是一个二维的数据集,每行代表一个样本。函数返回聚类结果,每个元素代表一个聚类,元素为聚类中心的下标。
阅读全文
相关推荐



















