python实现k-平均算法例题
时间: 2023-11-10 08:50:44 浏览: 101
k均值聚类python实现
下面是一个简单的 Python 实现 k-均值算法的例子:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, k, max_iterations=50):
"""
X: 数据集,每行为一个样本
k: 聚类数目
max_iterations: 最大迭代次数
"""
# 随机选择 k 个样本作为初始聚类中心
centers = X[np.random.choice(len(X), k, replace=False)]
for i in range(max_iterations):
# 计算每个样本到聚类中心的距离
distances = np.linalg.norm(X[:, np.newaxis, :] - centers, axis=2)
# 分配聚类
clusters = np.argmin(distances, axis=1)
# 更新聚类中心
new_centers = np.array([X[clusters == j].mean(axis=0) for j in range(k)])
# 如果聚类中心不再发生变化,则停止迭代
if np.all(centers == new_centers):
break
centers = new_centers
return clusters, centers
# 生成样本数据
np.random.seed(0)
X1 = np.random.randn(100, 2)
X2 = np.random.randn(100, 2) + np.array([5, 5])
X3 = np.random.randn(100, 2) + np.array([5, -5])
X = np.vstack([X1, X2, X3])
# 调用 k-means 函数
clusters, centers = kmeans(X, 3)
# 绘制聚类结果
plt.scatter(X[:, 0], X[:, 1], c=clusters, cmap="viridis")
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.5)
plt.show()
```
结果如下图所示:
![k-means聚类结果](https://img-blog.csdnimg.cn/2021043016481384.png)
阅读全文