k均值算法python实现
时间: 2023-09-29 07:08:30 浏览: 87
下面给出 k-means 算法的 Python 实现:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, maxIters = 10):
centroids = X[np.random.choice(np.arange(len(X)), K), :]
for i in range(maxIters):
C = np.array([np.argmin([np.dot(x-c, x-c) for c in centroids]) for x in X])
centroids = [X[C == k].mean(axis = 0) for k in range(K)]
return np.array(centroids), C
# 生成数据
np.random.seed(0)
X = np.vstack((np.random.randn(150, 2) * 0.75 + np.array([1, 0]), np.random.randn(50, 2) * 0.25 + np.array([-0.5, 0.5]), np.random.randn(50, 2) * 0.5 + np.array([-0.5, -0.5])))
# 聚类
centroids, C = kmeans(X, 3)
# 可视化
plt.scatter(X[:,0], X[:,1], c=C)
plt.plot(centroids[:,0], centroids[:,1], 'r^', markersize=10)
plt.show()
```
其中,`X` 为数据矩阵,`K` 为簇的个数,`maxIters` 为最大迭代次数。函数返回簇中心和每个数据点所属的簇编号 `C`。
这里的实现基于 NumPy 库,使用了向量化的思想,可以加快运算速度。
阅读全文