写一个k-means聚类算法python的代码
时间: 2023-09-26 20:09:39 浏览: 140
好的,下面是一个简单的k-means聚类算法的Python代码:
```python
import numpy as np
def k_means(X, k, max_iters=100):
# 随机初始化k个中心点
centroids = X[np.random.choice(len(X), k)]
for i in range(max_iters):
# 计算每个样本到中心点的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 将每个样本分配到距离最近的中心点所属的簇
labels = np.argmin(distances, axis=0)
# 更新中心点的位置为每个簇内样本的平均值
centroids_new = np.array([X[labels == j].mean(axis=0) for j in range(k)])
# 如果中心点位置不再变化,则停止迭代
if np.allclose(centroids, centroids_new):
break
centroids = centroids_new
return centroids, labels
```
该函数的输入参数包括:
- `X`:待聚类的数据矩阵,每行代表一个样本,每列代表一个特征;
- `k`:聚类的簇数;
- `max_iters`:最大迭代次数,如果中心点的位置不再变化,则提前停止迭代。
该函数的输出结果包括:
- `centroids`:聚类后得到的k个中心点的位置;
- `labels`:每个样本所属的簇的标签。
阅读全文