用python写一个kmeans聚类算法
时间: 2023-10-25 12:06:44 浏览: 97
以下是 Python 实现的 K-means 聚类算法:
```python
import numpy as np
def kmeans(X, k, max_iters=100):
# 随机初始化 k 个中心点
centers = X[np.random.choice(len(X), k, replace=False)]
for i in range(max_iters):
# 计算每个样本与中心点的距离
distances = np.linalg.norm(X[:,np.newaxis,:] - centers, axis=2)
# 根据距离将每个样本分配到最近的中心点
labels = np.argmin(distances, axis=1)
# 更新中心点的位置为所属数据点的平均值
new_centers = np.array([X[labels == j].mean(axis=0) for j in range(k)])
# 如果中心点位置不再变化,结束迭代
if np.allclose(new_centers, centers):
break
centers = new_centers
return labels, centers
```
其中,`X` 是数据集,`k` 是需要聚类的类别数,`max_iters` 是最大迭代次数。该算法会返回每个数据点的类别标签以及最终的中心点位置。
以下是一个示例程序:
```python
# 生成随机数据集
X = np.random.rand(100, 2)
# 调用 K-means 算法进行聚类
labels, centers = kmeans(X, k=3)
# 绘制聚类结果
import matplotlib.pyplot as plt
plt.scatter(X[:,0], X[:,1], c=labels)
plt.scatter(centers[:,0], centers[:,1], marker="x", s=200, linewidths=3, color="r")
plt.show()
```
该程序会生成一个包含 100 个随机数据点的数据集,并使用 K-means 算法将其聚为 3 类。最终的聚类结果将会绘制在图形上。
阅读全文