1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 最大最小距离聚类算法c语言 聚类算法-最大最小距离算法(实例+代码)

最大最小距离聚类算法c语言 聚类算法-最大最小距离算法(实例+代码)

时间:2022-10-01 19:58:46

相关推荐

最大最小距离聚类算法c语言 聚类算法-最大最小距离算法(实例+代码)

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

%函数名称 MaxMinDisFun(x,Theta)

%输入参数:

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

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

%输出参数:

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

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

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

function [pattern]=MaxMinDisFun(x,Theta)

maxDistance=0;

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

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

center=zeros(size(x)); %保存中心点

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

%distance=zeros(patternNum,3);%distance每列表示所有样本到每个聚类中心的距离

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

pattern=(patternNum);%表示类别

center(1,:)=x(1,:);%第一个聚类中心

pattern(1)=1;

for i=2:patternNum

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

minDistance(i,1)=distance(i,1);

pattern(i)=1;%第一类

if(maxDistance

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

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

end

end

k=k+1;

center(k,:)=x(index,:);%把与第一个聚类中心距离最大的样本作为第二 个聚类中心

pattern(index)=2;%第二类

minDistance(index,1)=0;

while 1

for i=2:patternNum

if(minDistance(i,1)~=0)

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

if(minDistance(i,1)>distance(i,k))

minDistance(i,1)=distance(i,k);

pattern(i)=k;

end

end

end

max=0;

for i=2:patternNum

if((max

max=minDistance(i,1);

index=i;

end

end

if(max>(maxDistance*Theta))

k=k+1;

center(k,:)=x(index,:);

pattern(index)=k;

minDistance(index,1)=0;

else

break;

end

end

2.实例C++代码:

这是网友的C++代码,可以参考一下,好像有点问题,自己看着办哈~娃哈哈哈哈……

#include

#include

const int N=10;

void main(void)

{ 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

{ 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

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

float tmp=D12;

for(l=0;l<=k;l++)

if (D[l][j]

min[j]=tmp;minindex[j]=index;

}//min-operate

float max=0;index=0;

for(j=0;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

for(i=0;i<2;i++)

{for(j=0;j

cout<

cout<

}

cout<

cout<

for(l=0;l

cout<

for(j=0;j

cout<

cout<

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。