模式识别实验预习报告



      专业:计算机科学与技术

      课程:模式识别

      学号:152210708417

      姓名:李纯涛

      

                 预习内容

实验一  最大最小距离法

一.实验目的

本实验的目的是使学生了解最大最小距离法聚类方法,掌握最大最小距离聚类分析法的基本原理,培养学生实际动手和思考能力,为数据分析和处理打下牢固基础。

二.最大最小距离聚类算法

该算法以欧氏距离为基础,首先辨识最远的聚类中心,然后确定其他的聚类中心,直到无新的聚类中心产生。最后将样本按最小距离原则归入最近的类。

例:样本分布如图所示。

样本

第一分量

0

3

2

1

5

4

6

5

6

7

第二分量

0

8

2

1

3

8

3

4

4

5

的距离

0

的距离

0

0

0

最大最小距离聚类算法步骤如下:

 给定,并且任取一个样本作为第一个聚合中心,

 寻找新的集合中心:

计算其它所有样本到的距离

,则取为第二个聚合中心

计算所有样本到的距离

,并且间距离,则取为第三个集合中心。【注意:

如果存在,则计算,若,则建立第四个聚合中心。依次类推,直到最大最小距离不大于时,结束寻找聚合中心的计算。

注意所在第列,中为最大的,而且,一般取。所以,

这里的例中只有三个集合中心,

 按最近邻原则把所有样本归属于距离最近的聚合中心,得: 

 按照某聚类准则考查聚类结果,若不满意,则重选,第一个聚合中心,返回到,直到满意,算法结束。

该算法的聚类结果与参数和起始点的选取关系重大。若无先验样本分布知识,则只有用试探法通过多次试探优化,若有先验知识用于指导选取,则算法可很快收敛

三.实验内容

见右图所示,为二维点集。

四.实验步骤

1、提取分类特征,确定特征值值域,确定特征空间;

2、编写聚类程序;

3、将所提取的样本的加以聚类;

4、用误差平方和准则(也可选用其他准则)加以评价,直到满意为止。

五.实验代码参考(Matlab版本)

clear all

clc

x=[0,0; 3,8; 2,2;1,1; 5,3; 4,8; 6,3; 5,4;  6,4;  7,5]

Theta=0.5;

[pattern,centerIndex]=MaxMinDisFun(x,0.5)

%%%%%%%%%%%%%%%%%

%函数名称 MaxMinDisFun(x,Theta)

%输入参数:

%           x  : x为n*m的特征样本矩阵,每行为一个样本,每列为样本的特征

%         Theta:即θ,可用试探法取一固定分数,如:1/2

%输出参数:

%       pattern:输出聚类分析后的样本类别

%   centerIndex:聚类中心点

%函数功能 :利用最大最小距离算法聚类样本数据,

%%%%%%%%%%%%%%%%%%%%%

function [classes,centerIndex]=MaxMinDisFun(x,Theta)

maxDistance=0;

start=1;    %初始选一个中心点

index=start;%相当于指针指示新中心点的位置

k=1;        %中心点计数,也即是类别

dataNum=size(x,1);  %输入的样本数

centerIndex=zeros(dataNum,1); %保存中心点

distance=zeros(dataNum,1);    %表示所有样本到当前聚类中心的距离

minDistance=zeros(dataNum,1); %取较小距离

classes=zeros(dataNum,1);     %表示类别

centerIndex(1)=index;%保存第一个聚类中心

classes(:)=k;        %初始类别全为k

%%

for i=1:dataNum

    distance(i)=sqrt((x(i,:)-x(centerIndex(1),:))*(x(i,:)-x(centerIndex(1),:))');%欧氏距离,与第1个聚类中心的距离

    classes(i)=k;%第1类

    if(maxDistance<distance(i))

        maxDistance=distance(i);%与第一个聚类中心的最大距离

        index=i;%与第一个聚类中心距离最大的样本

    end

end

%%

minDistance=distance;

% minDistance(index,1)=0;

maxVal=maxDistance;

while(maxVal>(maxDistance*Theta))%判断新的聚类中心是否满足条件

    k=k+1;

    centerIndex(k)=index;%判断新的聚类中心是否满足条件,若满足则新增聚类中心

    for i=1:dataNum

            distance(i)=sqrt((x(i,:)-x(centerIndex(k),:))*(x(i,:)-x(centerIndex(k),:))');%与第k个聚类中心的距离

           if(minDistance(i)>distance(i))

               minDistance(i)=distance(i);

               classes(i)=k;%按照当前最近临方式分类,哪个近就分哪个类别

           end

    end

    %查找minDistance中最大值

    maxVal=0;

    for i=1:dataNum

        if((maxVal<minDistance(i)))

            maxVal=minDistance(i);

            index=i;

        end

    end

%     centerIndex(k+1)=index;%新的聚类中心

    aaa=0;

end

end  

运行结果:

x =

     0     0

     3     8

     2     2

     1     1

     5     3

     4     8

     6     3

     5     4

     6     4

     7     5

pattern =

     1

     2

     1

     1

     3

     2

     3

     3

     3

     3

centerIndex =

     1

     6

     7

     0

     0

     0

     0

     0

     0

     0

     

     

     

    

      

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值