python kmeans聚类 对二维坐标点聚类_Kmeans均值聚类算法原理以及Python如何实现

第一步.随机生成质心

由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给定两个质心,我们这个算法的目的就是将这一堆点根据它们自身的坐标特征分为两类,因此选取了两个质心,什么时候这一堆点能够根据这两个质心分为两堆就对了。如下图所示:

第二步.根据距离进行分类

红色和蓝色的点代表了我们随机选取的质心。既然我们要让这一堆点的分为两堆,且让分好的每一堆点离其质心最近的话,我们首先先求出每一个点离质心的距离。假如说有一个点离红色的质心比例蓝色的质心更近,那么我们则将这个点归类为红色质心这一类,反之则归于蓝色质心这一类,如图所示:

第三步.求出同一类点的均值,更新质心位置

在这一步当中,我们将同一类点的x\y的值进行平均,求出所有点之和的平均值,这个值(x,y)则是我们新的质心的位置,如图所示:

我们可以看到,质心的位置已经发生了改变。

第四步.重复第二步,第三步

我们重复第二步和第三部的操作,不断求出点对质心的最小值之后进行分类,分类之后再更新质心的位置,直到得到迭代次数的上限(这个迭代次数是可以我们自己设定的,比如10000次),或者在做了n次迭代之后,最后两次迭代质心的位置已经保持不变,如下图所示:

这个时候我们就将这一堆点按照它们的特征在没有监督的条件下,分成了两类了!!

五.如果面对多个特征确定的一个点的情况,又该如何实现聚类呢?

首先我们引入一个概念,那就是欧式距离,欧式距离是这样定义的,很容易理解:

很显然,欧式距离d(xi,xj)等于我们每一个点的特征去减去另一个点在该维度下的距离的平方和再开根号,十分容易理解。

我们也可以用另一种方式来理解kmeans算法,那就是使某一个点的和另一些点的方差做到最小则实现了聚类,如下图所示:

得解!

六:代码实现

我们现在使用Python语言来实现这个kmeans均值算法,首先我们先导入一个名叫make_blobs的数据集datasets,然后分别使用两个变量X,和y进行接收。X表示我们得到的数据,y表示这个数据应该被分类到的是哪一个类别当中,当然在我们实际的数据当中不会告诉我们哪个数据分在了哪一个类别当中,只会有X当中数据。在这里写代码的时候比较特殊,make_blobs库要求我们必须接受这两个参数,不能够只接受X这个数据参数,代码如下

plt.figure(figsize=(15,15))#规定我们绘图的大小为12*12

X, y=make_blobs(n_samples=1600,random_state=170)#一共取用1600个sample,同时状态设定为随机

#不知道这个状态随机是什么意思,只能查有关这个库的官方文档,同时这个数据集规定了是具备三个数据中心,也就是三个簇

y_pred=KMeans(n_clusters=3,random_state=170).fit_predict(X)

plt.subplot(221)#表示四个方格当中的第一格

plt.scatter(X[:,0],X[:,1],c=y_pred)#表示数据的第0个和第1个维度,同时数据的colour与predict的结果有关

plt.title("The result of the Kmeans")

plt.subplot(222)#表示四个方格当中的第一格

plt.scatter(X[:,0],X[:,1],c=y)

plt.title("The Real result of the Kmeans")

array=np.array([[0.60834549,-0.63667341],[-0.40887178,-0.85253229]])

lashen=np.dot(X,array)

y_pred=KMeans(n_clusters=3,random_state=170).fit_predict(lashen)

plt.subplot(223)#表示四个方格当中的第一格

plt.scatter(lashen[:,0],lashen[:,1],c=y_pred)#表示数据的第0个和第1个维度,同时数据的colour与predict的结果有关

plt.title("The Real result of the tranfored data")

我们在使用scatter函数进行绘图的时候会根据我们数据结的形状来编写相应的代码,这里我们所拿到的X数据集的行数是我们所指定的1600行,因为我们一共拿到了1600个数据,每一个数据仅有两个特征,也就是在XY轴当中的坐标,因此X是一个二维的ndarray对象(X是numpy当中的ndarray对象),我们可以打印出来看看这个数据的构成,如下图所示:

同时我们也可以看到y也是ndarray对象,由于我们在采集数据的时候仅仅接受了3个簇,make_blobs默认接受的是三个簇(或称cluster)的缘故,因此最后y的值只有0,1,2这三种可能。我们通过matplotlib绘图,绘制出我们分类的结果图,也就是上述代码的运行结果如下:

以上就是Kmeans均值聚类算法原理以及Python如何实现的详细内容,更多关于Kmeans均值聚类算法的资料请关注脚本之家其它相关文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 2544最短路dijkstra模板题

最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 33657 Accepted Submission(s): 14617Problem Description在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt。可是每当我们…

我为期一个月的GitHub的经验教训

by JS由JS 我为期一个月的GitHub的经验教训 (Lessons from my month-long GitHub commit streak) “I want to learn JavaScript. Like, really learn it. Like, truly understand it.” — me in November 2016“我想学习JavaScript。 喜欢,真正地学习它。 喜欢&a…

安装itunes需要管理员身份_ITUNES无法安装,提示没有权限如何解决?

展开全部注意机器一定要登陆管理员系统,如果现在不是,可以注62616964757a686964616fe78988e69d8331333365646263销,切换一下用户。还有计算机不要有漏洞,如果有的话修复一下。打开开始运行,输入regedit,点击确认打开注册表编辑器,…

vs2012新建项目产生的问题

当用vs新建web项目时遇到 只需下载一个vs2012的更新插件 http://download.microsoft.com/download/A/0/2/A02C37E0-77F7-448A-BD5C-F66AB1F78DBC/VS11-KB3002339.exe 点击安装更新即可. 转载于:https://www.cnblogs.com/GreenLeaves/p/5452073.html

zoj4062 Plants vs. Zombies 二分+模拟(贪心的思维)

题目传送门 题目大意:有n个植物排成一排,标号为1-n,每株植物有自己的生长速度ai,每对植物浇一次水,该株植物就长高ai,现在机器人从第0个格子出发,每次走一步,不能停留,每…

MyBatis注解模式批量insert方法

2019独角兽企业重金招聘Python工程师标准>>> 方法一:script标签方式 Insert("<script>insert into xxx (channelId,siteId) " "values " "<foreach collection\"list\" item\"item\" index\"index\&quo…

尚硅谷学费有住宿么_我在12个小时的住宿期间了解到的硅谷知识

尚硅谷学费有住宿么by Sahil Khoja由Sahil Khoja 我在12个小时的住宿期间了解到的硅谷知识 (What I learned about Silicon Valley during my 12 hour stay) #1 Unless you’re a designer or a developer, the billboards are pure gibberish.&#xff03;1除非您是设计师或开…

以下属于linux文件系统认为的文件是,信息安全技术题库:在Linux系统中,图形文件、数据文件、文档文件等都属于()。...

相关题目与解析Linux中图像文件属于()。A、文本文件B、连接文件C、特殊文件D、二进制文件主要用于Linux系统中进程间相互传递数据。A&#xff0e;FIFO文件B&#xff0e;设备文件C&#xff0e;链接文件D&#xff0e;目录文件关于Linux文件组织方式的说法中&#xff0c;(32)是错误…

关于eclipse中文注释乱码的问题

今天打开了一个以前的android项目&#xff0c;发现中文注释都成乱码啦&#xff01;&#xff01;&#xff01; 后来在网上找了一会解决方法&#xff0c;知道了中文的编码大体是两种&#xff1a;GBK(汉字内码扩展规范)和UTF-8(8-bit Unicode Transformation Format)。 因此问题的…

园林系统优秀党员推荐材料_园林绿化公司党员先进个人事迹材料

第1页共5页三一文库(www.31doc.com)〔园林绿化公司党员先进个人事迹材料〕我于年月踏出校门来到建设公司。初到公司&#xff0c;我被分配到分公司卉丰园林绿化公司工作。我努力学习公司各项规章制度和相关业务知识&#xff0c;多了解树木、绿化的有关情况。在此期间&#xff0c…

python入门(5)使用文件编辑器编写代码并保存执行

python入门&#xff08;5&#xff09;使用文件编辑器编写代码并保存执行 两款文本编辑器&#xff1a; 一个是Sublime Text&#xff0c;免费使用&#xff0c;但是不付费会弹出提示框&#xff1a; 一个是Notepad&#xff0c;免费使用&#xff0c;有中文界面&#xff1a; 请注意&…

js 获取时间戳的方法

(new Date()).valueOf()1541569364658(new Date()).getTime()1541569372623Number(new Date())1541569386622 // 2019年1月23日补充 *除以1000得到的是Unix时间戳 // Math.floor(new Date().getTime() / 1000), // 当天// (new Date(new Date().setHours(0, 0, 0, 0)) / 1000) …

agpl限制了开源_不要限制您的开源项目的潜力

agpl限制了开源by Julien Danjou通过朱利安丹乔(Julien Danjou) 不要限制您的开源项目的潜力 (Don’t limit your open source project’s potential) During the OpenStack summit a few weeks ago, I had the chance to talk to some people about my experience on running…

linux 批量同步,多主机目录到备份服务器批量同步脚本

为了方便同步多个主机的目录到备份服务器&#xff0c;写了如下脚本&#xff1a;#!/usr/bin/perluse strict;use File::Spec;use File::Basename;use File::Path;#设定存储路径my $storedir"/backup/";while(){chomp;my ($host,$s_path)split /\t/;my $project_namefi…

交流电的有效值rms值_交流电路的功率三角因数原来是这样理解的

点击“电工电气学习”关注即可免费订阅&#xff01;电工学习网&#xff1a;www.diangon.com关注电工学习网官方微信公众号“电工电气学习”&#xff0c;收获更多经验知识。交流电路中消耗的电能可以用直角三角形的三个边来表示&#xff0c;通常称为功率三角形我们在关于交流电路…

CSS3酷炫样式集合

1、30种炫酷CSS鼠标滑过按钮特效 2、CSS 变量实现炫酷鼠标悬浮效果 3、基于CSS3和jQuery实现跟随鼠标方位的Hover特效 4、css3金属质感登录表单 4、CSS3动态下拉菜单 5、CSS3鼠标悬浮特效 转载于:https://www.cnblogs.com/mankii/p/9922981.html

微信小程序工具篇

“工欲善其事必先利其器”&#xff0c;在开始新内容的学习之前&#xff0c;往往会对用哪个IDE开发而苦恼。因为自身硬件条件的限制&#xff08;公司给配的商务笔记本&#xff0c;真心的是中看不中用。也就是便携这么个有点了&#xff09;。所以在选择IDE方面&#xff0c;个人比…

NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

题目描述 小渊是个聪明的孩子&#xff0c;他经常会给周围的小朋友们将写自己认为有趣的内容。最近&#xff0c;他准备给小朋友们讲解立体图&#xff0c;请你帮他画出立体图。 小渊有一块面积为m*n的矩形区域&#xff0c;上面有m*n个边长为1的格子&#xff0c;每个格子上堆了一些…

及时沟通的重要性_沟通与代码同样重要

及时沟通的重要性by Andrea Goulet通过安德烈古莱特(Andrea Goulet) 沟通与代码同样重要 (Communication Is Just As Important As Code) This past weekend, I had the pleasure of being the closing keynote at Ruby Nation. I expanded on one of the core values at Corg…

linux telnet smtp,如何使用Telnet测试IMAP与SMTP

1 前言笔者有时候调试邮件服务器需要使用Telnet直接去操纵IMAP与SMTP的服务&#xff0c;所以整理此文。2 最佳实践2.1 IMAP服务2.1.1 使用Telnet链接IMAP服务telnet imap.cmdschool.org 143信息显示如下&#xff0c;Trying 113.96.209.109...Connected to imap.cmdschool.org.E…