matlab数学模型之k-means聚类

k-means聚类

概念:

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程即为聚类,通俗的讲,就是“物以类聚,人以群分”
聚类是一种数据探索的分析方法,可以在大量的数据中找到某一种结构。
由聚类生成的簇是一组数据对象的集合,这些对象与同一个簇的对象彼此相似,与其他簇的对象相异。
聚类分析又称群分析,它是研究分类问题的一种统计方法,主要分为以下几种:
划分方法、层次方法、基于密度的方法、基于网格的方法、基于模型的方法
以下总结了划分法K-means的算法原理及步骤:

1.K-means算法原理

随机从数据集中选取K个点,每个点初始代表每个簇的聚类中心。计算剩余各个样本到聚类中心的的距离,并将它赋给距离最近的簇,然后重新计算每一簇的平均值,整个过程不断重复(算法迭代),直到相邻两次调整没有明显变化,此时数据聚类形成的簇已经收敛。迭代终止条件也可以是以下任意一个:
a.没有对象被重新分配给不同的聚类
b.聚类中心不再发生变化
c.误差平方和局部最小

2.K—means算法步骤

处理流程:
a.从N个数据对象任意选择K个对象作为初始聚类中心
b.循环c,d步骤
c.根据聚类对象的均值,计算每个对象与这些中心对象的距离。并根据最小距离重新对相应的对象进行划分。
d.重新计算每个聚类的均值,直到聚类中心不再变化。使得E式最小
在这里插入图片描述
已知20个样本,每个样本两个特征,对此数据进行分析为例,以下基于MATLAB实现聚类:

%% 数据准备和初始化
clc
clear
x=[0 0;1 0; 0 1; 1 1;2 1;1 2; 2 2;3 2; 6 6;7 6; 8 6; 6 7; 7 7; 8 7; 9 7 ; 7 8; 8 8; 9 8; 8 9 ; 9 9];
z=zeros(2,2);
z1=zeros(2,2);
z=x(1:2, 1:2);
%% 寻找聚类中心
while 1
   count=zeros(2,1);
   allsum=zeros(2,2);
   for i=1:20 % 对每一个样本i,计算到2个聚类中心的距离
      	temp1=sqrt((z(1,1)-x(i,1)).^2+(z(1,2)-x(i,2)).^2);
        temp2=sqrt((z(2,1)-x(i,1)).^2+(z(2,2)-x(i,2)).^2);
        if(temp1<temp2)
          count(1)=count(1)+1;
          allsum(1,1)=allsum(1,1)+x(i,1);
          allsum(1,2)=allsum(1,2)+x(i,2);
        else
          count(2)=count(2)+1;
          allsum(2,1)=allsum(2,1)+x(i,1);
          allsum(2,2)=allsum(2,2)+x(i,2);
        end
   end
   z1(1,1)=allsum(1,1)/count(1);
   z1(1,2)=allsum(1,2)/count(1);   
   z1(2,1)=allsum(2,1)/count(2);   
   z1(2,2)=allsum(2,2)/count(2);
   if(z==z1)       
   	break;   
   else       
   	z=z1;   
   end
end
%% 结果显示
disp(z1);% 输出聚类中心
plot( x(:,1), x(:,2),'k*',...   
	'LineWidth',2,...   
	'MarkerSize',10,...   
	'MarkerEdgeColor','k',...   
	'MarkerFaceColor',[0.5,0.5,0.5])
hold on
plot(z1(:,1),z1(:,2),'ko',...   
	'LineWidth',2,...   
	'MarkerSize',10,...    
	'MarkerEdgeColor','k',...   
	'MarkerFaceColor',[0.5,0.5,0.5])
set(gca,'linewidth',2) ;
xlabel('特征x1','fontsize',12);
ylabel('特征x2','fontsize',12);
title('K-means分类图','fontsize',12);

输出结果及图形分析如下:
在这里插入图片描述
在这里插入图片描述
由上图结果,聚类效果显著

3.聚类模型评估:

优点: 算法原理简单,处理快 当聚类密集时,类与类之间区别明显,效果好

缺点: K是事先给定的,K值选定难确定 对孤立点、噪声敏感 结果不一定是全局最优,只能保证局部最优。很难发现大小差别很大的簇及进行增量计算结果不稳定,初始值选定对结果有一定的影响计算量大

对于K值取值问题可以参考博主SongpingWang的博文,本人觉得写的很好,算是良心博主了
附上K值参考及SSE指标分析的博主网址:https://blog.csdn.net/wsp_1138886114/article/details/80475981#1-

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值