写一个kmeans聚类的python算法
时间: 2024-04-30 13:24:36 浏览: 154
Python实现Kmeans聚类算法
好的,下面是一个简单的 k-means 聚类算法的 Python 实现:
```python
import numpy as np
import random
def kmeans(data, k):
# 随机选取k个初始质心
centroids = np.array(random.sample(list(data), k))
# 初始化聚类结果和目标函数值
clusters = np.zeros(len(data))
cost = 0
while True:
# 计算每个样本点到质心的距离
distances = np.sqrt(((data - centroids[:, np.newaxis])**2).sum(axis=2))
# 将每个样本点分配到最近的质心所在的聚类中
new_clusters = np.argmin(distances, axis=0)
# 如果聚类结果不再变化,退出循环
if np.array_equal(new_clusters, clusters):
break
# 更新聚类结果和目标函数值
clusters = new_clusters
cost = distances.min(axis=0).sum()
# 计算每个聚类的新质心
for i in range(k):
centroids[i] = data[clusters == i].mean(axis=0)
return clusters, cost
```
其中,`data` 是一个 $n \times d$ 的二维数组,表示 $n$ 个 $d$ 维样本点;`k` 是聚类的个数。该算法返回一个一维数组 `clusters`,表示每个样本点所属的聚类编号;以及一个实数 `cost`,表示聚类结果的目标函数值。
阅读全文