当前位置:文档之家› 模式识别分类代码!

模式识别分类代码!

#include
#include
#include
#include
/**********************************宏定义**********************************/
#define datatype double
#define S 5 //随机分组组数 S and RE and '!' position need to change together ,eg:'!'=M/S,RE=M-'!'
#define M 150 //总样本个数 M must be the same with R
#define K 5 //K-np K近邻
#define R 150 //Row 行数
#define C 5 //Cline 列数,特征维数加一位类型
#define RE 120 // 参照样本个数 RE=M-M/S
/*********************************函数声明*****************************/
int* random(int ,int );
int Judge(datatype*,datatype);
datatype* K_np(datatype**);
datatype* Insersort(datatype*,int );
datatype Dis(datatype**,int ,int);
/********************************主程序*******************************/
void main()
{
int i,j;
int*a;
datatype t=0;
datatype**A;
datatype *ar; //每一组的正确率
//样本数据,150行,5列
datatype num[R][C]={{7.0,3.2,4.7,1.4,0},{6.4,3.2,4.5,1.5,0},{6.9,3.1,4.9,1.5,0},{5.5,2.3,4.0,1.3,0},{6.5,2.8,4.6,1.5, 0},{5.7,2.8,4.5,1.3,0},{6.3,3.3,4.7,1.6,0}, {4.9,2.4,3.3,1.0, 0}, {6.6,2.9,4.6,1.3, 0},{5.2,2.7,3.9,1.4,0},{5.0,2.0,3.5,1.0,0},{5.9,3.0,4.2,1.5,0},{6.0,2.2,4.0,1.0,0},{6.1,2.9,4.7,1.4,0},{5.6,2.9,3.6,1.3,0},{6.7,3.1,4.4,1.4,0},{5.6,3.0,4.5,1.5,0},{5.8,2.7,4.1,1.0,0},{6.2,2.2,4.5,1.5,0},{5.6,2.5,3.9,1.1,0},{5.9,3.2,4.8,1.8,0},{6.1,2.8,4.0,1.3,0},{6.3,2.5,4.9,1.5,0},{6.1,2.8,4.7,1.2,0},{6.4,2.9,4.3,1.3,0},{6.6,3.0,4.4,1.4,0},{6.8,2.8,4.8,1.4,0},{6.7,3.0,5.0,1.7,0},{6.0,2.9,4.5,1.5,0},{5.7,2.6,3.5,1.0,0},{5.5,2.4,3.8,1.1,0},{5.5,2.4,3.7,1.0, 0},{5.8,2.7,3.9,1.2, 0},{6.0,2.7,5.1,1.6, 0},{5.4,3.0,4.5,1.5, 0},{6.0,3.4,4.5,1.6, 0},{6.7,3.1,4.7,1.5, 0},{6.3,2.3,4.4,1.3, 0},{5.6,3.0,4.1,1.3, 0},{5.5,2.5,4.0,1.3, 0},{5.5,2.6,4.4,1.2, 0},{6.1,3.0,4.6,1.4, 0},{5.8,2.6,4.0,1.2, 0},{5.0,2.3,3.3,1.0, 0},{5.6,2.7,4.2,1.3, 0},{5.7,3.0,4.2,1.2, 0},{5.7,2.9,4.2,1.3, 0},{6.2,2.9,4.3,1.3, 0},{5.1,2.5,3.0,1.1, 0},{5.7,2.8,4.1,1.3, 0},{5.1,3.5,1.4,0.2,1},{4.9,3.0,1.4,0.2,1},{4.7,3.2,1.3,0.2,1},{4.6,3.1,1.5,0.2,1},{5.0,3.6,1.4,0.2, 1},{5.4,3.9,1.7,0.4, 1},{4.6,3.4,1.4,0.3, 1},{5.0,3.4,1.5,0.2, 1},{4.4,2.9,1.4,0.2, 1},{4.9,3.1,1.5,0.1, 1},{5.4,3.7,1.5,0.2, 1},{4.8,3.4,1.6,0.2, 1},{4.8,3.0,1.4,0.1, 1},{4.3,3.0,1.1,0.1, 1},{5.8,4.0,1.2,0.2, 1},{5.7,4.4,1.5,0.4, 1},{5.4,3.9,1.3,0.4, 1},{5.1,3.5,1.4,0.3, 1},{5.7,3.8,1.7,0.3, 1},{5.1,3.8,1.5,0.3, 1},{5.4,3.4,1.7,0.2, 1},{5.1,3.7,1.5,0.4, 1},{4.6,3.6,1.0,0.2, 1},{5.1,3.3,1.7,0.5, 1},{4.8,3.4,1.9,0.2, 1},{5.0,3.0,1.6,0.2, 1},{5.0,3.4,1.6,0.4, 1},{5.2,3.5,1.5,0.2, 1},{5.2,3.4,1.4,0.2, 1},{4.7,3.2,1.6,0.2, 1},{4.8,3.1,1.6,0.2, 1},{5.4,3.4,1.5,0.4, 1},{5.2,4.1,1.5,0.1, 1},{5.5,4.2,1.4,0.2, 1},{4.9,3.1,1.5,0.1, 1},{5.0,3.2,1.2,0.2, 1},{5.5,3.5,1.3,0.2, 1},{4.9,3.1,1.5,0.1, 1},{4.4,3.0,1.3,0.2, 1},{5.1,3.4,1.5,0.2, 1},{5.0,3.5,1.3,0.3, 1},{4.5,2.3,1.3,0.3, 1},{4.4,3.2

,1.3,0.2, 1},{5.0,3.5,1.6,0.6, 1},{5.1,3.8,1.9,0.4, 1},{4.8,3.0,1.4,0.3, 1},{5.1,3.8,1.6,0.2, 1},{4.6,3.2,1.4,0.2, 1},{5.3,3.7,1.5,0.2, 1},{5.0,3.3,1.4,0.2, 1},{6.3,3.3,6.0,2.5,2},{5.8,2.7,5.1,1.9,2},{7.1,3.0,5.9,2.1,2},{6.3,2.9,5.6,1.8,2},{6.5,3.0,5.8,2.2, 2},{7.6,3.0,6.6,2.1, 2},{4.9,2.5,4.5,1.7, 2},{7.3,2.9,6.3,1.8, 2},{6.7,2.5,5.8,1.8, 2},{7.2,3.6,6.1,2.5, 2},{6.5,3.2,5.1,2.0,2},{6.4,2.7,5.3,1.9, 2}, {6.8,3.0,5.5,2.1, 2}, {5.7,2.5,5.0,2.0, 2},{5.8,2.8,5.1,2.4, 2},{6.4,3.2,5.3,2.3, 2},{6.5,3.0,5.5,1.8, 2},{7.7,3.8,6.7,2.2, 2},{7.7,2.6,6.9,2.3, 2},{6.0,2.2,5.0,1.5, 2},{6.9,3.2,5.7,2.3, 2},{5.6,2.8,4.9,2.0, 2},{7.7,2.8,6.7,2.0, 2},{6.3,2.7,4.9,1.8, 2},{6.7,3.3,5.7,2.1, 2},{7.2,3.2,6.0,1.8, 2},{6.2,2.8,4.8,1.8, 2},{6.1,3.0,4.9,1.8, 2},{6.4,2.8,5.6,2.1, 2},{7.2,3.0,5.8,1.6, 2},{7.4,2.8,6.1,1.9, 2},{7.9,3.8,6.4,2.0, 2},{6.4,2.8,5.6,2.2, 2},{6.3,2.8,5.1,1.5, 2},{6.1,2.6,5.6,1.4, 2},{7.7,3.0,6.1,2.3, 2},{6.3,3.4,5.6,2.4, 2},{6.4,3.1,5.5,1.8, 2},{6.0,3.0,4.8,1.8, 2},{6.9,3.1,5.4,2.1, 2},{6.7,3.1,5.6,2.4, 2},{6.9,3.1,5.1,2.3, 2},{5.8,2.7,5.1,1.9, 2},{6.8,3.2,5.9,2.3, 2},{6.7,3.3,5.7,2.5, 2},{6.7,3.0,5.2,2.3, 2},{6.3,2.5,5.0,1.9, 2},{6.5,3.0,5.2,2.0, 2},{6.2,3.4,5.4,2.3, 2},{5.9,3.0,5.1,1.8, 2}};
A=(datatype **)malloc(R*sizeof(datatype*));
for(i=0;i{
A[i]=(datatype *)malloc(C*sizeof(datatype));
}
a=random(0,M-1); //生成0到149不重复的整型数组a
for(i=0;ifor(j=0;j{
A[i][j]=num[a[i]][j];
}
for(i=0;ifor(j=0;j{
printf("%3.1f ",A[i][j]);
if(j==C-1)printf("\n");
}
ar=K_np(A); //K近邻正确率
for(i=0;iprintf("K_np accurate rate of %d group is %f\n",i+1,ar[i]);
for(i=0;it=t+ar[i];
printf("\nK_np accurate rate is %f\n",t/S);
free(a);
free(ar);
system("PAUSE");
}
/***************************************子程序**************************************/
//K近邻
datatype* K_np(datatype**A)
{
int i,j,a,b,n,m,corret=0;
datatype*small; //K个最近点
datatype*sum; //所有距离和特征标识
datatype* ar;
ar=(datatype*)malloc(sizeof(datatype)*S); // 5 number group accurate
for(i=0;iar[i]=0;
sum=(datatype*)malloc(sizeof(datatype)*(RE*2));
for(i=0;i{
a=i*30; //start of group !!!!!!!!!!!!!!!!!!!!!!!!!!!!
b=a+29; //end of group !!!!!!!!!!!!!!!!!!!!!!!!!!!!
for(j=a;j<=b;j++) //j--example
{
for(n=0,m=0;n{
if(n==a)n=b+1;
sum[m]=Dis(A,n,j);
sum[m+1]=A[n][4];
m++;
}
small=Insersort(sum,RE*

2);
if(Judge(small,A[j][C-1]))corret++;
free(small);
}
ar[i]=corret/30.0; // !!!!!!!!!!!!!!!! 计算正确率
corret=0;
}
free(sum);
return ar;
}
//判断样本属性是否正确
int Judge(datatype*small,datatype a)
{
int flag=0,i,k;
k=K;
for(i=0;i{
if(small[i]==a)flag++;
}
if(flag>k/2)
return 1; //正确
else return 0; //错误
}
//排序
datatype* Insersort(datatype*sum,int x)
{
int i,j;
datatype temp;
datatype*small;
small=(datatype*)malloc(sizeof(datatype)*(K));
for(i=0;i{
for(j=x-2;j>=2*(i+1);j--)
{
if(sum[j-2]>sum[j])
{
temp=sum[j]; //交换点间距离
sum[j]=sum[j-2];
sum[j-2]=temp;
temp=sum[j+1]; //交换点的属性
sum[j+1]=sum[j-1];
sum[j-1]=temp;
}
j--;
}
small[i]=sum[2*i+1]; //按由小到大将离待识别样本最近的K个参照样本属性一次放入small中
}
return small; //返回small数组
}
//样本间距离距离,欧式距离
datatype Dis(datatype**A,int i,int j)
{
datatype temp=0;
int m;
for(m=0;m{
temp=temp+(A[i][m]-A[j][m])*(A[i][m]-A[j][m]);
}
temp=sqrt(temp);
return temp;
}
//生成随机不重复非负整数
int* random(int x,int y)
{
int i,m,k;
int *a;
a=(int*)malloc(sizeof(int)*M);
for(i=0;ia[i]=-1;
srand((unsigned)time(NULL)); //给种子
for(i=0;i{
k=0;
m=(rand()%(y-x+1)+x);
while(a[k]!=-1)
{
if (a[k]==m)
{
k=0;
m=rand()%(y-x+1)+x;
}
else
++k;
}
a[i]=m;
}
return a;
}
/*****************************************程序结束**************************************/


相关主题
文本预览
相关文档 最新文档