最近学校新开的一门课——《模式识别》。

课本对算法介绍的截图:

        0f2721bf08f489e5f662edbedca75bb1.pnge29e3b48466f4e919493ad165ac06f5c.jpgeaed2d070d448d5e35404fdaceb98acd.png22c1b93a930a7335dc004ea7c334d978.png

1、看完课本提出的几个问题并做解答:

(1)θ是干嘛用的?

θ * D12来确定每个类的范围,也就是做为循环的一个结束条件。

(2)聚类中心有什么筛选条件?

这个算法里的聚类中心就是相距最远的那几个点。

(3)怎么去确定有几类?

相当于分裂,只要比定的阈值大,那么这一圈就可以分裂。

2、代码:

#include #include using namespace std;

const int N=10;//给定N个样本

int maxmindistance(float sample[][N],float theta)

{

int center[20];//保存聚类中心

float D[20][N];//保存D点与点之间的距离

float min[N];

int minindex[N];

int clas[N];

float theshold;

float D12=0.0;//第一个聚类和第二个聚类中的距离

float tmp=0;

int index=0;

center[0]=0;//first center第一个聚类选出来了

int i,k=0,j,l;

for(j=0;jD12)

{

D12=D[0][j];

index=j;

}

}

center[1]=index;//second center第二个聚类选出来了

k=1;

index=0;

theshold=D12;

while(theshold>theta*D12)

{

for(j=0;jmax)

{

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

#include"maxmindistance.h"

int main()

{

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 theta;

cin>>theta;

maxmindistance(s,theta);

}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐