Esempio n. 1
0
minteg *mk_minteg(
    double (*h)(double parameter,double constant,double x),
    double (*compute_constant)(double parameter),
    double (*xlo)(double parameter,double constant),
    double (*xhi)(double parameter,double constant),
    double parameter_lo,
    double parameter_hi,
    int integ_array_size,
    int integ_size
  )
{
  minteg *mit = AM_MALLOC(minteg);
  int i;

  mit -> integ_array_size = integ_array_size;
  mit -> integ_size = integ_size;
  mit -> h = h;
  mit -> compute_constant = compute_constant;
  mit -> xlo = xlo;
  mit -> xhi = xhi;
  mit -> parameter_lo = parameter_lo;
  mit -> parameter_hi = parameter_hi;

  mit -> integ_array = AM_MALLOC_ARRAY(integ_ptr,integ_array_size);

  for ( i = 0 ; i < integ_array_size ; i++ )
    mit -> integ_array[i] = NULL;

  return(mit);
}
Esempio n. 2
0
lr_predict *mk_in_lr_predict( PFILE *f)
{
  int i, size;
  double val;
  dyv *dv, *b;
  lr_predict *lrp;

  lrp = AM_MALLOC( lr_predict);

  dv = mk_dyv_read( f);
  size = dyv_size( dv);

  lrp->b0 = dyv_ref( dv, 0);

  b = mk_dyv( size-1);
  for (i=1; i<size; ++i) {
    val = dyv_ref( dv, i);
    dyv_set( b, i-1, val);
  }
  lrp->b = b;

  free_dyv( dv);

  return lrp;
}
Esempio n. 3
0
lr_predict *mk_lr_predict( double b0, dyv *b)
{
  lr_predict *lrp;
  lrp = AM_MALLOC( lr_predict);
  lrp->b0       = b0;
  lrp->b        = mk_copy_dyv( b);
  return lrp;
}
Esempio n. 4
0
lr_statearr *mk_array_of_null_lr_states( int size)
{
  int i;
  lr_statearr *lrsarr;
  lrsarr = AM_MALLOC( lr_statearr);
  lrsarr->size = size;
  lrsarr->arr = AM_MALLOC_ARRAY( lr_state *, size);
  for (i=0; i<size; ++i) lrsarr->arr[i] = NULL;
  return lrsarr;
}
Esempio n. 5
0
/* number of elements you want to add.                 */
dyv *mk_empty_dyv(int capacity) {
  dyv *result = AM_MALLOC(dyv);
  if ( capacity < 0 ) my_error("mk_empty_ivec : capacity < 0 illegal");
  result -> dyv_code = DYV_CODE;
  result -> array_size = capacity;
  result -> size = 0;
  result -> farr = am_malloc_realnums(capacity);
  Dyvs_mallocked += 1;
  return(result);
}
Esempio n. 6
0
dyv *mk_dyv(int size)
{
  dyv *result = AM_MALLOC(dyv);
  result -> dyv_code = DYV_CODE;
  result -> array_size = size;
  result -> size = size;
  result -> farr = am_malloc_realnums(size);
  Dyvs_mallocked += 1;
  return(result);
}
Esempio n. 7
0
string_array *mk_string_array(int size)
{
  string_array *result = AM_MALLOC(string_array);
  int i;

  result -> string_array_code = STRING_ARRAY_CODE;
  result -> size = size;
  result -> sarr_size = size;
  result -> sarr = AM_MALLOC_ARRAY(char_ptr,size);

  for ( i = 0 ; i < size ; i++ )
    result->sarr[i] = mk_copy_string("<UnDeFiNeD>");
  String_Arrays_mallocked += 1;
  return(result);
}
Esempio n. 8
0
integ *mk_integ(
    double (*h)(double parameter,double constant,double x),
    double xlo,
    double xhi,
    double parameter,
    double constant,
    int size
  )
/*
   Returns an it in which
   it->integral[i] = integal_from_xlo_to(x_lo + h*i) of h(parameter,x) dx
                     ------------------------------------------------
                     integal_from_xlo_to_x_hi of h(parameter,x) dx
*/
{
  integ *it = AM_MALLOC(integ);
  dyv *dig = mk_dyv(size);
  int i;
  double sum = 0.0;
  double last_pdf = 0.0;
  double delta = (xhi - xlo) / (size-1);

  if ( h(parameter,constant,xhi) > 1e-6 )
    my_error("Hmm... I was really hoping h(parameter,xhi) == 0");

  dyv_set(dig,0,0.0);

  for ( i = 1 ; i < size ; i++ )
  {
    double x = xlo + i * delta;
    double this_pdf = h(parameter,constant,x);
    if (i == 1) sum += delta * this_pdf;
    else        sum += delta * (this_pdf + last_pdf) / 2.0;
    dyv_set(dig,i,sum);
    last_pdf = this_pdf;  /* added 2/26/97  JGS */
  }

  dyv_scalar_mult(dig,1.0 / sum,dig);

  it -> integral = dig;
  it -> xlo = xlo;
  it -> xhi = xhi;
  it -> parameter = parameter;
  it -> constant = constant;

  return(it);
}
Esempio n. 9
0
lr_options *mk_copy_lr_options( lr_options *opts)
{
  lr_options *newopts;
  newopts = AM_MALLOC( lr_options);

  newopts->rrlambda        = opts->rrlambda;
  newopts->lreps           = opts->lreps;
  newopts->lrmax           = opts->lrmax;
  newopts->cgbinit         = opts->cgbinit;
  newopts->cgdeveps        = opts->cgdeveps;
  newopts->cgeps           = opts->cgeps;
  newopts->cgmax           = opts->cgmax;
  newopts->cgwindow        = opts->cgwindow;
  newopts->cgdecay         = opts->cgdecay;

  return newopts;
}
Esempio n. 10
0
lr_state *mk_copy_lr_state( lr_state *lrs)
{
  lr_state *lrscopy;

  lrscopy = AM_MALLOC( lr_state);

  lrscopy->b0          = lrs->b0;
  lrscopy->b           = mk_copy_dyv( lrs->b);
  lrscopy->n           = mk_copy_dyv( lrs->n);
  lrscopy->u           = mk_copy_dyv( lrs->u);
  lrscopy->w           = mk_copy_dyv( lrs->w);
  lrscopy->z           = mk_copy_dyv( lrs->z);
  lrscopy->converged   = lrs->converged;


  return lrscopy;
}
Esempio n. 11
0
lr_state *mk_lr_state( lr_train *lrt, lr_options *opts)
{
  lr_state *lrs;
  lrs = AM_MALLOC( lr_state);

  lrs->b0         = 0.0;

  lrs->b          = mk_zero_dyv(lrt->numatts-1);
  lrs->n          = mk_zero_dyv(lrt->numrows);
  lrs->u          = mk_zero_dyv(lrt->numrows);
  lrs->w          = mk_zero_dyv(lrt->numrows);
  lrs->z          = mk_zero_dyv(lrt->numrows);

	lrs->converged  = 0;

  return lrs;
}
Esempio n. 12
0
generic_array *mk_empty_generic_array(
  void (*free_data)(void *data),
  void * (*mk_copy_data)(void *data),
  void (*fprintf_data)(FILE *s,char *m1,void *data,char *m2) /* May be NULL */
)
{
  generic_array *ga = AM_MALLOC(generic_array);
  ga -> size = 0;
  ga -> array_size = INITIAL_GENERIC_ARRAY_SIZE;
  ga -> array = AM_MALLOC_ARRAY(void *,ga->array_size);

  ga -> free_data = free_data;
  ga -> mk_copy_data = mk_copy_data;
  ga -> fprintf_data = fprintf_data;
  
  return(ga);
}
Esempio n. 13
0
lr_train *mk_copy_lr_train( const lr_train *source)
{
  lr_train *dest;

  dest = AM_MALLOC(lr_train);
  dest->opts = mk_copy_lr_options( source->opts);

  /* Don't copy spardat or factors dym.  Just keep pointer. */
  dest->X = source->X;
  dest->M = source->M;

  dest->numatts    = source->numatts;
  dest->numrows    = source->numrows;
  dest->y          = mk_copy_dyv(source->y);
  dest->likesat    = source->likesat;
  dest->lrs        = mk_copy_lr_state( source->lrs);
  return dest;
}
Esempio n. 14
0
lr_train *mk_lr_train_from_dym( dym *factors, dyv *outputs, lr_options *opts)
{
  /* Set rows to NULL if you want all rows from ds to be used. */

  int numrows, numatts;
  lr_train *lrt;

  numrows = dym_rows( factors);
  numatts = dym_cols( factors)+1; /* Number of factors including constant. */

  /* Create lr lrt structure. */
  lrt = AM_MALLOC(lr_train);

  /* Copy in opts. */
  lrt->opts = mk_copy_lr_options( opts);

  /* Assign factors and outputs into lr structure. */
  lrt->X = NULL;
  lrt->M = factors;

  /* Outputs. */
  lrt->y = mk_copy_dyv( outputs);
  if (!dyv_is_binary( outputs)) {
    my_error( "mk_lr_train: Error: outputs are not binary.\n");
  }

  /* Set log likelihood of saturated model. */
  lrt->likesat = 0.0;

  /* Initialize remainder of lr struct */
  lrt->numatts = numatts;
  lrt->numrows = numrows;

  /* Create lr_state member. */
  lrt->lrs = mk_lr_state( lrt, opts);

  /* Now that the structure is complete, update n and u to prepare for
     iterations. */
  lr_train_update_n(lrt);
  lr_train_update_u(lrt);

  return lrt;
}
Esempio n. 15
0
lr_options *mk_lr_options(void)
{
  lr_options *opts;
  opts = AM_MALLOC( lr_options);

  /* Options which are always available. */
  opts->rrlambda   = 10.0;

  /*   Termination criteria for lr iterations. */
  opts->lreps      = 0.05;
  opts->lrmax      = 30;

  /* cg options are available in conjuagate gradient runs. */
  opts->cgbinit    = 1;
  opts->cgdeveps   = 0.005;    /* suggestion: 0.005 */
  opts->cgeps      = 0.000;  /* multiplied by initial CG rsqr. */
  opts->cgmax      = 200;

  opts->cgwindow   = 3;      /* Number of bad iterations allowed. */
  opts->cgdecay    = 1000.0; /* Factor worse than best-seen that is allowed. */
  
  return opts;
}
Esempio n. 16
0
lr_train *mk_lr_train_from_spardat( spardat *X, lr_options *opts)
{
  /* Copies spardat X. */
  int numrows, numatts;
  lr_train *lrt;

  numrows = spardat_num_rows(X);
  numatts = spardat_num_atts(X)+1; /* Add 1 for constant att. */
  lrt = AM_MALLOC(lr_train);

  /* Copy in opts. */
  lrt->opts = mk_copy_lr_options( opts);

  /* Do not make a copy of the caller's spardat; too expensive. */
  lrt->X = X;
  lrt->M = NULL;

  /* Initialize reaminder of lr struct */
  lrt->numatts    = numatts;
  lrt->numrows    = numrows;

  /* Futz with 0-1 probabilities. */
  lrt->y = mk_dyv_from_ivec( X->row_to_outval);

  /* Set log likelihood of saturated model. */
  lrt->likesat = 0.0;

  /* Make lr_state member. */
  lrt->lrs = mk_lr_state( lrt, opts);

  /* Now that the structure is complete, update n and u to prepare for
     iterations. */
  lr_train_update_n(lrt);
  lr_train_update_u(lrt);

  return lrt;
}