kmeans聚类算法python代码
时间: 2023-08-27 16:04:56 浏览: 79
以下是使用Python实现K-means聚类算法的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters=100):
# 初始化质心,随机从X中选择K个样本
centroids = X[np.random.choice(X.shape[0], K, replace=False), :]
for i in range(max_iters):
# 计算每个样本到各个质心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 分配每个样本到最近的质心
labels = np.argmin(distances, axis=0)
# 更新质心位置
for j in range(K):
centroids[j, :] = np.mean(X[labels == j, :], axis=0)
return labels, centroids
# 生成数据
np.random.seed(0)
X = np.vstack([np.random.randn(100, 2) + [2, 2],
np.random.randn(100, 2) + [-2, -2],
np.random.randn(100, 2) + [-2, 2]])
# 调用K-means算法
labels, centroids = kmeans(X, K=3)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
代码中,`kmeans`函数接受三个参数:`X`为输入的数据,`K`为聚类的簇数,`max_iters`为最大迭代次数。函数先随机选择K个样本作为初始质心,然后进行迭代优化,直到达到最大迭代次数或质心不再发生变化为止。在每次迭代中,函数计算每个样本到各个质心的距离,然后将每个样本分配到最近的质心,并更新质心位置。函数最终返回每个样本所属的簇标签和最终的质心位置。
代码中,我们生成了一个二维数据集,其中包含三个簇。然后我们调用`kmeans`函数进行聚类,得到每个样本所属的簇标签和最终的质心位置。最后,我们用散点图将聚类结果可视化。
阅读全文