python实现''K均值聚类算法''的代码
时间: 2023-08-15 08:04:55 浏览: 322
以下是一个 Python 实现的 K 均值聚类算法的代码示例:
```python
import numpy as np
def k_means_clustering(data, k, max_iterations=100):
"""
K 均值聚类算法
:param data: 数据集,二维 numpy 数组,每行表示一个数据点
:param k: 聚类数
:param max_iterations: 最大迭代次数
:return: 聚类结果和类中心,聚类结果是一个一维 numpy 数组,表示每个数据点所属的类别,类中心是一个二维 numpy 数组,每行表示一个类中心
"""
n = data.shape[0] # 数据集大小
centers = random_init_centers(data, k) # 随机初始化类中心
labels = np.zeros(n) # 初始化每个数据点的类别为 0
for i in range(max_iterations):
# 计算每个数据点到每个类中心的距离
distances = np.linalg.norm(data[:, np.newaxis, :] - centers, axis=2)
# 将每个数据点分配到距离最近的类中心
new_labels = np.argmin(distances, axis=1)
# 如果聚类结果没有变化,则退出循环
if np.array_equal(new_labels, labels):
break
labels = new_labels
# 更新类中心为每个类别的平均值
for j in range(k):
centers[j, :] = np.mean(data[labels == j, :], axis=0)
return labels, centers
```
该函数接受一个二维 numpy 数组 `data`、一个整数 `k` 和一个可选的整数 `max_iterations`,返回一个二元组 `(labels, centers)`,其中 `labels` 是一个一维 numpy 数组,表示每个数据点所属的类别,`centers` 是一个二维 numpy 数组,每行表示一个类中心。该函数首先随机初始化类中心,然后重复以下步骤直到聚类结果不再变化或达到最大迭代次数:计算每个数据点到每个类中心的距离,将每个数据点分配到距离最近的类中心,更新类中心为每个类别的平均值。最后,该函数返回聚类结果和类中心。