BOOL Update_def_Settings( def_Settings * defsetting ) { char buf[LENGTH] ; char msg[20] ; BOOL batchgoon = TRUE ; char * pstr ; unsigned int sz = 0 ; unsigned int serialno = 0 ; if (NULL == defsetting) return FALSE ; defsetting->time = 0 ; if ( FALSE == Is_Data_Empty(&defsetting->pairs) ) { // create next input file name pstr = strrchr( defsetting->inputfile, '.') ; // 46 if ( NULL != pstr ) sz = abs( pstr - defsetting->inputfile ) ; else { sz = strlen(defsetting->inputfile) ; return FALSE ; } strcpy (buf, pstr+1) ; serialno = atoi(buf) ; serialno += 1 ; strncpy( buf, defsetting->inputfile , sz ) ; buf[sz] = '\0' ; strcat( buf, "." ) ; // add appendix sprintf(msg,"%d",serialno) ; strcat( buf, msg ) ; // save inputfile name in def_Settings if ( NULL != defsetting->inputfile ) { free( (void*) defsetting->inputfile ) ; defsetting->inputfile = NULL ; } if ( NULL == ( defsetting->inputfile = strdup(buf) ) ) batchgoon = FALSE ; // create next test file name pstr = strrchr( defsetting->testfile, '.') ; // 46 if ( NULL != pstr ) sz = abs( pstr - defsetting->testfile ) ; else sz = strlen(defsetting->testfile) ; strcpy (buf, pstr+1) ; serialno = atoi(buf) ; serialno += 1 ; strncpy( buf, defsetting->testfile , sz ) ; buf[sz] = '\0' ; strcat( buf, "." ) ; // add appendix sprintf(msg,"%d",serialno) ; strcat( buf, msg ) ; // save testfile name in def_Settings if ( NULL != defsetting->testfile ) { free( (void*) defsetting->testfile ) ; defsetting->testfile = NULL ; } if ( NULL == ( defsetting->testfile = strdup(buf) ) ) batchgoon = FALSE ; // load data into pairs if ( FALSE == smo_Loadfile(&(defsetting->pairs), defsetting->inputfile, 0) ) batchgoon = FALSE ; } else { // load data into pairs if ( FALSE == smo_Loadfile(&(defsetting->pairs), defsetting->inputfile, 0) ) { batchgoon = FALSE ; printf("Failed to load training data from the file %s\n", defsetting->inputfile) ; } #ifdef _PROSTATE_VIVO else if (defsetting->pairs.count!=100||defsetting->pairs.dimen!=6117||CLASSIFICATION!=defsetting->pairs.datatype) { batchgoon = FALSE ; printf("The file %s is not ProstateABreast.VIVO.\n", defsetting->inputfile) ; } #endif } defsetting->cache_size = DEF_CACHE ; defsetting->time = 0 ; defsetting->lnC_step = defsetting->def_lnC_step ; defsetting->lnK_step = defsetting->def_lnK_step; defsetting->lnC_start = defsetting->def_lnC_start ; defsetting->lnK_start = defsetting->def_lnK_start ; defsetting->lnC_end = defsetting->def_lnC_end ; defsetting->lnK_end = defsetting->def_lnK_end ; // load data into pairs // load testing data into pairs //if (batchgoon == TRUE) // if ( FALSE == smo_Loadfile(&(defsetting->testdata), defsetting->testfile, defsetting->pairs.dimen) ) // printf ("Failed to load testing data from the file %s", defsetting->testfile ) ; return batchgoon ; }
kcv_Settings * Create_Kcv ( def_Settings * defsetting ) { kcv_Settings * kcvsetting ; Data_Node * node ; unsigned int * labelnum ; unsigned int index ; if ( NULL == defsetting ) return NULL ; if ( TRUE == Is_Data_Empty(&defsetting->pairs) ) return NULL ; kcvsetting = (kcv_Settings *) malloc (sizeof(kcv_Settings)) ; if (NULL == kcvsetting) { printf("fail to malloc kcv.\r\n") ; return NULL ; } kcvsetting->best_lnC = 0 ; kcvsetting->best_lnK = 0 ; kcvsetting->index = 0 ; kcvsetting->lnC_start = min(defsetting->lnC_start, defsetting->lnC_end) ; kcvsetting->lnK_start = min(defsetting->lnK_start, defsetting->lnK_end) ; kcvsetting->lnC_end = max(defsetting->lnC_start, defsetting->lnC_end) ; kcvsetting->lnK_end = max(defsetting->lnK_start, defsetting->lnK_end) ; if (defsetting->kernel == POLYNOMIAL) { kcvsetting->lnK_start = 0 ; kcvsetting->lnK_end = 0 ; } kcvsetting->lnK_step = defsetting->lnK_step ; kcvsetting->lnC_step = defsetting->lnC_step ; kcvsetting->C_steps = (unsigned int) floor((kcvsetting->lnC_end - kcvsetting->lnC_start + defsetting->eps)/kcvsetting->lnC_step) + 1 ; kcvsetting->K_steps = (unsigned int) floor((kcvsetting->lnK_end - kcvsetting->lnK_start + defsetting->eps)/kcvsetting->lnK_step) + 1 ; kcvsetting->lnC = (double *) malloc(sizeof(double)*kcvsetting->C_steps) ; kcvsetting->lnK = (double *) malloc(sizeof(double)*kcvsetting->K_steps) ; kcvsetting->kfold = defsetting->kfold ; kcvsetting->cv_error = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->cv_mean = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->cv_variance = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->final_error = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->final_mean = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->final_variance = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->final_var_error = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->final_var_mean = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->final_var_variance = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->cv_svs = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->cv_lnC = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->cv_lnK = (double *) calloc(kcvsetting->C_steps*kcvsetting->K_steps, sizeof(double)) ; kcvsetting->nodelist = (Data_Node **) calloc(defsetting->pairs.count, sizeof(Data_Node *)) ; kcvsetting->time = 0 ; kcvsetting->best_rate = 0 ; for (index = 0; index < kcvsetting->C_steps; index ++) kcvsetting->lnC[index] = kcvsetting->lnC_start + index * kcvsetting->lnC_step ; for (index = 0; index < kcvsetting->K_steps; index ++) kcvsetting->lnK[index] = kcvsetting->lnK_start + index * kcvsetting->lnK_step ; kcvsetting->pointernode = (Data_Node ***) malloc(defsetting->pairs.classes*sizeof(Data_Node **)); kcvsetting->cvfold = (unsigned int **) malloc(defsetting->pairs.classes*sizeof(unsigned int *)); labelnum = (unsigned int *) calloc(defsetting->pairs.classes, sizeof(unsigned int)); for (index=0;index<defsetting->pairs.classes;index++) { kcvsetting->pointernode[index] = (Data_Node **) calloc(defsetting->pairs.labelnum[index], sizeof(Data_Node *)) ; kcvsetting->cvfold[index] = (unsigned int *) calloc(defsetting->pairs.labelnum[index], sizeof(unsigned int)) ; } kcvsetting->ranks = defsetting->pairs.classes ; for (index=0;index<kcvsetting->ranks;index++) { if (defsetting->pairs.labelnum[index]<defsetting->kfold) defsetting->kfold = defsetting->pairs.labelnum[index] ; } if (defsetting->kfold!=kcvsetting->kfold) { printf("\nThere is a rank having %d samples fewer than %d. So k-fold is reduced to %d-fold.\n", defsetting->kfold, kcvsetting->kfold, defsetting->kfold) ; kcvsetting->kfold = defsetting->kfold ; if (defsetting->kfold<=1) { printf("Exit due to 1-fold.\n") ; exit(1) ; } } node = defsetting->pairs.front ; index = 0 ; while ( NULL != node ) { kcvsetting->nodelist[index] = node ; kcvsetting->pointernode[node->target-1][labelnum[node->target-1]] = node ; labelnum[node->target-1] += 1 ; node = node->next ; index ++ ; } if (defsetting->seeds>0) srand(defsetting->seeds) ; else srand((unsigned)time( NULL )) ; free(labelnum) ; return kcvsetting ; }