初探k-means(Matlab)

俗话说:“物以类聚,人以群分”,聚类分析的目的是:在数据中发现数据对象之间的关系,并将数据进行分组,使得组内的相似性尽可能大,组间的差别尽可能大,那么聚类的效果越好。

例如在市场营销中,聚类分析可以帮助市场分析人员从消费者数据库中区分出不同的消费群体来,并且概括出每一类消费者的消费模式或者说习惯。在机器学习中,聚类分析也可以作为其他分析算法的一个预处理步骤。

下面介绍诸多聚类算法中的K-means算法。

在机器学习与数据挖掘中,K-Means是一种cluster analysis的算法,属于无监督学习的算法范畴。K-Means算法简单,易于理解。其具体算法流程如下:

(1)随机从数据中选取K个元素,作为k个簇(这里可以理解为各个分类)中各自的中心。

(2)分别计算各个元素到这K个簇的距离,并将这些元素划归到距离最近的簇。这里可以认为距离越近,两者之间越相似。而不同距离的度量其聚类结果不同。这里提供了不同的距离参考。点击打开链接

(3)重新计算各个簇的中心点。例如取平均的方式。

(4)重复2~3步,直到迭代次数达到最大值或者中心点移动小于某个临界值(即认为已经收敛)。

下面利用Matlab具体进行讲解:

一、首先输入数据,这里选用Matlab自带的数据fisheriris,然后判断数据中是否含有异常值

clear
clc
%%输入数据
load fisheriris
data= meas(:,3:4);
figure(1)
plot(data(:,1),data(:,2),'*')%%判断数据中是否含有错误数据或非法字符
isNAN = any(isnan(data),2);  %any表示有非0元素时返回为1,any(A,2)表示矩阵的行向量进行判断
hadNAN=any(isNAN);          %表示数据中含有坏数据
if hadNANdisp('kmeans:MissingDataRemoved');disp(['missaddress is located ' num2str(find(isNAN==1))])data = data(~isNAN,:);
end

二、配置K-means参数,包括聚类类别K、设置距离方式以及最大迭代次数和偏差等。

%%设置聚类类别k
k=3;%%设置距离方式
%距离选择
%欧式距离:'euclidean',标准欧式距离:'seuclidean'
%曼哈顿距离(城市区块距离):'cityblock'
%闵可夫斯基距离:'minkowski'
%切比雪夫距离:'chebychev'
%夹角余弦距离:'cosine'
%相关距离:'correlation'
%汉明距离:'hamming'
distanceSize='euclidean';%%设置最高迭代次数step和偏差
step=10;
maxdeviation=1e-5;

三、开始K-means聚类

[m,n]=size(data);         %数据个数为m个,维度为n维
center = zeros(k,n+1);    %聚类中心
center(:,n+1) =1:k ;      %生成聚类的类别
dataSize=zeros(m,1);      %生成数据类别
for j=1:kcenter(j,1:n)=data(randi([1,m]),:);  %随机产生k个中心
endfor i=1:step%%第二步,分别计算各个点到中心的距离,并将离中心距离近的点归为一类%计算距离for j=1:kdistance(:,j)=pdist2(data,center(j,1:n),distanceSize);end%取距离最小的点归为一类[~,temp]=min(distance,[],2);dataSize=temp;oldcenter=center;%%更新中心点for j=1:kcenter(j,1:n)=mean(data(dataSize==j,:));enddeviation=sum(abs(center-oldcenter));  %残差if deviation<maxdeviationbreak;end
end

四、画出各个类别

figure(2)
for i=1:kscatter(data(dataSize==i,1),data(dataSize==i,2));hold on
end
plot(center(:,1),center(:,2),'x','MarkerSize',10);
hold off

可以看出这里标注了聚类结果和各个簇的中心点位置。下面是运算数据结构:

我们可以看到这里j=3;也就是说只迭代了3次,算法达到收敛。

因此,K-means具有如下优点:

(1)算法简单,特别对于类球型分布的数据效果特别好。

(2)收敛速度快,往往只需要5~6步即可达到收敛。

(3)算法复杂度为O(t,k,n)。其中t为迭代次数,k为分类的个数,n为数据点的个数。

当然,K-means也有一些缺点。

(1)由于聚类算法为无监督学习,人们事先无法确定到底需要分多少个簇,也就是说k值无法提前确定。

(2)同很多算法一样,它可能会收敛到局部最优解。而这和初始点的选取有关,我们可以采用多次选取初始点,最后选择效果最好的结果。

(3)对噪声影响敏感。我们可以看出K-means中means表示平均值,而平均值往往对噪声敏感,一个离群点往往会对整个结果造成很大影响。

(4)不适合某些非球类数据分布。

值得注意的是,这些缺点也正是K-means可以改进的地方。

最后,这里再介绍一个指标:silhouette。

这里,silhouette(i)=(b(i)-a(i))/max{b(i),a(i)}

a(i)表示第i个点到所被分类的簇的中心点的距离。

b(i)表示第i个点到其他簇中心点距离的最小值。

那么silhouette表示什么呢?我们可以看出,当a(i)<b(i)时,silhouette>0,表示该点距离该类中心距离更近;当a(i)>b(i)时,silhouette<0,表示该点距离其他类中心距离更近,这就好比一个人与他宿舍的人不如与他隔壁宿舍的人更加亲近。

如图所示为silhouette结果

%%silhouette
figure(3)
s=silhouette(data,dataSize);

可以看到图中有个别点的silhouette为负数,我们将其找到,这里‘*’表示该点silhouette为负数。我们可以看到由于数据的分布为狭长的倾斜向上的分布,右上方两类距离很近,在这两类的交界处,很容易出现划归为A类的数据离另一类B更近的现象。

机器学习之聚类分析---K-means(一)相关推荐

  1. python 聚类分析 k means

    Kmeans 是一种动态聚类方法,其基本思想是:首先随机选取 K 个点作为初始凝聚点,按照距离最近原则划分为 K 类:然后重新计算 K 个类的重心作为新的凝聚点,再按照距离最近原则重新分类:重复这一过 ...

  2. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  3. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  4. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  5. 为了联盟还是为了部落 | K means

    1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...

  6. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  7. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  8. 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means

    学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...

  9. 机器学习算法之 K 均值聚类

    机器学习算法之 K 均值聚类 本文我们来学习一下另一种经常听到的机器学习算法-- K 均值聚类. 这个名字确实跟"K 近邻"有些相像,但是要明确的是,"K 近邻" ...

  10. 机器学习算法之 K 近邻

    机器学习算法之 K 近邻 所谓"K 近邻(K-nearest neighbor,K-NN)",顾名思义,指的是"K 个最近的邻居",属于一种监督学习的方法. 1 ...

最新文章

  1. 机器学习的中流砥柱:用于模型构建的基础架构工具有哪些?
  2. rstudio怎么安装ggplot2_如何基于ggplot2构建相关系数矩阵热图
  3. cd linux menu.lst,用ultraiso制作cdlinux的U盘启动盘
  4. Linux系统编程:mmap介绍和使用mmap实现进程间通信
  5. 我扒了 6730 个微信用户数据,得出了这些结论......
  6. HashMap(HashSet)的实现
  7. 【codevs1078】最小生成树
  8. RCNN学习笔记(1):Rich feature hierarchies for accurate object detection and semantic segmentation
  9. 全站最全NLP中英文停用词表(包含标点符号,可直接复制)
  10. C 语言中 bzero()函数的使用
  11. Cgroup框架分析
  12. 数据库架构设计——索引结构设计
  13. 爬虫学习5-JSON 数据的分析与解析
  14. AD 批量修改封装 元件以及封装的关系 以及快速查找器件
  15. 想想搭建个域控文件打印机服务器
  16. 数据采集程序-----直播间
  17. 华为设备配置DNS客户端
  18. Win10已安装更新无法卸载怎么办?
  19. 驾考一点通维语版_驾考宝典维语版APP下载-驾考宝典维语版正式版下载[安卓版]-华军软件园...
  20. 闲聊----Simulation,MSaaS到SaaS

热门文章

  1. 移动端Monkey测试
  2. 26、wxWidgets小部件之wxSlider和wxSpinCtrl
  3. A02-自定义Icon图标
  4. 笔记本键盘敲K,L,M变为2,3,0的解决方法
  5. 关于okhttp3网络框架的onfailure错误
  6. 2021-05-16 C#.NET面试题 C#中索引器的实现过程,是否只能根据数字进行索引,请描述一下
  7. 如何计算计算机的主机地址,子网掩码的主机地址是如何计算的
  8. Sentinel参数设置不当导致日志数量持续增长分析
  9. 学以致用——利用直方图分析个股涨幅(Excel+Spotfire)
  10. 无法写入预编译头文件,由于 IO 设备错误,无法运行此项请求的错误的解决