首页 > 编程语言 >用python写一段k-means聚类算法,要求使其能够显示聚类前后的差异,绘图使其可视化

用python写一段k-means聚类算法,要求使其能够显示聚类前后的差异,绘图使其可视化

时间:2024-11-24 11:05:40浏览次数:9  
标签:plt means python kmeans label 聚类 data

当您使用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

相关文章

  • 使用Python实现自动化邮件通知:当长时程序运行结束时
    使用Python实现自动化邮件通知:当长时程序运行结束时前提声明本代码仅供学习和研究使用,不得用于商业用途。请确保在合法合规的前提下使用本代码。目录引言项目背景项目设置代码分析导入所需模块定义邮件发送函数发送邮件实现步骤结语全部代码引言在开发过程中,我们经......
  • 机器学习实战笔记34-38:gridsearchcv的进阶使用,无监督学习:kmeans、DBSCAN
    主要讲了gridsearchcv的几种变形使用方式一:全部参数搜索方法是构造机器学习流之后,构造参数空间二:优化评估指标的选择作为网格搜索中输出评估指标的参数,roc_auc参数只能指代metrics_roc_auc_score函数的二分类功能,如果需要多分类,则需要将scoring修改为roc_auc_ovr等参数三......
  • LeetCode题解:29.两数相除【Python题解超详细,位运算、二分查找法、递归法】,知识拓展:位
    题目描述        给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。返回被除数 dividend 除以除数 div......
  • C++,Java,Python,Javascript实现二分查找算法
    二分查找算法是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半,通过比较中间元素与目标值来决定是在左半部分还是右半部分继续查找,从而逐步缩小查找范围直到找到目标值或者确定目标值不存在于数组中。下面是使用C++、Java、Python和JavaScript实现二......
  • 【Python图像处理】进阶实战续篇(五)
    在前几篇文章中,我们已经探讨了Python在图像处理领域的多种技术,包括图像分割、视频处理、三维重建、图像增强、面部识别、文字识别、图像检索以及医学图像处理。本篇将继续深入探讨更多图像处理技术及其应用实例,并结合更多的知识点说明,以帮助读者更全面地掌握图像处理领域的......
  • 学习日记_20241123_聚类方法(MeanShift)
    前言提醒:文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。文章目录前言聚类算法经典应用场景MeanShift优......
  • 重看Python书的第十三天
    函数的递归函数是一种代码封装,能够被其他程序调用,当然也可以被函数自身的内部代码调用。这种函数定义中调用函数自身的方式称为递归。递归基例:存在一个或多个基例,不需要再次递归,它是确定的表达式。递归链条:所有递归都有一个链条,表现为函数功能的不同值调用。 递归构建......
  • 重看Python书的第十二天
    函数的返回值return语句用来结束函数并将程序返回到函数被调用的位置继续执行。return语句可以出现在函数中的任何部分,同时可以将0个,1个或多个函数运算的结果返回给函数被调用处的变量多个返回值当return返回多个值时,这些值形成了一个元组类型数据,由小括号和逗号分隔,例如(a,b......
  • python虚拟环境
    创建虚拟环境:在命令行中导航到你的项目目录,然后运行以下命令来创建虚拟环境:python-mvenvmyenvpython3-mvenvmyenv这里的myenv是虚拟环境的名称,你可以根据需要更改。激活虚拟环境:激活虚拟环境会将其置于活动状态,之后安装的任何包都会在这个环境中,而不是......
  • 4- 机器学习原理与实践——聚类分析(k均值算法)
      k均值(k-means)算法是一种最老的、最广泛使用的聚类算法。该算法之所以称为k均值,那是因为它可以发现k个不同的簇,且每个簇的中心均采用簇中所含数据点的均值计算而成。1算法描述  在k均值算法中,质心是定义聚类原型(也就是机器学习获得的结果)的核心。除了第一次......