上一篇博文中介绍了聚类算法中的kmeans算法.无可非议kmeans由于其算法简单加之分类效率较高

已经广泛应用于聚类应用中.

然而kmeans并非十全十美的.其对于数据中的噪声和孤立点的聚类带来的误差也是让人头疼的.

于是一种基于Kmeans的改进算法kmediod应运而生.kmediod和Kmeans算法核心思想大同小异,但是最大

的不同是在修正聚类中心的时候,kmediod是计算类簇中除开聚类中心的每点到其他所有点的聚类的最小值

来优化新的聚类中心.正是这一差别使得kmediod弥补了kmeans算法的缺点.kmediod对噪声和孤立点不敏感.

但是事情都具有两面性.这种聚类准确性的提高是牺牲聚类时间来实现的.不难看出.kmediod需要不断的找出每

个点到其他所有点的距离的最小值来修正聚类中心,这大大加大了聚类收敛的时间.所有Kmediod对于大规模数据

聚类就显得力不从心,只能适应较小规模的数值聚类.

接下来我再对kmediod的算法描述一遍:

1.设样本为X{x(1),x(2)........}

2.首先在样本中随机选取k个聚类中心.

3.然后对除开聚类中心外的样本点计算到每个聚类中心的距离.将样本归类到距离样本中心最近的样本点.这便

实现了最初的聚类

4.再对每个类中除类中心的点外的其他样本点计算到其他所有点的距离和的最小值.将该最小值点作为新的聚类

中心便实现了一次聚类优化.

5.重复步骤四,直到两次聚类中心的位置不再变化,这便完成了最终的聚类

注:步骤4正体现了kmeans和kmediod的核心差异

k-mediod的matlab实现代码如下:

 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); %分别计算每个类中除开类中心的点到其他所有点的距离和E,E最小时为该类新的聚类中心.
E=zeros(1,len1-1);
q1=1;
for j=1:len1
for i=1:len
if(Group1(j)~=Center(1)&&i~=j)
E(q1)=floor(abs(Group1(j)-ClomStatic(i)));
q1=q1+1;
end
end
end
NewCenter(1)=min(E); E=zeros(1,len2-1);
q2=1;
for j=1:len2
for i=1:len
if(Group2(j)~=Center(2)&&i~=j)
E(q2)=floor(abs(Group2(j)-ClomStatic(i)));
q2=q2+1;
end
end
end
NewCenter(2)=min(E); E=zeros(1,len3-1);
q3=1;
for j=1:len3
for i=1:len
if(Group3(j)~=Center(3)&&i~=j)
E(q3)=floor(abs(Group3(j)-ClomStatic(i)));
q3=q3+1;
end
end
end
NewCenter(3)=min(E); %判断新的类和旧类的聚类中心是否不同,不同则继续聚类,否则聚类结束
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-mediod(PAM)原理及实现的更多相关文章

  1. 第十三篇:K-Means 聚类算法原理分析与代码实现

    前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...

  2. 数据挖掘之聚类算法K-Means总结

    序 由于项目需要,需要对数据进行处理,故而又要滚回来看看paper,做点小功课,这篇文章只是简单的总结一下基础的Kmeans算法思想以及实现: 正文: 1.基础Kmeans算法. Kmeans算法的属 ...

  3. 聚类算法:K均值、凝聚层次聚类和DBSCAN

    聚类分析就仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组(簇).其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的.组内相似性越大,组间差别越大,聚类就越好. 先介绍下聚类的不 ...

  4. 常见聚类算法——K均值、凝聚层次聚类和DBSCAN比较

    聚类分析就仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组(簇).其目标是,组内的对象相互之间是相似的,而不同组中的对象是不同的.组内相似性越大,组间差别越大,聚类就越好. 先介绍下聚类的不 ...

  5. ML: 聚类算法-K均值聚类

    基于划分方法聚类算法R包: K-均值聚类(K-means)                   stats::kmeans().fpc::kmeansruns() K-中心点聚类(K-Medoids) ...

  6. 【机器学习】聚类算法——K均值算法(k-means)

    一.聚类 1.基于划分的聚类:k-means.k-medoids(每个类别找一个样本来代表).Clarans 2.基于层次的聚类:(1)自底向上的凝聚方法,比如Agnes (2)自上而下的分裂方法,比 ...

  7. 数据挖掘之聚类算法Apriori总结

    项目中有时候需要用到对数据进行关联分析,比如分析一个小商店中顾客购买习惯. package com.data.algorithm; import com.google.common.base.Spli ...

  8. 数据挖掘十大算法--K-均值聚类算法

    一.相异度计算  在正式讨论聚类前,我们要先弄清楚一个问题:怎样定量计算两个可比較元素间的相异度.用通俗的话说.相异度就是两个东西区别有多大.比如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能 ...

  9. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

随机推荐

  1. Linux —— Shell编程之变量赋值和引用

    Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...

  2. cmd用到的基本操作

    dir #显示当前目录中的文件和子目录 dir /a #显示当前目录中的文件和子目录,包括隐藏文件和系统文件 a = all dir c: /a:d #显示 C 盘当前目录中的目录 d = direc ...

  3. 键盘code码速查表

    键盘 Key Code对照表 字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C ...

  4. 【Oracle】删除重复记录

    --复习autotrace: SET AUTOTRACE OFF --不生成AUTOTRACE 报告,这是缺省模式 SET AUTOTRACE ON EXPLAIN --AUTOTRACE只显示优化器 ...

  5. 【中途相遇+二进制】【NEERC 2003】Jurassic Remains

    例题25  侏罗纪(Jurassic Remains, NEERC 2003, LA 2965) 给定n个大写字母组成的字符串.选择尽量多的串,使得每个大写字母都能出现偶数次. [输入格式] 输入包含 ...

  6. windows笔记

    三星(SAMSUNG)905S3G-K07 安装Windows 7 过程分享 http://www.cnblogs.com/scue/p/4100743.html 打开方式没有excel http:/ ...

  7. linux学习笔记之线程

    线程同步机制:http://www.cnblogs.com/zheng39562/p/4270019.html 一.基础知识 1:基础知识. 1,线程需要的信息有:线程ID,寄存器,栈,调度优先级和策 ...

  8. Servlet基础之一:Servlet基本接口与类

    1.概述 Servlet API中共有5个包,约113个接口和类: javax.servlet javax.servlet.http javax.servlet.jsp javax.servlet.a ...

  9. 使用jquery插件uploadify上传文件的方法与疑问

    我是学生一枚,专业也不是计算机,但又要用到很多相关技术,所以在技术基础不牢靠的情况下,硬着头皮在做.最近在做一个小项目需要上传图片,而且是需要用ajax的方式.但是利用jquery的ajax方法总会有 ...

  10. Spring的注解学习(ioc,aop结合)

    首先引入jar包 aspectjrt.jar aspectjweaver.jar 1.dao package com.dao; public interface OkpDao { public voi ...