不调包实现kmeans聚类,并画出聚类结果图
时间: 2024-06-19 14:03:02 浏览: 194
K-means聚类是一种基于距离的聚类方法,它通过迭代计算样本之间的距离并将它们分配到最近的聚类中心来实现聚类。以下是不调包实现K-means聚类的基本步骤:
1. 初始化聚类中心:从样本中随机选择K个样本作为初始聚类中心。
2. 计算距离:计算每个样本到K个聚类中心的距离。
3. 分配样本:将每个样本分配到距离最近的聚类中心所在的聚类中。
4. 更新聚类中心:计算每个聚类中所有样本的均值,将其作为新的聚类中心。
5. 重复步骤2-4直到聚类中心不再变化。
下面是一个简单的K-means聚类的Python代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成样本数据
X = np.random.rand(100, 2)
# 聚类个数
K = 3
# 初始化聚类中心
centers = X[np.random.choice(len(X), K, replace=False)]
# 迭代计算聚类中心和样本分配
while True:
# 计算距离
distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
# 分配样本
labels = np.argmin(distances, axis=0)
# 更新聚类中心
new_centers = np.array([X[labels == i].mean(axis=0) for i in range(K)])
# 判断是否收敛
if np.allclose(centers, new_centers):
break
centers = new_centers
# 绘制聚类结果图
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(centers[:, 0], centers[:, 1], c='r', marker='x', s=100)
plt.show()
```
上述代码中,我们首先生成了100个二维随机样本数据,然后随机选择了3个样本作为初始聚类中心。接着,我们通过迭代计算样本到聚类中心的距离并将它们分配到最近的聚类中心所在的聚类中,最后绘制了聚类结果图。可以看到,该算法成功地将样本分成了3个簇,并将聚类中心标记为红色的叉号。
阅读全文