当您使用K-means算法时,可以使用scikit-learn库中的KMeans类来实现。以下是一个示例代码,可以帮助您理解如何使用K-means算法进行聚类,并使用matplotlib库绘制可视化结果。
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 创建一个虚拟数据集
X = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
# 创建KMeans对象并指定聚类数量为2
kmeans = KMeans(n_clusters=2)
# 使用fit方法对数据进行聚类
kmeans.fit(X)
# 获取每个样本的标签
labels = kmeans.labels_
# 获取聚类中心的坐标
centroids = kmeans.cluster_centers_
# 绘制聚类前的数据点
plt.scatter(X[:,0], X[:,1], c='blue', label='data points')
# 绘制聚类后的数据点
plt.scatter(centroids[:,0], centroids[:,1], c='red', marker='x', label='centroids')
# 将每个数据点的标签添加到图中
for i, label in enumerate(labels):
plt.annotate(label, (X[i,0], X[i,1]))
plt.legend()
plt.show()
在这个示例中,我们创建了一个虚拟数据集X
,包含6个样本。然后,我们使用KMeans类创建了一个K-means对象,并将聚类数量设置为2。然后,我们通过调用fit()
函数对数据进行聚类,并使用labels_
属性获得每个样本的聚类标签。我们还可以使用cluster_centers_
属性获得聚类中心的坐标。
最后,我们使用matplotlib库绘制了聚类前后的数据点,并使用红色的"x"标记表示聚类中心。每个数据点的标签也被添加到图中以进行可视化。运行此代码将生成一个图形窗口,显示聚类前后的差异。
可以先使用scipy.cluster.vq模块中的vq函数来执行k-means聚类,然后使用matplotlib库来可视化聚类前后的差异。
```python
importnumpyasnp
importmatplotlib.pyplotasplt
fromscipy.cluster.vqimportvq,kmeans,whiten
#创建一个二维的数据集
np.random.seed(0)
data=np.random.rand(100,2)
#进行k-means聚类,将数据集分为两个簇
#首先需要对数据进行白化处理,以防止不同特征的尺度对聚类结果造成影响
whitened=whiten(data)
kmeans_2clust=kmeans(whitened,2)
codebook_2,_=kmeans_2clust
#对数据进行聚类
clust_ind_2,_=vq(whitened,codebook_2)
#绘制原始数据点
plt.scatter(data[:,0],data[:,1],marker='.',color='red',label='Originaldata')
#绘制聚类中心
plt.scatter(codebook_2[:,0],codebook_2[:,1],marker='x',color='blue',label='Clustercentroids')
#绘制聚类后的数据点
plt.scatter(data[clust_ind_2==0][:,0],data[clust_ind_2==0][:,1],marker='o',color='green',label='Cluster1')
plt.scatter(data[clust_ind_2==1][:,0],data[clust_ind_2==1][:,1],marker='s',color='orange',label='Cluster2')
plt.title('K-meansClustering')
plt.xlabel('Feature1')
plt.ylabel('Feature2')
plt.legend()
plt.show()
```
这段代码首先创建了一个二维的数据集,然后使用k-means聚类将数据分为两个簇。聚类中心和聚类后的数据点都通过不同的颜色和符号在散点图上进行了可视化。
请注意,这个例子使用了默认的k-means参数,但在实际应用中,你可能需要调整这些参数,例如`init`、`n_init`和`max_iter`,以获得更好的聚类结果。此外,如果你的数据集非常大,你可能需要考虑使用更高效的K-means变种,如MiniBatchKMeans,或者使用不同的初始化方法来避免局部最小值。
标签:plt,means,python,kmeans,label,聚类,data From: https://blog.csdn.net/2301_81121233/article/details/144004345