Example #1
0
struct stump *best_stump(struct list_haar  *larray, float *w, int nbex, int d) // d nombre de features initialisés à 5 dans la fonction adaboost
{
 //printf(" **** lancement de best stump **** \n\n"); 
  //int n = larray->nb_haar; //numero du tableau d'image  
  struct stump *best = malloc(sizeof(struct stump));
  best->E = 2;
  int i = 0; 
  while (i < d) 
  {
   // printf("dans le while de best stump\n");
    struct stump *s = decision_stump(larray, w, i, nbex);

    if (s->E < best->E)
    {
      best = s; 
    }
    if(s->E == best->E)
      if(s->M > best->M)
      {
        best = s; 
        best->coord = i; 
      }
    i++;
  }

  return best;
}
Example #2
0
struct Node * dtree(double **ins, int size, struct Node *node)
{
	int i,j;
	if(node == NULL)
	{
		printf(" is NULL\n");
		node = malloc(sizeof(struct Node));
		node->p = NULL;
		node->n = NULL;
		node->b = 0;
		if(size == 0)
		{
			return NULL;
		}
		if(size == 1)
		{
			node->label = ins[0][2];
			return node;
		}
			
		struct REC * result = decision_stump(ins, size);
		printf("r: s,d,t,c = %d, %d, %lf, %lf\n",result->s, result->dim,result->theta,result->count);
		
		node->s = result->s;
		node->dim = result->dim;
		node->theta = result->theta;
		node->count = result->count;
		node->b = 0;
		if(node->count == 0 || node->count == size)
		{
			node->label = ins[0][2];
			for(i=0;i<size;i++)
				printf("%lf ",ins[i][2]);
			printf("\n");
			return node;
		}
			

		double **insp = malloc((result->count)*sizeof(double*));
		for(i=0;i<result->count;i++)
			insp[i] = malloc(3*sizeof(double));
		double **insn = malloc((size - result->count)*sizeof(double*));
		for(i=0;i<size - result->count;i++)
			insn[i] = malloc(3*sizeof(double));
		int inspc = 0, insnc = 0;
		for(i=0;i<size;i++)
		{
			if ((node->s) * (ins[i][node->dim]- node->theta)>0)
			{
				for(j=0;j<3;j++)
					insp[inspc][j] = ins[i][j];
				inspc++;
			}
			else
			{
				for(j=0;j<3;j++)
					insn[insnc][j] = ins[i][j];
				insnc++;
			}
		}
		node->p = dtree(insp, node->count, node->p);
		node->n = dtree(insn, size - node->count, node->n);
		//node->b = node->p->b+node->n->b;
		node->b = 1;
		if(node->p !=NULL)
			node->b +=node->p->b;
		if(node->n != NULL)
			node->b += node->n->b;
		return node;
	}
	else
		fprintf(stderr, "node != NULL\n");
	return NULL;
}