kmeans聚类 要求不调包实现kmeans聚类,并画出聚类结果图
时间: 2024-06-19 12:03:02 浏览: 110
KMeans是一种基于距离度量的聚类算法,它可以将数据点分为K个不同的簇,每个簇中的数据点与该簇中心的距离最小,并且不同簇之间的距离最大化。具体实现过程如下:
1. 从数据集中随机选取K个点作为初始的簇中心;
2. 对于每个数据点,计算其与各个簇中心的距离,将其归类到距离最近的簇中;
3. 对于每个簇,重新计算其中心点的位置;
4. 重复第2、3步,直到所有数据点的类别不再发生变化或者达到预先设定的迭代次数。
以下是一个Python实现KMeans聚类的示例代码,并且画出了聚类结果图:
```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(42)
X = np.random.randn(100,2)
# 聚类
centroids, C = KMeans(X, 3)
# 绘制聚类结果
plt.scatter(X[:,0], X[:,1], c=C)
plt.scatter(centroids[:,0], centroids[:,1], marker='*', s=200, c='#050505')
plt.show()
```
阅读全文