Algorithm-AdaGrad

 view release on metacpan or  search on metacpan

lib/Algorithm/AdaGrad.xs  view on Meta::CPAN

    if(items > 1){
        SV* arg_sv = ST(1);
        eta = getDoubleValue(arg_sv, "Parameter must be a number.");
    }
    AdaGradPtr obj = NULL;
    New(__LINE__, obj, 1, struct AdaGradS);
    obj->classifers = new classifers_type();
    obj->eta = eta;
    RETVAL = obj;
}
OUTPUT:
    RETVAL

int
update(AdaGradPtr self, SV* sv)
CODE:
{   
    SvGETMAGIC (sv);
    if(!SvROK(sv) || SvTYPE(SvRV(sv)) !=  SVt_PVAV) {
        croak("Parameter must be ARRAY-reference");
    }

lib/Algorithm/AdaGrad.xs  view on Meta::CPAN

    AV* av = (AV*)SvRV(sv);
    size_t arraySize = av_len(av);
    for(size_t i = 0; i <= arraySize; ++i){
        SV** elm = av_fetch(av, i, 0);
        if(elm != NULL){
            handleUpdate(self, *elm);       
        }
    }
    RETVAL = 0;
}
OUTPUT:
    RETVAL

int
classify(AdaGradPtr self, SV* sv)
CODE:
{
    if(!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVHV) {
        croak("Invalid parameter: Parameter must be HASH-reference.");
    }
    

lib/Algorithm/AdaGrad.xs  view on Meta::CPAN

        }
        AdaGrad* ag = iter->second;
        
        SV* val = HeVAL(he);
        double gradient = getDoubleValue(val, "Invalid parameter: type of parameter must be number.");
        margin += ag->classify(gradient);
    }

    RETVAL = margin >= 0 ? POSITIVE_LABEL : NEGATIVE_LABEL;
}
OUTPUT:
    RETVAL


void save(AdaGradPtr self, SV* sv)
CODE:
{
    _save(self, sv);
}

void

typemap  view on Meta::CPAN

AdaGradPtr T_PTROBJ_ADAGRAD

INPUT

T_PTROBJ_ADAGRAD
	$var = GET_ADAGRAD_PTR($arg);

OUTPUT

T_PTROBJ_ADAGRAD
	sv_setref_pv($arg, klass, (void*)$var);



( run in 0.439 second using v1.01-cache-2.11-cpan-4e96b696675 )