예제 #1
0
void reformatTree(hpdRFnode* tree, SEXP forest, int* index, 
		  int *features_cardinality, int nrow, int treeID)
{
  int *i = index;
  int id = *i;
  int* nodestatus = INTEGER(VECTOR_ELT(forest,0));
  int* bestvar = INTEGER(VECTOR_ELT(forest,1));
  int* treemap = INTEGER(VECTOR_ELT(forest,2));
  double* nodepred = REAL(VECTOR_ELT(forest,3));
  double* xbestsplit = REAL(VECTOR_ELT(forest,4));
  
  if(tree->split_criteria != NULL && tree->split_criteria_length > 0)
    {
      nodestatus[treeID*nrow + id] = 1;
      bestvar[treeID*nrow +id] = tree->split_variable;
      nodepred[treeID*nrow +id] = tree->prediction;

      if(features_cardinality[bestvar[treeID*nrow +id]-1] == NA_INTEGER)
	xbestsplit[treeID*nrow +id] = tree->split_criteria[0];
      else if(features_cardinality[bestvar[treeID*nrow +id]-1] < 31)
	{
	  register double split = 0;
	  for(int j = 0; j < tree->split_criteria_length; j++)
	    split += 1 << ((int)tree->split_criteria[j]-1);
	  xbestsplit[treeID*nrow +id] = split;
	}
      else
	printf("too many categorical variables can only support 31");
     
      (*i)++;
      treemap[treeID*2*nrow +id] = (*i)+1;
      reformatTree(tree->left,
		   forest, index, features_cardinality, nrow, treeID);
      (*i)++;
      treemap[treeID*2*nrow +id + nrow] = (*i)+1;
      reformatTree(tree->right,
		   forest, index, features_cardinality, nrow, treeID);
    }
  else
    {
      nodestatus[treeID*nrow +id] = -1;
      nodepred[treeID*nrow +id] = tree->prediction;
    }
}
예제 #2
0
파일: main.c 프로젝트: KovaxG/aut-eng-2014
/* prints the tree recursively */
void printTree(char *filename)
{
    FILE* f = fopen(filename, "w");
    reformatTree();

    /* start printing */
    for (int k=0; k<=treeHeight; k++)
    {
        printNull->level = k;
        recursivePrintValue(f, *(stack+stackPointer), k);
        fprintf(f, "\n");
        for (int i=0; i<power(2, treeHeight-k-1); i++)
        {
            recursivePrintLinks(f, *(stack+stackPointer), i, k);
            fprintf(f, "\n");
        }
    }

    printf("[INFO] [PRINT]\tThe tree was printed successfully in the file \"%s\".\n", filename);
    fclose(f);
}