帮我写一段kmeans算法的python代码
时间: 2023-12-22 13:03:26 浏览: 79
好的,以下是一个简单的kmeans算法的Python代码:
```python
import random
import numpy as np
def kmeans(data, k):
# 随机初始化k个聚类中心
centers = random.sample(list(data), k)
while True:
# 初始化k个空的聚类
clusters = [[] for _ in range(k)]
for point in data:
# 计算每个点到k个聚类中心的距离
distances = [np.linalg.norm(point - center) for center in centers]
# 将点分配到距离最近的聚类中心的聚类中
clusters[np.argmin(distances)].append(point)
# 计算每个聚类的新中心
new_centers = [np.mean(cluster, axis=0) for cluster in clusters]
# 如果新中心和旧中心的距离都小于某个阈值,就认为算法已经收敛
if all(np.linalg.norm(new_centers[i] - centers[i]) < 0.1 for i in range(k)):
break
centers = new_centers
return clusters
```
其中,`data`是一个形如`[[x1, y1], [x2, y2], ...]`的数据集,`k`是聚类的个数。该函数返回一个形如`[[[x1, y1], [x2, y2], ...], ...]`的列表,即每个聚类包含的点的列表。
阅读全文