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; }
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; }