上一篇博文中介绍了聚类算法中的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实现代码如下:

  1. clc;
  2. clear;
  3.  
  4. ClomStatic=[1,2,3,25,26,27,53,54,55];
  5. len=length(ClomStatic);%求向量ClomStatic的长度
  6.  
  7. k=3; %给定的类别数目
  8.  
  9. %产生三个随机整数,随机聚类中心
  10. p=randperm(len);
  11. Temp=p(1:k);
  12. Center=zeros(1,k);
  13. for i=1:k
  14. Center(i)=ClomStatic(Temp(i));
  15. end
  16.  
  17. %计算除聚类中心外的样本数据到聚类中心的距离,然后进行聚类
  18. TempDistance=zeros(len,3);
  19. while 1
  20.  
  21. Circulm=1;
  22.  
  23. p1=1;
  24. p2=1;
  25. p3=1;
  26.  
  27. JudgeEqual=zeros(1,k);
  28. if(Circulm~=1)
  29. clear Group1 Group2 Group3;
  30. end
  31. for i=1:len
  32. for j=1:3
  33. TempDistance(i,j)=abs(ClomStatic(i)-Center(j));
  34. end
  35. [RowMin RowIndex]=min(TempDistance(i,:));
  36. if(RowIndex==1)
  37. Group1(p1)=ClomStatic(i);
  38. p1=p1+1;
  39. elseif(RowIndex==2)
  40. Group2(p2)=ClomStatic(i);
  41. p2=p2+1;
  42. elseif(RowIndex==3)
  43. Group3(p3)=ClomStatic(i);
  44. p3=p3+1;
  45. end
  46. end
  47.  
  48. len1=length(Group1);
  49. len2=length(Group2);
  50. len3=length(Group3);
  51.  
  52. %计算Group1,Group2,Group3的均值
  53. MeanGroup1=mean(Group1);
  54. MeanGroup2=mean(Group2);
  55. MeanGroup3=mean(Group3);
  56.  
  57. %分别计算每个类中除开类中心的点到其他所有点的距离和E,E最小时为该类新的聚类中心.
  58. E=zeros(1,len1-1);
  59. q1=1;
  60. for j=1:len1
  61. for i=1:len
  62. if(Group1(j)~=Center(1)&&i~=j)
  63. E(q1)=floor(abs(Group1(j)-ClomStatic(i)));
  64. q1=q1+1;
  65. end
  66. end
  67. end
  68. NewCenter(1)=min(E);
  69.  
  70. E=zeros(1,len2-1);
  71. q2=1;
  72. for j=1:len2
  73. for i=1:len
  74. if(Group2(j)~=Center(2)&&i~=j)
  75. E(q2)=floor(abs(Group2(j)-ClomStatic(i)));
  76. q2=q2+1;
  77. end
  78. end
  79. end
  80. NewCenter(2)=min(E);
  81.  
  82. E=zeros(1,len3-1);
  83. q3=1;
  84. for j=1:len3
  85. for i=1:len
  86. if(Group3(j)~=Center(3)&&i~=j)
  87. E(q3)=floor(abs(Group3(j)-ClomStatic(i)));
  88. q3=q3+1;
  89. end
  90. end
  91. end
  92. NewCenter(3)=min(E);
  93.  
  94. %判断新的类和旧类的聚类中心是否不同,不同则继续聚类,否则聚类结束
  95. JudgeEqual=zeros(1,k);
  96. for i=1:k
  97. JudgeEqual=(NewCenter==Center);
  98. end
  99.  
  100. S=0;
  101. for i=1:k
  102. if(JudgeEqual(i)==1)
  103. S=S+1;
  104. end
  105. end
  106.  
  107. if(S==3)
  108. break;
  109. end
  110.  
  111. Circulm=Circulm+1;
  112. 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. 学习 ExtJS 4 面板与布局

    原文 http://www.cnblogs.com/codealone/archive/2013/06/04/3091325.html 面板Panel Ext.panel.Panel拓展自Ext.co ...

  2. mac安装GNU命令行工具

    mac安装GNU命令行工具 2.添加的repo     tap home/dupes        brew install coreutils  binutils  diffutils  ed -- ...

  3. plsql在64位机器下读取tnsname.ora 及oracle_home异常的解决办法

    问题是: 我在自己电脑(win7  64bit)上安装了oracle的64位数据库   通过sqlplus能正常连接 主要是安装pl/sql时   我是这样安装的1.在网上下载了个instantcli ...

  4. Amazon Redshift and Massively Parellel Processing

    Today, Yelp held a tech talk in Columbia University about the data warehouse adopted by Yelp. Yelp u ...

  5. Lake Counting (POJ No.2386)

    有一个大小为N*M的园子,雨后积起了水,八连通的积水被认为是链接在一起的求出园子里一共有多少水洼? *** *W* *** /** *进行深度优先搜索,从第一个W开始,将八个方向可以到达的 W修改为 ...

  6. 【HDU 2586 How far away?】LCA问题 Tarjan算法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586 题意:给出一棵n个节点的无根树,每条边有各自的权值.给出m个查询,对于每条查询返回节点u到v的最 ...

  7. Jekins安装

    1. Jekins支持多系统:windows, mac,linux 2. Jekins安装方式有三种:直接war文件安装,安装包安装,将war文件放到web容器安装 3. 在windows下安装 a. ...

  8. 【转】android 物理按键

    关键词:android   按键  矩阵按键 AD按键  平台信息: 内核:linux2.6/linux3.0 系统:android/android4.0 平台:S5PV310(samsung exy ...

  9. openssl 生成CSR

    openssl 生成CSR 2013-12-27 15:05 3699人阅读 评论(1) 收藏 举报  分类: Security(38)  C/C++(105)  版权声明:本文为博主原创文章,未经博 ...

  10. JS~delegate与live

    在jquery里有两个方法可以用来绑定自动追加出来的DOM对象,它们是live和delegate,事实上,这两个方法是bind方法的一个变体,在对于固定DOM对象时,我们通常使用bind就可以了,而对 ...