K-Means 聚类算法的 Python 实现
时间: 2023-06-29 19:02:24 浏览: 165
SX1909025周星楠_Kmeans_K._
以下是 K-Means 聚类算法的 Python 实现:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K):
# 随机初始化质心
centroids = X[np.random.choice(range(len(X)), K, replace=False)]
# 迭代更新质心和聚类
while True:
# 计算每个点到质心的距离
distances = np.linalg.norm(X[:, np.newaxis] - centroids, axis=-1)
# 分配最近的质心为聚类
clusters = np.argmin(distances, axis=1)
# 更新质心为聚类的平均值
new_centroids = np.array([X[clusters == k].mean(axis=0) for k in range(K)])
# 如果质心不再变化则退出循环
if np.allclose(centroids, new_centroids):
break
centroids = new_centroids
return clusters, centroids
# 生成随机数据
np.random.seed(0)
X = np.random.randn(100, 2)
# 聚类
clusters, centroids = kmeans(X, 3)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=clusters)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
该实现中,`kmeans` 函数接受两个参数:输入数据 `X` 和聚类数 `K`。在函数中,首先随机初始化质心,然后在迭代中实现质心和聚类的更新,直到质心不再变化。最后返回聚类结果和质心。
这里使用了 NumPy 库来进行矩阵运算和向量化计算,Matplotlib 库用于可视化聚类结果。
阅读全文