关于k-means聚类算法的matlab实现
在数据挖掘中聚类和分类的原理被广泛的应用.
聚类即无监督的学习.
分类即有监督的学习.
通俗一点的讲就是:聚类之前是未知样本的分类.而是根据样本本身的相似性进行划分为相似的类簇.而分类
是已知样本分类,则需要将样本特征和分类特征进行匹配,进而将每个样本归入给出的特定的类.
由于本文是对聚类算法中的k-means算法的实现,所以接下来主要进行一些聚类算法的介绍.
聚类算法包括多种,可按如下分配:
1.划分法:基于此种思想的聚类算法包括 k-means,PAM,CLARA,CLARANS,STIRR.
2.层次法:基于此种思想的聚类算法包括BIRCH,CURE,Rock,Chamlean
3.密度法:基于此种思想的聚类算法包括DBSCAN,OPTICS,DENCluE,FDBSCAN,InCremental DBSCAN
4.网格法:基于此种思想的聚类算法包括STING,WaveCluster,OptiGrid
5.模型法:基于此种思想的聚类算法包括AutoClass,COBWEB,CLASSIT
6.神经网络:基于思想网络的聚类算法有两种:其一 自组织特征映射 其二 竞争学习
而k-means是基于划分思想.所以在这里介绍一下划分聚类思想:
1.对一组样本数据首先随机确定K个聚类中心
2.后来通过反复的迭代改变聚类中心,使得不断优化.而不断优化的意思是:同一类样本距离聚类中心越来越近,
而不同类样本之间距离越来越远.而最终收敛于聚类中心的位置不再移动.
既然k-means是基于这样的划分思想,那么当然k-means的算法思想精髓和划分思想是一致的.
k-means算法如下:
1.设样本为X{x(1),x(2)........}
2.首先在样本中随机选取k个聚类中心.
3.然后对除开聚类中心外的样本点计算到每个聚类中心的距离.将样本归类到距离样本中心最近的样本点.这便实
现了最初的聚类
4.再对每个类重新计算其聚类中心.然后重新对除开聚类中心的样本点计算到三个聚类中心的距离.将样本归类到距
离样本中心最近的样本点,这便实现了第一次优化聚类.
5.重复步骤四,直到两次聚类中心的位置不再变化,这便完成了最终的聚类
K-means matlab实现如下:(k=3)
clc;
clear; ClomStatic=[1,2,3,25,26,27,53,54,55];
len=length(ClomStatic);%求向量ClomStatic的长度 k=3; %给定的类别数目 %产生三个随机整数,随机聚类中心
p=randperm(len);
Temp=p(1:k);
Center=zeros(1,k);
for i=1:k
Center(i)=ClomStatic(Temp(i));
end %计算除聚类中心外的样本数据到聚类中心的距离,然后进行聚类
TempDistance=zeros(len,3);
while 1 Circulm=1; p1=1;
p2=1;
p3=1; JudgeEqual=zeros(1,k);
if(Circulm~=1)
clear Group1 Group2 Group3;
end
for i=1:len
for j=1:3
TempDistance(i,j)=abs(ClomStatic(i)-Center(j));
end
[RowMin RowIndex]=min(TempDistance(i,:));
if(RowIndex==1)
Group1(p1)=ClomStatic(i);
p1=p1+1;
elseif(RowIndex==2)
Group2(p2)=ClomStatic(i);
p2=p2+1;
elseif(RowIndex==3)
Group3(p3)=ClomStatic(i);
p3=p3+1;
end
end len1=length(Group1);
len2=length(Group2);
len3=length(Group3); %计算Group1,Group2,Group3的均值
MeanGroup1=mean(Group1);
MeanGroup2=mean(Group2);
MeanGroup3=mean(Group3); %分别计算每个类中距离均值最近的一个点作为新的聚类中心
AbsGroup1=zeros(1,len1);
for t=1:len1
AbsGroup1(t)=floor(abs(Group1(t)-MeanGroup1));
end
[MaxAbsGroup1 MaxAbsGroup1Index]=min(AbsGroup1);
NewCenter(1)=Group1(MaxAbsGroup1Index);
clear AbsGroup1; AbsGroup2=zeros(1,len2);
for t=1:len2
AbsGroup2(t)=floor(abs(Group2(t)-MeanGroup2));
end
[MaxAbsGroup2 MaxAbsGroup2Index]=min(AbsGroup2);
NewCenter(2)=Group2(MaxAbsGroup2Index);
clear AbsGroup2; AbsGroup3=zeros(1,len3);
for t=1:len3
AbsGroup3(t)=floor(abs(Group3(t)-MeanGroup3));
end
[MaxAbsGroup3 MaxAbsGroup3Index]=min(AbsGroup3);
NewCenter(3)=Group3(MaxAbsGroup2Index);
clear AbsGroup3; %判断新的类和旧类的聚类中心是否不同,不同则继续聚类,否则聚类结束
JudgeEqual=zeros(1,k);
for i=1:k
JudgeEqual=(NewCenter==Center);
end S=0;
for i=1:k
if(JudgeEqual(i)==1)
S=S+1;
end
end if(S==3)
break;
end Circulm=Circulm+1;
end
聚类结果如下:
关于k-means聚类算法的matlab实现的更多相关文章
- K均值聚类算法的MATLAB实现
1.K-均值聚类法的概述 之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为在学模式识别,又重新接触了这 ...
- ISODATA聚类算法的matlab程序
ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...
- canopy聚类算法的MATLAB程序
canopy聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. canopy聚类算法简介 Canopy聚类算法是一个将对象分组到 ...
- mean shift聚类算法的MATLAB程序
mean shift聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. mean shift 简介 mean shift, 写的 ...
- k均值聚类算法原理和(TensorFlow)实现
顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...
- K均值聚类算法
k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个 ...
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)
其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...
- 聚类之K均值聚类和EM算法
这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...
随机推荐
- javascript之对象
一.创建对象 1.对象直接量. var point = { x:0,y:0 }; //point就是一个对象,跟C#不同,它不需要一定有类才能创建对象. 2.通过new创建对象 var d = new ...
- Jquery EasyUI修改行背景的两种方式
1.数据加载完成不请求后台的做法 方式一: //更改表格行背景 function changeLineStyle(index){ var rows=$("#alertGird"). ...
- 阿里云主机和RDS使用心得
本文上非广告,只是将这近1年的使用过程给大家分享一下. 去年下半年,服务器托管到期,加上服务器也使用了5.6年,严重老化,当时正好看到阿里云的宣传广告,就开始了阿里云使用历程.陆续购买了4台云主机,I ...
- Java如何访问Axis2服务端
import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.address ...
- [KMP求最小循环节][HDU3746][Cyclic Nacklace]
题意 给你个字符串,问在字符串末尾还要添加几个字符,使得字符串循环2次以上. 解法 无论这个串是不是循环串 i-next[i] 都能求出它的最小循环节 代码: /* 思路:kmp+字符串的最小循环节问 ...
- 【模拟】【HDU1443】 Joseph
Joseph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- stagefright框架(二)- 和OpenMAX的運作
Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的. (1) OMX_Init OMXCli ...
- DWZ在APS.NET WebForm中的使用(一)
1.前言 在最近的项目开发中,使用到了前端框架DWZ.DWZ是一款较为优秀的后台管理界面框架,但官方发布的文档确实令人汗颜,简单几页了事,有点对自己的产品不负责任了.同时感谢网友石头的热心帮助,在我这 ...
- 在C#实现托盘效果(转)
桌面程序的开发中,经常考虑能在状态栏实现托盘快捷操作,托盘程序的实现在API时代,还是相对复杂的,首先在MSDN中可以查看其函数细节, 然后在根据其要求的参数进行复杂的设置. 在.NET时代 ...
- C++在数组元素个数未知情况下声明数组
我们都从书上学习的方法,定义一个数组需要数组名.类型以及数组元素个数,一般定义必须明确元素的个数,否则无法通过编译. 1. int a[]; 2. int n; int a[n]; 就想上面这两种情况 ...