2021-10-13

最大最小距离算法实验预习:


最大最小距离算法实验预习报告

实验目的:
1、了解最大最小距离算法的基本原理,
2、实验室上机编程实现最大最小距离算法内容并对运行结果进行分析

最大最小距离算法基本原理:

对待分类模式样本集采取以最大距离原则选取新的聚类中心,以最小距离原则进行模式归类。

最大最小距离算法步骤:

1.从N NN个样本集中的任选取一个样本,作为第一个聚类中心z1 ​;
2.选取距离第一个聚类中心z 1最远的样本作为第二个聚类中心z 2;
3.计算其余样本与z 1 、 z 2 之间的距离,并求出它们中的最小值,即:计算公式
4.若:(θ 为 选 定 的 比 例 系 数 )
计算公式
则相应的样本xl
作为第三个聚类中心z3,转至下一步继续判断是否存在新的聚类中心,否则转至第六步;
5.假设存在k kk个聚类中心,计算各样本到各个聚类中心的距离d (i j)并算出:
计算公式
若成立,则Zk+1 = xl,并循环此步骤,继续判断是否有新的聚类中心存在,否则转至第六步;
6.当判断不再有新的聚类中心存在时,将样本集按最小距离原则分到各类中去,即计算:计算公式

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;%1if(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  

算法参考:https://blog.csdn.net/liuzhuomei0911/article/details/53691834
图片参考:
https://blog.csdn.net/liuzhuomei0911/article/details/53691834
代码参考:http://blog.csdn.net/guyuealian/article/details/53708042


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值