save.h
上传用户:soukeisyuu
上传日期:2022-07-03
资源大小:5943k
文件大小:8k
源码类别:

波变换

开发平台:

Visual C++

  1. #ifndef SAVE_H
  2. #define SAVE_H
  3. int main( int argc, char** argv )
  4. {
  5.     CvMat* train_m = cvCreateMat(120,10,CV_32FC1);
  6.     CvMat* response_m = cvCreateMat(120,1,CV_32FC1);
  7.     CvMat* test_m  = cvCreateMat(30,10,CV_32FC1);
  8.     CvMat* result_m = cvCreateMat(30,1,CV_32FC1);
  9.     FILE* fp;
  10.     fp = fopen("../aaa.txt","r");
  11.     if(fp == NULL)
  12.         return -1;
  13.     int train_step = train_m->step/sizeof(float);
  14.     float* train_data = train_m->data.fl;
  15.     int test_step = test_m->step/sizeof(float);
  16.     float* test_data = test_m->data.fl;
  17.     int response_step = response_m->step/sizeof(float);
  18.     float* response_data = response_m->data.fl;
  19.     int result_step = result_m->step/sizeof(float);
  20.     float* result_data = result_m->data.fl;
  21.     float lineData[12];
  22.     for(int k=0;k<3;k++)
  23.     {
  24.         for(int i=0;i<50;i++)
  25.         {
  26.             for(int t=0;t<12;t++)
  27.                 fscanf(fp,"%f",&lineData[t]);
  28.             for(int j=0;j<=10;j++)
  29.                 if(i<40)
  30.                 {
  31.                     train_data[(40*k+i)*train_step + j] = lineData[j+2];
  32.                     response_data[(40*k+i)*response_step] = k;
  33.                 }
  34.                 else
  35.                 {
  36.                     test_data[(10*k+(i-40))*test_step + j] = lineData[j+2];
  37.                 }
  38.         }
  39.     }
  40.  /*
  41.     printf("training datan");
  42.     for(int i=0;i<120;i++)
  43.     {
  44.         for(int j=0;j<10;j++)
  45.             printf("%.3f_",train_data[i*train_step+j]);
  46.         printf("n");
  47.     }
  48.     printf("n");
  49.     printf("testing datan");
  50.     for(int i=0;i<30;i++)
  51.     {
  52.         for(int j=0;j<10;j++)
  53.             printf("%.3f_",test_data[i*test_step+j]);
  54.         printf("n");
  55.     }
  56.     printf("n");
  57. */
  58.     CvNormalBayesClassifier bayesClassifier(train_m,response_m);
  59.     CvMat* rowMat = cvCreateMat(1,10,CV_32FC1);
  60.     float category;
  61.     int right=0;
  62.     printf("resulting datan");
  63.     for(int k=0;k<3;k++)
  64.     {
  65.         for(int i=0;i<10;i++)
  66.         {
  67.             cvGetRow(test_m,rowMat,k*10+i);
  68.             category = bayesClassifier.predict(rowMat,0);
  69.             if( (int)category == k )
  70.                 right++;
  71.             printf("%.3fn",category);
  72.         }
  73.     }
  74.     printf("n%f",right/30.0*100);
  75.     /*
  76.     bayesClassifier.predict(test_m,result_m);
  77.     printf("resulting datan");
  78.     for(int i=0;i<30;i++)
  79.         printf("%.3fn",result_data[i*result_step]);
  80.     printf("n");
  81.     int right=0;
  82.     for(int k=0;k<3;k++)
  83.     {
  84.         for(int i=0;i<10;i++)
  85.         {
  86.             if( (int)result_data[(10*k+i)*result_step] == k )
  87.                 right++;
  88.         }
  89.     }
  90.     printf("%f",(float)right/30*100);
  91.     */
  92.     fclose(fp);
  93.     while(1);
  94.     return 0;
  95. }
  96. void meanDevi(CvMat *arr, CvMat *mean_devi)
  97. {
  98.     if(arr->cols != mean_devi->cols)
  99.         return;
  100.     int i,row,col;
  101.     CvMat *temp_col;
  102.     CvScalar mean = cvScalar(0.0, 0.0, 0.0, 0.0);
  103.     CvScalar devi = cvScalar(0.0, 0.0, 0.0, 0.0);
  104.     row = arr->rows;
  105.     col = arr->cols;
  106.     temp_col = cvCreateMat(row,1,CV_32FC1);
  107.     float *data = (float*)mean_devi->data.fl;
  108.     int step = mean_devi->step/sizeof(float);
  109.     for(i=0;i<col;i++)
  110.     {
  111.         cvGetCol(arr,temp_col,i);
  112.         cvAvgSdv(temp_col,&mean,&devi,NULL);
  113.         data[i] = mean.val[0];
  114.         data[step+i] = devi.val[0];
  115.     }
  116. }
  117. void dataNormalize(CvMat *arr, CvMat *mean_devi)
  118. {
  119.     if(arr->cols != mean_devi->cols)
  120.         return;
  121.     int i,j,row,col;
  122.     row = arr->rows;
  123.     col = arr->cols;
  124.     float *arr_data = (float*)arr->data.fl;
  125.     int arr_step = arr->step/sizeof(float);
  126.     float *data = (float*)mean_devi->data.fl;
  127.     int step = mean_devi->step/sizeof(float);
  128.     for(i=0;i<col;i++)
  129.     {
  130.         float mean = data[i];
  131.         float devi = data[step+i];
  132.         for(j=0;j<row;j++)
  133.             arr_data[j*arr_step+i] = (arr_data[j*arr_step+i] - mean)/devi;
  134.     }
  135. }
  136. void minMax(CvMat *arr, CvMat *min_max)
  137. {
  138.     if(arr->cols != min_max->cols)
  139.         return;
  140.     int i,row,col;
  141.     CvMat *temp_col;
  142.     double min;
  143.     double max;
  144.     row = arr->rows;
  145.     col = arr->cols;
  146.     temp_col = cvCreateMat(row,1,CV_32FC1);
  147.     float *data = (float*)min_max->data.fl;
  148.     int step = min_max->step/sizeof(float);
  149.     for(i=0;i<col;i++)
  150.     {
  151.         cvGetCol(arr,temp_col,i);
  152.         cvMinMaxLoc(temp_col,&min,&max);
  153.         data[i] = (float)min;
  154.         data[step+i] = (float)max;
  155.     }
  156. }
  157. void dataLinear(CvMat *arr, CvMat *min_max)
  158. {
  159.     if(arr->cols != min_max->cols)
  160.         return;
  161.     int i,j,row,col;
  162.     row = arr->rows;
  163.     col = arr->cols;
  164.     float *arr_data = (float*)arr->data.fl;
  165.     int arr_step = arr->step/sizeof(float);
  166.     float *data = (float*)min_max->data.fl;
  167.     int step = min_max->step/sizeof(float);
  168.     for(i=0;i<col;i++)
  169.     {
  170.         float min = data[i];
  171.         float max = data[step+i];
  172.         for(j=0;j<row;j++)
  173.             arr_data[j*arr_step+i] = (arr_data[j*arr_step+i] - min)/(max-min);
  174.     }
  175. }
  176. int main( int argc, char** argv )
  177. {
  178.     CvMat* train_m = cvCreateMat(120,10,CV_32FC1);
  179.     CvMat* response_m = cvCreateMat(120,1,CV_32FC1);
  180.     CvMat* test_m  = cvCreateMat(30,10,CV_32FC1);
  181.     CvMat* result_m = cvCreateMat(30,1,CV_32FC1);
  182.     CvMat* mean_devi = cvCreateMat(2,10,CV_32FC1);
  183.     CvMat* min_max = cvCreateMat(2,10,CV_32FC1);
  184.     FILE* fp;
  185.     fp = fopen("../aaa.txt","r");
  186.     if(fp == NULL)
  187.         return -1;
  188.     int train_step = train_m->step/sizeof(float);
  189.     float* train_data = train_m->data.fl;
  190.     int test_step = test_m->step/sizeof(float);
  191.     float* test_data = test_m->data.fl;
  192.     int response_step = response_m->step/sizeof(float);
  193.     float* response_data = response_m->data.fl;
  194.     int result_step = result_m->step/sizeof(float);
  195.     float* result_data = result_m->data.fl;
  196.     float lineData[12];
  197.     for(int k=0;k<3;k++)
  198.     {
  199.         for(int i=0;i<50;i++)
  200.         {
  201.             for(int t=0;t<12;t++)
  202.                 fscanf(fp,"%f",&lineData[t]);
  203.             for(int j=0;j<=10;j++)
  204.                 if(i<40)
  205.                 {
  206.                     train_data[(40*k+i)*train_step + j] = lineData[j+2];
  207.                     response_data[(40*k+i)*response_step] = k;
  208.                 }
  209.                 else
  210.                 {
  211.                     test_data[(10*k+(i-40))*test_step + j] = lineData[j+2];
  212.                 }
  213.         }
  214.     }
  215.     meanDevi(train_m,mean_devi);
  216.     dataNormalize(train_m,mean_devi);
  217.     dataNormalize(test_m,mean_devi);
  218.     //minMax(train_m,min_max);
  219.     //dataLinear(train_m,min_max);
  220.     //dataLinear(test_m,min_max);
  221.     printf("training datan");
  222.     for(int i=0;i<120;i++)
  223.     {
  224.         for(int j=0;j<10;j++)
  225.             printf("%.3f_",train_data[i*train_step+j]);
  226.         printf("n");
  227.     }
  228.     printf("n");
  229.     printf("testing datan");
  230.     for(int i=0;i<30;i++)
  231.     {
  232.         for(int j=0;j<10;j++)
  233.             printf("%.3f_",test_data[i*test_step+j]);
  234.         printf("n");
  235.     }
  236.     printf("n");
  237.     CvTermCriteria criteria;
  238.     CvSVMParams param;
  239.     criteria= cvTermCriteria(CV_TERMCRIT_EPS, 0, FLT_EPSILON);
  240.     param= CvSVMParams(CvSVM::C_SVC, CvSVM::POLY,
  241.                         1.0, 1.0, 1.0,
  242.                         2, 0.0, 0.0,
  243.                         NULL, criteria);
  244.     CvSVM  svmClassifier = CvSVM();
  245.     svmClassifier.train(train_m,response_m,NULL,NULL,param);
  246.     CvMat* rowMat = cvCreateMat(1,10,CV_32FC1);
  247.     float category;
  248.     int right=0;
  249.     printf("resulting datan");
  250.     for(int k=0;k<3;k++)
  251.     {
  252.         for(int i=0;i<10;i++)
  253.         {
  254.             cvGetRow(test_m,rowMat,k*10+i);
  255.             category = svmClassifier.predict(rowMat);
  256.             if( (int)category == k )
  257.                 right++;
  258.             printf("%.3fn",category);
  259.         }
  260.     }
  261.     printf("n%f",right/30.0*100);
  262.     fclose(fp);
  263.     while(1);
  264.     return 0;
  265. }
  266. #endif // SAVE_H