k-means 算法
时间: 2023-11-28 09:45:28 浏览: 73
k-means算法
K-Means算法是一种基于划分的聚类算法,它的目标是将n个数据对象划分为k个簇,使得簇内具有较高的相似度,而簇间的相似度较低。K-Means算法的步骤如下:
1. 随机选择k个数据对象作为初始的聚类中心。
2. 对于剩余的数据对象,计算它们与k个聚类中心的距离,并将它们划分到距离最近的聚类中心所在的簇中。
3. 对于每个簇,重新计算它们的聚类中心。
4. 重复步骤2和3,直到聚类中心不再发生变化或达到预定的迭代次数。
下面是一个简单的Python实现:
```python
import numpy as np
def kmeans(X, k, max_iter=100):
# 随机初始化聚类中心
centers = X[np.random.choice(len(X), k, replace=False)]
for _ in range(max_iter):
# 计算每个数据对象到聚类中心的距离
distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
# 将数据对象划分到距离最近的聚类中心所在的簇中
labels = np.argmin(distances, axis=0)
# 重新计算每个簇的聚类中心
new_centers = np.array([X[labels == i].mean(axis=0) for i in range(k)])
# 如果聚类中心不再发生变化,则退出循环
if np.all(centers == new_centers):
break
centers = new_centers
return labels, centers
```
阅读全文