Ejemplo n.º 1
0
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 ;	
}
Ejemplo n.º 2
0
Archivo: kcv.c Proyecto: Matafight/orca
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 ;	
}