关于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之Function函数
在javascript里,函数是可以嵌套的. 如: function(){ funcrion square(x){ return x*x; } return square(10); } 在javas ...
- scheme I/0 输入输出操作
2.1. open-input-file, read-char, and eof-object? The function (open-input-file filename) is availabl ...
- UESTC_秋实大哥去打工 2015 UESTC Training for Data Structures<Problem G>
G - 秋实大哥去打工 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Subm ...
- sroHOBOorz来自HOBO的高精类
/* bigint() bigint(long long) bigint(bigint) bigint(char*) bigint(string) +, +=, ++ -, -=, -- *, *= ...
- SQL Server 中使用参数化Top语句
在T-Sql中,一般top数据不确定的情况下,都是拼sql,这样无论是效率还是可读性都不好.应该使用下面参数化Top方式:declare @TopCount int set @TopCount = 1 ...
- SQL Server 2000 函数使用---CAST 和 CONVERT
本文来自:http://www.cnblogs.com/xh831213/category/47654.html 将某种数据类型的表达式显式转换为另一种数据类型.CAST 和 CONVERT 提供相似 ...
- 有关docker新版的icc、iptables的一个巨坑
之前玩过docker的icc=false.iptables=true 按照这两个参数配置之后,想指定两个特定的容器通讯,直接用--link即可. 但最近我在下载了1.12新版的docker,这个不奏效 ...
- sybase用户管理(创建、授权、删除)
一.登录用户管理:1.创建用户:sp_addlogin loginame, passwd [, defdb] [, deflanguage] [, fullname] [, passwdexp] [, ...
- Web App 图片上传编辑器
使用cropper.jqueryUpload插件.Jquery.src-dataurl-canvas-blob文件. @{ ViewBag.Title = "更新头像"; Layo ...
- android第三方分享之友盟社会化组件
前言 现在几乎所有的app都带有分享功能,第一为了更好地推广自己的产品,第二作为使用者也能及时的把自己觉得好的文章,话题,app分享到社交平台供大家一起学习和使用.开发中虽然android系统自带分享 ...