数据挖掘之clara算法原理及实例(代码中有bug)

继上两篇文章介绍聚类中基于划分思想的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

转载请注明文章作者:小刘

时间: 2024-08-27 12:49:54

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

朴素贝叶斯分类算法原理分析与代码实现

前言 本文介绍机器学习分类算法中的朴素贝叶斯分类算法并给出伪代码,Python代码实现. 词向量 朴素贝叶斯分类算法常常用于文档的分类,而且实践证明效果是挺不错的. 在说明原理之前,先介绍一个叫词向量的概念. --- 它一般是一个布尔类型的集合,该集合中每个元素都表示其对应的单词是否在文档中出现. 对应关系和词汇表一一对应. 比如说,词汇表只有三个单词:'apple', 'orange', 'melo',某文档中,apple和melo出现过,那么其对应的词向量就是 {1, 0, 1}. 这种模型

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

算法只要懂原理了,代码都是小问题,先看下面理论,尤其是红色标注的(要源码请留下邮箱,有测试用例,直接运行即可) A*算法 百度上的解释: A*[1](A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法. 公式表示为: f(n)=g(n)+h(n), 其中 f(n) 是从初始点经由节点n到目标点的估价函数, g(n) 是在状态空间中从初始节点到n节点的实际代价, h(n) 是从n到目标节点最佳路径的估计代价. 保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取: 估价值

第五篇:朴素贝叶斯分类算法原理分析与代码实现

前言 本文介绍机器学习分类算法中的朴素贝叶斯分类算法并给出伪代码,Python代码实现. 词向量 朴素贝叶斯分类算法常常用于文档的分类,而且实践证明效果挺不错的. 在说明原理之前,先介绍一个叫词向量的概念. --- 它一般是一个布尔类型的集合,该集合中每个元素都表示其对应的单词是否在文档中出现. 比如说,词汇表只有三个单词:'apple', 'orange', 'melo',某文档中,apple和melo出现过,那么其对应的词向量就是 {1, 0, 1}. 这种模型通常称为词集模型,如果词向量元

常见经典排序算法学习总结,附算法原理及实现代码(插入、shell、冒泡、选择、归并、快排等)

博主在学习过程中深感基础的重要,经典排序算法是数据结构与算法学习过程中重要的一环,这里对笔试面试最常涉及到的7种排序算法(包括插入排序.希尔排序.选择排序.冒泡排序.快速排序.堆排序.归并排序)进行了详解.每一种算法都有基本介绍.算法原理分析.算法代码. 转载请注明出处:http://blog.csdn.net/lsh_2013/article/details/47280135 插入排序 1)算法简介 插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法.它的工作原理是通过

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

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

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

前言 想必大家都听过数据挖掘领域那个经典的故事 - "啤酒与尿布" 的故事. 那么,具体是怎么从海量销售信息中挖掘出啤酒和尿布之间的关系呢? 这就是关联分析所要完成的任务了. 本文将讲解关联分析领域中最为经典的Apriori算法,并给出具体的代码实现. 关联分析领域的一些概念 1. 频繁项集: 数据集中经常出现在一起的物品的集合.例如 "啤酒和尿布" 2. 关联规则: 指两个物品集之间可能存在很强的关系.例如 "{啤酒} -> {尿布}"

MySQL索引背后的数据结构及算法原理(employees实例)

摘要 http://blog.codinglabs.org/articles/theory-of-mysql-index.html 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等.为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论. 文章主要内

K-Means 聚类算法原理分析与代码实现

前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经典的聚类问题展开讨论.所谓聚类,就是事先并不知道具体分类方案的分类 (允许知道分类个数). 本文将介绍一个最为经典的聚类算法 - K-Means 聚类算法以及它的两种实现. 现实中的聚类分析问题 - 总统大选 假设 M 国又开始全民选举总统了,目前 Mr.OBM 的投票率为48%(投票数占所有选民人数的百分比

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者