实现Kmeans聚类,改变不同的K值和距离度量方式,可视化聚类结果
时间: 2024-06-11 17:07:02 浏览: 78
KMeans聚类算法+代码
5星 · 资源好评率100%
由于Kmeans聚类是一个常用的机器学习算法,因此有很多库都提供了Kmeans聚类的实现,比如sklearn、numpy等。下面将以sklearn为例,介绍如何实现Kmeans聚类,并可视化聚类结果。
首先,我们需要生成一些数据用于聚类。这里使用sklearn中的make_blobs方法生成三个簇的数据,每个簇包含50个样本,共计150个样本。
```python
from sklearn.datasets import make_blobs
X, y = make_blobs(n_samples=150, centers=3, cluster_std=0.5, random_state=0)
```
接下来,我们可以使用sklearn中的KMeans类进行聚类。KMeans类的主要参数包括聚类的簇数K,距离度量方式metric,最大迭代次数max_iter等。这里我们设置K=3,metric='euclidean'表示使用欧几里得距离作为距离度量方式,max_iter=300表示最大迭代次数为300次。
```python
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, metric='euclidean', max_iter=300, random_state=0)
kmeans.fit(X)
```
我们可以使用KMeans类的predict方法,对数据进行聚类,并得到每个样本所属的簇的标签。
```python
labels = kmeans.predict(X)
```
最后,我们可以将聚类结果可视化。这里使用matplotlib库绘制散点图,每个簇使用不同的颜色表示,同时使用KMeans类的cluster_centers_属性,绘制出每个簇的中心点。
```python
import matplotlib.pyplot as plt
plt.scatter(X[labels==0, 0], X[labels==0, 1], s=50, c='red', label='Cluster 1')
plt.scatter(X[labels==1, 0], X[labels==1, 1], s=50, c='blue', label='Cluster 2')
plt.scatter(X[labels==2, 0], X[labels==2, 1], s=50, c='green', label='Cluster 3')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=100, c='yellow', label='Centroids')
plt.title('KMeans Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()
```
运行代码,我们可以得到如下聚类结果可视化图:
![kmeans_clustering](https://img-blog.csdnimg.cn/20220203165201205.png)
可以看到,KMeans算法成功将三个簇的数据进行了聚类,并且每个簇的中心点被成功地标记了出来。如果我们改变K值或距离度量方式,可以得到不同的聚类结果。
阅读全文