首页 > 编程语言 >4- 机器学习原理与实践——聚类分析(k均值算法)

4- 机器学习原理与实践——聚类分析(k均值算法)

时间:2024-11-23 20:31:13浏览次数:10  
标签:plt 15 均值 算法 聚类 质心 聚类分析

    k均值(k-means)算法是一种最老的、最广泛使用的聚类算法。该算法之所以称为k均值,那是因为它可以发现k个不同的簇,且每个簇的中心均采用簇中所含数据点的均值计算而成。

1 算法描述

    在k均值算法中,质心是定义聚类原型(也就是机器学习获得的结果)的核心。除了第一次的质心是被指定的以外,此后的质心都是经由计算均值而获得的。        

    首先,选择k个初始质心(这k个质心并不要求来自于样本数据集),其中k是用户指定的参数,也就是所期望的簇的个数。每个数据点都被收归到距其最近的质心的分类中,而同一个质心所收归的点集为一个簇。然后,根据本次分类的结果,更新每个簇的质心。重复上述数据点分类与质心变更步骤,直到簇内数据点不再改变,或者等价地说,直到质心不再改变。

    基本的k均值算法描述如下:

    (1)选择k个数据点作为初始质心。

    (2)重复以下步骤,直到质心不再发生变化:

    ①将每个点收归到距其最近的质心,形成k个簇。

    ②重新计算每个簇的质心。

2 代码示例

    现假设有如下初始数据集:

初始数据集
x151214131216455776
y171815161512683425

    我们将在scikit-learn中应用k均值算法进行聚类。

    引入各种必要的包,并录入数据

from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
X=np.array([[15,17],[12,18],[14,15],[13,16],[12,15],[16,12],[4,6],[5,8],[5,3],[7,4],[7,2],[6,5]])

    设置要寻找的簇个数为2,再把random seed置为0,以便后续的结果可以复现。然后对数据调用fit_predict()方法,该方法的作用是计算聚类中心,并为输入的数据加上分类标签。

y_pred=KMeans(n_clusters=2,random_state=0).fit_predict(X)

     也可以使用fit()方法,它仅仅产生聚类中心(也就是建模),例如:

kmeans=KMeans(n_clusters=2,random_state=0).fit(X)

     作为测试,引入两个新的点,利用已经建立的模型预测它们的分类情况,最后可视化地展现聚类结果。

new_data=np.array([[3,3],[15,15]])
color=("red","green")
colors2=np.array(color)[kmeans.predict([[3,3],[15,15]])]

plt.figure(figsize=(5,5))
colors=np.array(color)[y_pred]
plt.scatter(X[:,0],X[:,1],c=colors)
plt.scatter(new_data[:,0],new_data[:,1],c=colors2,marker='x')
plt.show()

d117aa72440e478685e12cff3c0098cd.pnge93949fd69374050a801c91f79c432e7.png

 

 

 

标签:plt,15,均值,算法,聚类,质心,聚类分析
From: https://blog.csdn.net/2302_80828325/article/details/143753645

相关文章

  • 改进的 A算法的路径规划(路径规划+代码+毕业设计)
    现推出专栏项目:从图像处理(去雾/去雨)/目标检测/目标跟踪/单目测距/到人体姿态识别等视觉感知项目--------------------更多视觉和自动驾驶项目请见下面链接---------------------------:YOLOv8界面-目标检测+语义分割+追踪+姿态识别(姿态估计)+界面DeepSort/ByteTrack-PyQt-GU......
  • 算法笔试面试2
    用两个栈来模拟实现队列publicclassMyQueue{privatestaticStack<Integer>inStack;privatestaticStack<Integer>outStack;publicMyQueue(){inStack=newStack<>();outStack=newStack<>();}//像队列中......
  • C++实现Raft算法
    概念部分Raft算法是一种用于实现分布式系统中的一致性的算法。它是为了容易理解而设计的,其目标是实现和Paxos算法相同的功能,但更加容易理解和实现。Raft算法在分布式系统中尤其关键,因为它帮助系统中的多个节点就其数据的准确状态达成一致。Raft算法主要通过以下几个关键......
  • 强化学习算法中log_det_jacobian的影响是否需要考虑
    相关:人形机器人-强化学习算法-PPO算法的实现细节是否会对算法性能有大的影响.https://openi.pcl.ac.cn/devilmaycry812839668/google_brax_ppo_pytorchlog_det_jacobian是什么,我也是头一次遇到,百度了一下,没有答案,Google了一下也没有答案,虽然在TensorFlow的help文档中看到了......
  • 2024年全国青少年信息素养大赛-算法创意实践C++ 华中赛区 (小学组 初赛)
    算法创意实践C++初赛完整的试卷请前往题库中心,在线刷题更方便,更高效,支持刷题模式和限时考试模式~https://www.hixinao.com/tidan/exam-97.html?time=1732236840&sid=165&index=4......
  • 深圳大学-算法设计与分析-实验2-分治法求最近点对问题
    前言说明一门没什么意义的课程,学算法不如直接刷题,这门课纯答辩,本人写的报告也很答辩,可能还有错误,仅供参考,慎抄!实验目的(1)掌握分治法思想。(2)学会最近点对问题求解方法。实验内容对于平面上给定的N个点,给出所有点对的最短距离,即,输入是平面上的N个点,输出是N点中具有最短......
  • 深圳大学-算法设计与分析-实验4-动态规划(鸡蛋掉落问题)
    前言说明一门没什么意义的课程,学算法不如直接刷题,这门课纯答辩,本人写的报告也很答辩,可能还有错误,仅供参考,慎抄!实验目的(1)掌握动态规划算法设计思想。(2)掌握鸡蛋坠落问题的动态规划解法。实验内容动态规划将问题划分为更小的子问题,通过子问题的最优解来重构原问题的最......
  • 路由选择算法概述及经典算法分析
    一、路由选择算法概述路由选择算法的目标:找到“从源节点到目的节点的最低开销路径”路由选择算法的第一种分类centralizedroutingalgorithm集中式路由选择算法集中式路由选择算法需要计算者具有“网络拓扑的全局连通性”和“全局链路开销”方面的完整信息。具有全局状态......
  • 深入浅出学算法045-纪念品分组
    题目描述元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪......
  • 深入浅出学算法001-计算复杂度
    题目描述算法复杂度一般分为:时间复杂度、空间复杂度、编程复杂度。这三个复杂度本身是矛盾体,不能一味地追求降低某一复杂度,否则会带来其他复杂度的增加。在权衡各方面的情况下,降低时间复杂度成为本课程学习的重点之一。请计算下面几个程序段的复杂程度,分别用1、logn、n、nl......