继上两篇文章介绍聚类中基于划分思想的k-means算法和k-mediod算法

本文将继续介绍另外一种基于划分思想的k-mediod算法-----clara算法

clara算法可以说是对k-mediod算法的一种改进,就如同k-mediod算法对k-means算法的改进一样.

clara(clustering large application)算法是应用于大规模数据的聚类.而其核心算法还是利用k-mediod算法.

只是这种算法弥补了k-mediod算法只能应用于小规模数据的缺陷.

clara算法的核心是,先对大规模数据进行多次采样,每次采样样本进行med-diod聚类,然后将多次

采样的样本聚类中心进行比较,选出最优的聚类中心.当然clara算法也有一定的缺陷,因为它依赖于

抽样次数,每次样本数据是否均匀分布,以及抽样样本的大小.尽管这样,clara算法还是为我们提供了

一种进行大规模数据聚类的方法.

clara算法的具体描述如下:

1.对大规模数据进行多次采样得到采样样本

2.对每次采样的样本进行k-mediod聚类,得到多组聚类中心

3.求出每组聚类中心到其他所有点距离和.

4.找出这几组距离和的最小值.距离和最小的那组就是最优的聚类中心.

5.然后将大规模数据按照距离聚类到这组最优聚类中心

matlab仿真代码如下:

 clc;
clear; load Data3.mat; k=3; %给定的类别数目 time=5;%time为抽样的次数
number=30;%number为抽样本个数
for T=1:time
ClomStaticSample=zeros(1,number);
ClomStaticSample=randsample(ClomStatic,number); %ClomStaticSample就是样本数据
%接下来对样本数据使用kmediod算法进行聚类 %产生三个随机整数,随机聚类中心
p=randperm(number);
Temp=p(1:k);
Center=zeros(1,k);
for j=1:k
Center(j)=ClomStaticSample(Temp(j));
end
[ClomStaticSample]=sort(ClomStaticSample); TempDistance=zeros(number,3); %暂存差值 while 1
Circulm=1; %循环控制 p1=1;
p2=1;
p3=1; if(Circulm~=1)
clear Group1 Group2 Group3;
end
for i=1:number
for j=1:3
TempDistance(i,j)=abs(ClomStaticSample(i)-Center(j));
end
[RowMin RowIndex]=min(TempDistance(i,:));
if(RowIndex(1)==1)
Group1(p1)=ClomStaticSample(i);
p1=p1+1;
elseif(RowIndex(1)==2)
Group2(p2)=ClomStaticSample(i);
p2=p2+1;
elseif(RowIndex(1)==3)
Group3(p3)=ClomStaticSample(i);
p3=p3+1;
end
end len1=length(Group1);
len2=length(Group2);
len3=length(Group3); %分别计算每个类中除开类中心的点到其他所有点的距离和E,E最小时为该类新的聚类中心.
E=zeros(1,len1-1);
q1=1;
for j=1:len1
for i=1:number
if(Group1(j)~=Center(1)&&i~=j)
E(q1)=floor(abs(Group1(j)-ClomStaticSample(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:number
if(Group2(j)~=Center(2)&&i~=j)
E(q2)=floor(abs(Group2(j)-ClomStaticSample(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:number
if(Group3(j)~=Center(3)&&i~=j)
E(q3)=floor(abs(Group3(j)-ClomStaticSample(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
CenterSum5=zeros(time,k); %保存每次抽样后kmediod聚类中心的结果值.
CenterSum5(i,1)=Center(1);
CenterSum5(i,2)=Center(2);
CenterSum5(i,3)=Center(3);
end %计算每次聚类中心点到其他所有点的距离和的最小值即为最优聚类中心
Sum=zeros(1,time);
for i=1:time
for j=1:k
for r=1:number-1
if( CenterSum5(i,j)~=ClomStaticSample(r))
Sum(i)=Sum(i)+CenterSum5(i,j)-ClomStaticSample(r);
end
end
end
end [SumOrder CenterEnd]=sort(Sum);%最优聚类中心即为Center(CenterEnd); %对大数据进行最终的聚类(按照选择出来的最优聚类中心)
q1=1;
q2=1;
q3=1;
for i=1:length(ClomStatic)
for j=1:3
EndTempDistance(i,j)=abs(ClomStatic(i)-CenterSum5(CenterEnd,j));
end
[RowMin RowIndex]=min(EndTempDistance(i,:));
if(RowIndex(1)==1)
EndGroup1(q1)=ClomStatic(i);
q1=q1+1;
elseif(RowIndex(1)==2)
EndGroup2(q2)=ClomStatic(i);
q2=q2+1;
elseif(RowIndex(1)==3)
EndGroup3(q3)=ClomStatic(i);
q3=q3+1;
end
end

数据挖掘之clara算法原理及实例(代码中有bug)的更多相关文章

  1. Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

  2. 第一篇:K-近邻分类算法原理分析与代码实现

    前言 本文介绍机器学习分类算法中的K-近邻算法并给出伪代码与Python代码实现. 算法原理 首先获取训练集中与目标对象距离最近的k个对象,然后再获取这k个对象的分类标签,求出其中出现频数最大的标签. ...

  3. 最短路径A*算法原理及java代码实现(看不懂是我的失败)

    算法仅仅要懂原理了,代码都是小问题,先看以下理论,尤其是红色标注的(要源代码请留下邮箱,有測试用例,直接执行就可以) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路 ...

  4. 一致性Hash算法原理及C#代码实现

    一.一致性Hash算法原理 基本概念 一致性哈希将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间为0-2^32-1(即哈希值是一个32位无符号整形),整个哈希空间环如下: 整个空间按顺 ...

  5. 第七篇:Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

  6. Apriori 关联分析算法原理分析与代码实现

    前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文 ...

  7. 第十四篇:Apriori 关联分析算法原理分析与代码实现

    前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文 ...

  8. 常见排序算法原理及JS代码实现

    目录 数组 sort() 方法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序 创建时间:2020-08-07 本文只是将作者学习的过程以及算法理解进行简单的分享,提供多一个角度的 ...

  9. KNN算法原理(python代码实现)

    kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...

随机推荐

  1. 《Java web 开发实战经典》读书笔记

    去年年末,也就是大四上学期快要结束的时候,当时保研的事情确定了下来,终于有了一些空闲的时间可以学点实用的技术. 之前做数据库课程设计的时候,也接触过java web的知识,当时做了一个卖二手书籍的网站 ...

  2. Kindeditor+web.py+SAE Storage 实现文件上传 - 开源中国社区

    Kindeditor+web.py+SAE Storage 实现文件上传 - 开源中国社区 Kindeditor+web.py+SAE Storage 实现文件上传

  3. PHP安装和配置

    编译安装php5-5.2.6-49.11.src.rpm: ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin ...

  4. Js apply 方法 具体解释

    Js apply方法具体解释 我在一開始看到javascript的函数apply和call时,很的模糊,看也看不懂,近期在网上看到一些文章对apply方法和call的一些演示样例,总算是看的有点眉目了 ...

  5. PreferenceFragment 使用 小结

    Perference也就是我们常说的偏好设置,首选项设置,能够自己主动保存一些数据,比如我们在上一次使用的时候的一些内容,则在下一次启动后依旧生效,而不须要再进行配置.当用户改变设置时,系统就会更新S ...

  6. 字符串最小表示法 O(n)算法

    网上看了这篇文章后还是感觉有些地方讲的没有详细的证明所以添加了一点 红色字是博主写的 求字符串的循环最小表示: 上面说的两个字符串同构的,并没有直接先求出Min(s),而是通过指针移动,当某次匹配串长 ...

  7. jquery中this与$this的区别

    来源:http://www.jb51.net/article/19738.htm jQuery中this与$(this)的区别 $("#textbox").hover( funct ...

  8. Godaddy主机从购买到开通的详细图文教程(2013年)

    http://bbs.zhujiusa.com/thread-10-1-1.html Godaddy主机从购买到开通的详细图文教程(2013年最新) Godaddy是全球域名注册商中的NO.1,同时也 ...

  9. 使用SQLCipher加密数据库

      Xcode中集成了免费的sqlite,但是不提供加密的模块,突然有一天,蛋疼的客户要求把数据进行加密,于是乎就寻找使用简单并且可以把数据迁移过度到加密数据库的框架. SQLCipher是第三方的开 ...

  10. Sql Server获得每个表的行数

    SELECT o.[name], ddps.[row_count] FROM sys.indexes AS i INNER JOIN sys.objects AS o ON i.[object_id] ...