K-Means算法学习笔记_kmeans(x,3,'replicates',3,'options',opts)-程序员宅基地

技术标签: 算法  计算机视觉  

最近在学K-Means算法,感觉挺有意思。要说K-Means,得先说说什么是聚类。

聚类

聚类是无监督(标签)学习,不依赖于预定义的类别和标签的训练实例。在进行聚类前甚至可能不知道要样本要分几类,类别是什么。所以说,与预先样本定义好类别(如:学生 -1,老师 +1)的分类来说,是一种无监督学习。

K-Means

K-Means是一种聚类算法,据说是最简单的聚类算法(没有之一)。
算法的目标:给定一个元素集合D,包含许多样本点,将其分类。如下图:
K-Means算法
算法原理:
1、给定一个元素集合D,包含许多样本点。
2、随机在集合D中,选取K个样本点(假设K=4,也就是最后要分4类),作为中心点
3、计算集合D中所有的点,到这4个点的距离。例如,这四个选定的点计为X1,X2,X3,X4。到X1的距离比到其他三个点(X2,X3,X4)点距离近的,归为X1点所代表的类(可以说是X1代表第一类,X2代表第二类….)。
4、将所有点分好类后,现在有第一类、第二类,第三类,第四类,这四个点集。然后,计算第一类中所有点的平均值,将这个值作为新的中心点X1。然后按同样方法计算第二类、第三类、第四类的新的中心点
5、重复(3),(4),直到四个中心点(X1,X2,X3,X4)不再变化

算法原理,理解起来,很简单。但是K-Means算法,要分几类,即K的值要自己确定,这个值将影响算法的好坏。设置K值的多少,结果也会不一样。所以,产生了K-Means++算法,这个算法可以我们分析样本合集,自动的选择初始点。(K-Means++的原理以后再讲。)

MATLAB中使用K-Means算法。

这里使用了下面网址调用MATLAB的kmeans的命令,小小修改了一下。
http://blog.sina.com.cn/s/blog_62186b46010145ne.html

%随机获取150个点
X = [randn(50,2)+ones(50,2);randn(50,2)-ones(50,2);randn(50,2)+[ones(50,1),-ones(50,1)]];

opts = statset('Display','final');

%调用Kmeans函数
%X          N*P的矩阵
%Idx       N*1的向量,存储的是每个点的聚类标号(标号,标记点是第一类、第二类还是第三类)
%Ctrs     K*P的矩阵,存储的是K个聚类质心位置。K个中点点
%SumD     1*K的和向量。存储的是类间所有点与该类钟心点距离之和
%D        N*K的矩阵,存储的是每个点与所有中心的距离;

[Idx,Ctrs,SumD,D] = kmeans(X,3,'Replicates',3,'Options',opts);

%画出聚类为1的点。X(Idx==1,1),为第一类的样本的第一个坐标;X(Idx==1,2)为第二类的样本的第二个坐标
plot(X(Idx==1,1),X(Idx==1,2),'r.','MarkerSize',14)
hold on
plot(X(Idx==2,1),X(Idx==2,2),'b.','MarkerSize',14)
hold on
plot(X(Idx==3,1),X(Idx==3,2),'g.','MarkerSize',14)

%绘出聚类中心点,kx表示是圆形
plot(Ctrs(:,1),Ctrs(:,2),'kx','MarkerSize',14,'LineWidth',4)
legend('Cluster 1','Cluster 2','Cluster 3','Centroids','Location','NW') 
Ctrs
SumD
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zxc024000/article/details/49805021

智能推荐

selenium+Firefox更改ua请求头_python selenium firefox 设置请求头-程序员宅基地

文章浏览阅读1.6k次。火狐内核更改ua和Chrome并不一样,很多教程用的是Options来更改,但对火狐不会报错也不会生效,正确的方法是用Profile来更改,直接上代码会报warning,但是不影响使用_python selenium firefox 设置请求头

PHP中的Magic Methods -程序员宅基地

文章浏览阅读628次。 下面我将对PHP所有的魔术方法进行介绍说明。其实下面的大多数方法,对于一个合格的PHP程序员来说,都是很熟悉的东西了。我在这里作个总结,自己作个记录学习,同时也给还未熟悉这些方法的同学们做个介绍。如有疏漏和错误,希望各位能指出。下面所提到的,大多数是PHP5所增加的魔术方法,少部分在PHP4里就已经存在,少部分则是PHP5.1.0之后才出现的,这个在下面我将会提到。__construc

无法访问局域网_局域网无法访问-程序员宅基地

文章浏览阅读539次。win7无法访问局域网,原来好好的。最近无法访问网上找了好多方法都试过了,该开的开该关的关还是不行。网上邻居里没有发现不了其它计算机,可以ping通共享的那台电脑,通过ip访问提示0x80070035找不到网络路径。故障现象见下图。具体解决方法见以下步骤1、首先通过右下角网络图标打开网络和共享中心。2、在弹出的对话框中点击本地连接3、在本_局域网无法访问

HTML中使用JS对Date控件的赋值_document.getelementbyid('date501') 赋值-程序员宅基地

文章浏览阅读633次。学习html中遇到的一点困难,做了这点笔记先附上我的js代码var dt=new Date();var datev=document.getElementById("datev"); var newdate=dt.getFullYear() +"-"+(dt.getMonth()>9?dt.getMonth():"0"+dt.getMonth()) +"-"+(dt.getDate()>9?dt.getDate():"0"+dt.getDate()); ..._document.getelementbyid('date501') 赋值

Hanlp官网_hanlpcom 网站是做什么的-程序员宅基地

文章浏览阅读232次。HanLP.com开发者资源_hanlpcom 网站是做什么的

Unity调用Android遇到的奇葩问题-程序员宅基地

文章浏览阅读282次。因为项目需求,所以Android原生的aar包要用不同的包名打出来,这时候就遇到很多奇怪的问题,也不排除是unity版本问题,因为应客户要求,unity版本使用的是2017.4一.打包出来有两个启动项/闪退检查Android项目与unity项目中的所有包名是否一致,检查的地方主要有 :1.插件中的AndroidManifest.xml2.Player Setting -二..._unity plugins里shader打不进android包

随便推点

android源码编译记录_android打开编译终端记录-程序员宅基地

文章浏览阅读336次。android源码编译_android打开编译终端记录

docker运行grafana_docker 部署 grafana.ini 配置 root_url-程序员宅基地

文章浏览阅读2.1k次。官方文档:http://docs.grafana.org/docker run -d -p 3000:3000 --name=grafana --network host \-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \-e "GF_SECURITY_ADMIN_PASSWORD=admin" \grafana/grafana..._docker 部署 grafana.ini 配置 root_url

【rocketmq启动nameserver失败】_nameserver:未找到命令-程序员宅基地

文章浏览阅读1.4k次。【rocketmq启动nameserver失败】_nameserver:未找到命令

Unity 打包后 无阴影 阴影不显示_unity打包出来没有阴影了-程序员宅基地

文章浏览阅读1w次,点赞7次,收藏14次。今天工作的时候发现,打包后阴影没办法显示浪费整整两个小时一直以为是代码问题。。。原来是因为默认渲染设置的问题。。。看下图very low 、low、medium默认是不开启阴影的---打开build settings-playersettings。。。如果你的打包设置不显示渲染级别的窗口那就默认会选择low。。。包括第二个选项(Hidden by Default)如果你把打包好的工程给别人之后,默..._unity打包出来没有阴影了

HDU 4513 吉哥系列故事 完美队形II (manacher)-程序员宅基地

文章浏览阅读307次。题意: N<=105的串,求最长回文串,并且左边的部分是不降的N<=10^5的串, 求最长回文串, 并且左边的部分是不降的分析: 计算p数组的时候判断一下就好了,−−注意′#′计算p数组的时候判断一下就好了, - - 注意'\#'代码://// Created by TaoSama on 2015-11-03// Copyright (c) 2015 TaoSama. All r

关于Larvel/Lumen 运行Vue项目出现“please provide a valid cache path”问题的解决办法_invalidargumentexception: please provide a valid c-程序员宅基地

文章浏览阅读551次。Larvel/Lumen 运行Vue项目出现“please provide a valid cache path”问题的解决办法在运行公司项目的时候登录页面出现以下报错please provide a valid cache path错误提示的出错位置:// vendor/illuminate/view/Compilers/Compiler.phpif (! $cachePath) {..._invalidargumentexception: please provide a valid cache path. in file

推荐文章

热门文章

相关标签