用numpy写一个k-means聚类算法
时间: 2023-07-01 21:18:42 浏览: 85
好的,下面是一个使用numpy写的K-means聚类算法的示例代码:
```python
import numpy as np
def k_means(X, k=3, max_iters=100):
# 随机初始化k个聚类中心
centroids = X[np.random.choice(len(X), k, replace=False)]
for i in range(max_iters):
# 计算每个样本到k个聚类中心的距离
distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=2)
# 分配每个样本到离它最近的聚类中心
labels = np.argmin(distances, axis=1)
# 计算新的聚类中心
new_centroids = np.array([X[labels == j].mean(axis=0) for j in range(k)])
# 如果聚类中心不再变化,停止迭代
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return centroids, labels
```
在上面的代码中,`X`是数据集,`k`是聚类的数量,`max_iters`是最大迭代次数。函数`k_means`返回聚类中心和每个数据点所属的聚类编号。
首先,随机选择k个数据点作为初始聚类中心。然后,重复以下步骤直到收敛:
1. 计算每个数据点到k个聚类中心的距离。
2. 将每个数据点分配到离它最近的聚类中心。
3. 计算每个聚类的新中心位置。
如果聚类中心不再变化,停止迭代。最后,返回最终的聚类中心和每个数据点所属的聚类编号。
注意,这里的实现方式是比较简单的,并没有考虑到优化算法性能的问题。在实际应用中,可能需要使用更复杂的算法来提高算法效率。
阅读全文