【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

举报
海神之光 发表于 2022/07/10 23:39:46 2022/07/10
【摘要】 一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】 获取代码方式2: 通过订阅紫极神光博客付费专栏,...

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、基于划分的K-means聚类算法简介

随着信息技术的快速发展及广泛推进,数据挖掘成为当今社会研究的一个热点领域,聚类分析是数据挖掘中的一项核心技术,它通过研究数据的分布特征来发现数据背后隐藏的事物内部规律。聚类算法有很多种,每一种算法都有自己的独特之处。K-means算法是聚类分析的经典算法之一,文中主要对K-means算法进行阐述。

1 聚类分析概述
聚类分析是人的一项重要活动,比如,小孩子通过不断学习都能够区分动物和植物,也能够区分鸡和狗。聚类与分类不同,分类是按照一定的标准把数据分成不同的类别,聚类是通过观察数据的特征寻找这个标准。

聚类分析的核心是聚类,即将物理或抽象对象的集合分成相似的对象类的过程。通过聚类把数据分成不同的集合,同一个集合中的数据对象彼此相似,不同数据集合的对象之间彼此相异。形成聚类的原则是使类内部的相似性最大,类间的相似性最小。聚类的研究方法有很多,用的比较多的是K-means(K-平均值)、BIRCH算法、clara算法、eLIQuE算法、chameleon(变色龙)算法等。

聚类可以对迅猛增长的数据加以组织,人们通过聚类可以发现一些数据分布的特征,因此成为比较活跃的研究课题。目前,很多领域已经成功地应用了该项技术,包括市场研究、人工智能和图像处理、生物学、数据压缩等领域[2]。例如,在生物学领域,聚类可以自动对物种分类,依据是物种特征;还可以更好地理解生物学中基因的功能。在商业中,市场分析员通过聚类分析可以很容易发现顾客库中不同的顾客群。聚类还可以应用于客户关系管理,对从接触点收集到的数据进行分析,可以得出有价值的知识,以便用于改进营销方案、制定定价和促销策略。

2 K-means算法
2.1 K-means算法基本思想

K-means算法,也被称为K-均值,是最常用、最著名的一种聚类算法。K-means算法是把n个对象分成K个簇,用簇中对象的均值表示每个簇的质心,通过迭代使每个簇内的对象不再发生变化为止。这时准则函数达到最优,每个簇内相似度高,簇间相似度低。其过程描述如下:

(1)首先,随机地选择K个对象,代表要分成的K个簇的初始均值或中心。
(2)计算其余对象与各个均值的距离,然后把它们分别划分到距离中心最近的簇中。
(3)计算每个簇中所有对象的平均值,作为每个新的簇中心
(4)计算所有对象与新的K个中心的距离,根据“距离中心最近”原则,重新划分所有对象到各个簇中
(5)重复(3)、(4),直至所有簇中心不变为止。

2.2 K-means算法划分聚类的三个关键点
(1)数据对象的划分
(1)距离度量的选择
K-means算法比较适合处理连续型属性,对离散型属性不适合。在计算数据对象之间的距离时要选择合适的相似性度量。比较著名的距离度量是欧几里得距离和曼哈顿距离[3],其中最常用的是欧几里得距离,其公式如下:
在这里插入图片描述
这里xi,xj表示两个d维数据对象,xi=(xi1,xi2,…,xid),xj=(xj1,xj2,…,xjd),d(xi,xj)表示对象xi和xj之间的距离,距离越小,二者越相似;距离越大,二者差异就越大。

根据欧几里得距离,计算出每一个数据对象与各个簇中心的距离。

(2)选择最小距离,即如果
在这里插入图片描述
那么,p∈ci;P表示给定的数据对象;m1,m2,…,mk分别表示簇c1,c2,…,ck的初始均值或中心;

(2)准则函数的选择。K-means算法采用平方误差准则函数来评价聚类性能,其公式如下:
在这里插入图片描述
E表示数据库中所有对象的平方误差和,P表示给定的数据对象,mi表示簇ci的均值。

(3)簇中心的计算。用每一簇的平均值作为计算相似度簇中心的依据,其公式如下:
在这里插入图片描述
这里假设簇c1,c2,…,ck中的数据对象个数分别为n1,n2,…,nk。

2.3 K-means算法的实现
(1)划分数据对象。选择k个数据对象作为初始k个聚类的中心,根据欧几里得距离公式,依次比较每个数据对象与各个中心的距离,选择距离中心最近的簇,依次把n个对象划分到k个簇中[4]。完成第一次划分之后,重新计算新的簇的中心,然后开始重新划分数据对象,直到新的簇中心不再发生变化,停止迭代。

(2)计算簇中心。每次划分数据对象之后,都要重新计算簇中心,直到簇中心不再发生变化为止。

三、部分源代码

 clear all;
close all;
clc;
%第一类数据
mu1=[10 3 3];  %均值
S1=[0.3 0 0;0 0.35 0;0 0 0.3];  %协方差
data1=mvnrnd(mu1,S1,100);   %产生高斯分布数据
%%第二类数据
mu2=[5 10 5];
S2=[0.3 0 0;0 0.35 0;0 0 0.3];
data2=mvnrnd(mu2,S2,150);
mu3=[10 10 10];
S3=[0.3 0 0;0 0.35 0;0 0 0.3];
data3=mvnrnd(mu3,S3,200);
%第三个类数据
mu4=[15 15 15];
S4=[0.3 0 0;0 0.35 0;0 0 0.3];
data4=mvnrnd(mu4,S4,50);
data=[data1;data2;data3;data4];   %这里的data是不带标号的
plot3(data(:,1),data(:,2),data(:,3),'+')
grid on;
hold on;
k=7;
r=10;
p=2;
for i=k:-1:2 
   if p == 0
      break;
   end
   k=i
    [resX resY resZ seedX seedY seedZ record] = FunK_mean3D(data(:,1),data(:,2),data(:,3),k,r);
  % 下面是标记出每一个类别的类别代表点 
  for j=k:-1:2
      p=0;
      j
      for m=j-1:-1:1
          m
          power(seedX(m)-seedX(j),2)+power(seedY(m)-seedY(j),2)+power(seedZ(m)-seedZ(j),2)
         if (power(seedX(m)-seedX(j),2)+power(seedY(m)-seedY(j),2)+power(seedZ(m)-seedZ(j),2))<r
            p=1
            break;
         end
      end
      p
       if p==1
          break;
       end
  end
end

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

四、运行结果

在这里插入图片描述
在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]丁丽,孙高峰.基于划分的K-means聚类算法[J].宜春学院学报. 2013,35(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。

原文链接:qq912100926.blog.csdn.net/article/details/125696414

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。