在数据挖掘中聚类和分类的原理被广泛的应用.

聚类即无监督的学习.

分类即有监督的学习.

通俗一点的讲就是:聚类之前是未知样本的分类.而是根据样本本身的相似性进行划分为相似的类簇.而分类

是已知样本分类,则需要将样本特征和分类特征进行匹配,进而将每个样本归入给出的特定的类.

由于本文是对聚类算法中的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实现的更多相关文章

  1. K均值聚类算法的MATLAB实现

    1.K-均值聚类法的概述    之前在参加数学建模的过程中用到过这种聚类方法,但是当时只是简单知道了在matlab中如何调用工具箱进行聚类,并不是特别清楚它的原理.最近因为在学模式识别,又重新接触了这 ...

  2. ISODATA聚类算法的matlab程序

    ISODATA聚类算法的matlab程序 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 参考:Kmeans及ISODATA算法的matlab实现 算法 ...

  3. canopy聚类算法的MATLAB程序

    canopy聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. canopy聚类算法简介 Canopy聚类算法是一个将对象分组到 ...

  4. mean shift聚类算法的MATLAB程序

    mean shift聚类算法的MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. mean shift 简介 mean shift, 写的 ...

  5. k均值聚类算法原理和(TensorFlow)实现

    顾名思义,k均值聚类是一种对数据进行聚类的技术,即将数据分割成指定数量的几个类,揭示数据的内在性质及规律. 我们知道,在机器学习中,有三种不同的学习模式:监督学习.无监督学习和强化学习: 监督学习,也 ...

  6. K均值聚类算法

    k均值聚类算法(k-means clustering algorithm)是一种迭代求解的聚类分析算法,其步骤是随机选取K个对象作为初始的聚类中心,然后计算每个对象与各个种子聚类中心之间的距离,把每个 ...

  7. 机器学习实战---K均值聚类算法

    一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...

  8. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  9. 聚类之K均值聚类和EM算法

    这篇博客整理K均值聚类的内容,包括: 1.K均值聚类的原理: 2.初始类中心的选择和类别数K的确定: 3.K均值聚类和EM算法.高斯混合模型的关系. 一.K均值聚类的原理 K均值聚类(K-means) ...

随机推荐

  1. C# 动态Linq(结合反射)

      这篇文章决定对最近一个单机版Web程序用到的东西总结一下. 一.反射Linq之OrderBy 动态Linq结合反射对某字段排序: namespace 动态Linq { class Program ...

  2. SSRS 请求并显示SharePoint人员和组字段

    场景: 使用Reporting Service请求SharePoint List,该list中包含人员和组字段.要求:只显示人员或组的display name.示例如下: 项目 参与人员 期望显示 项 ...

  3. Java Socket 简单梳理

    Sockets let you send raw streams of bytes back and forth between two computers, giving you fairly lo ...

  4. Java Service Wrapper

    Java Service Wrapper 将Java 应用程序部署成Windows系统服务Java Service Wrapper 1 Product Overview 1 Editions 2 Me ...

  5. js埋点(转载)

    页面埋点的作用,其实就是用于流量分析.而流量的意思,包含了很多:页面浏览数(PV).独立访问者数量(UV).IP.页面停留时间.页面操作时间.页面访问次数.按钮点击次数.文件下载次数等.而流量分析又有 ...

  6. 计算机管理cmd命令行

    给你一个资料,想必对你来讲有保存价值: 开始菜单中的“运行”是通向程序的快捷途径,输入特定的命令后,即可快速的打开Windows的大部分程序,熟练的运用它,将给我们的操作带来诸多便捷. winver ...

  7. uva 10911 - Forming Quiz Teams(记忆化搜索)

    题目链接:10911 - Forming Quiz Teams 题目大意:给出2 * n个选手的坐标, 要求将所有的选手分成n组, 每组两个人, 所有组的两个人之间的距离之和要最小, 输出最小值. 解 ...

  8. kettle工具同步数据乱码-Linux下乱码问题二

    将写好的kettle工程部署到Linux下后,同步的数据都成了乱码,幸运的是数据库有备份. 下面就说一下,kettle工程如何同步两端编码格式都是utf8的数据库. 我们只需要更改kettle数据库连 ...

  9. 【巧妙预处理系列】【UVA1330】City game

    最大子矩阵(City Game, SEERC 2004, LA 3029) 给定一个m×n的矩阵,其中一些格子是空地(F),其他是障碍(R).找出一个全部由F组成的面积最大的子矩阵,输出其面积乘以3后 ...

  10. tostring的用法

    ToString()可空参数单独使用,同时可以加一个格式化参数,具体方式如下: . 取中文日期显示_年月 currentTime.ToString("y"); 格式:2007年1月 ...