实验一 最大最小距离法

实验一 最大最小距离法

一.实验目的

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

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

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

0

在这里插入图片描述
在这里插入图片描述

三.实验内容

见右图所示,为二维点集。
在这里插入图片描述

四.实验步骤

1、提取分类特征,确定特征值值域,确定特征空间;
2、编写聚类程序;
3、将所提取的样本的加以聚类;
4、用误差平方和准则(也可选用其他准则)加以评价,直到满意为止。

五. 实验代码

c++实现:

#include <iostream>
#include <math.h>
using namespace std;
const int N=10;
int main()
{ int center[20];
  float s[2][N]={{0,3,2,1,5,4,6,5,6,7},
                 {0,8,2,1,3,8,3,4,4,5}};
  float D[20][N];
  float min[N];
  int minindex[N];
  int clas[N];
  float theshold;
  float theta=0.5;
  float D12=0.0;
  float tmp=0;
  int index=0;
  center[0]=0;//first center
  int i,k=0,j,l;
  for(j=0;j<N;j++)
  { tmp=(s[0][j]-s[0][0])*(s[0][j]-s[0][0])+(s[1][j]-s[1][0])*(s[1][j]-s[1][0]);
	D[0][j]=(float)sqrt(tmp);
    if(D[0][j]>D12) {D12=D[0][j];index=j;}
  }
  center[1]=index;//second center
  k=1;
  index=0;
  theshold=D12;
  while(theshold>theta*D12){
	   for(j=0;j<N;j++){
	       tmp=(s[0][j]-s[0][center[k]])*(s[0][j]-s[0][center[k]])+
		          (s[1][j]-s[1][center[k]])*(s[1][j]-s[1][center[k]]);
           D[k][j]=(float)sqrt(tmp);}
	   for(j=0;j<N;j++){
		   float tmp=D12;
           for(l=0;l<=k;l++)
			   if (D[l][j]<tmp) {tmp=D[l][j];index=l;};
           min[j]=tmp;minindex[j]=index;
		  }//min-operate
	   float max=0;index=0;
       for(j=0;j<N;j++)
         if(min[j]>max) {max=min[j];index=j;}
	   if (max>theta*D12){k++;center[k]=index;}// add a center
	   theshold=max;// prepare to loop next time
	 }  //求出所有中心,final array min[] is still useful
   for(j=0;j<N;j++)  clas[j]=minindex[j];
   for(i=0;i<2;i++)
   {for(j=0;j<N;j++)
       cout<<s[i][j]<<"  ";
    cout<<"\n";
   }
   cout<<"k="<<k+1<<" ";
   cout<<"center(s):";
   for(l=0;l<k;l++) cout<<center[l]+1<<"--";cout<<center[k]+1;
   cout<<"\n";
   for(j=0;j<N;j++)
	   cout<<clas[j]+1<<"  ";
   cout<<"\n";
}
六.运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值