Algorithm-AdaGrad

 view release on metacpan or  search on metacpan

builder/MyBuilder.pm  view on Meta::CPAN


sub new {
    my ( $self, %args ) = @_;
    $self->SUPER::new(
        %args,
        add_to_cleanup => [
            'Algorithm-AdaGrad-*', 'MANIFEST.bak', 'lib/Algorithm/*.o',
        ],
        meta_add          => { keywords => [qw/AdaGrad/], },
        needs_compiler_cpp => 11,
        extra_compiler_flags => [qw/-Wno-format-security -Wno-duplicate-decl-specifier -Wno-reserved-user-defined-literal/],
    );
}

1;
__END__

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

    ofs.write(reinterpret_cast<const char*>(&(self->eta)), sizeof(double));
    size_t featureNum = classifers.size();
    ofs.write(reinterpret_cast<const char*>(&featureNum), sizeof(size_t));
    
    std::unordered_map<std::string, AdaGrad*>::iterator iter = classifers.begin();
    std::unordered_map<std::string, AdaGrad*>::iterator iter_end = classifers.end();  
    for(;iter != iter_end; ++iter){
        size_t size = iter->first.size();
        ofs.write(reinterpret_cast<const char*>(&size), sizeof(size_t));
        ofs.write(iter->first.c_str(), sizeof(char) * size);
        iter->second->save(ofs);
    }
    if(ofs.fail()) {
        croak("Failed to save file: %s", filename);
    }
    ofs.close();
}

static void _load(pTHX_ AdaGradPtr self, SV* sv) {
    if(SvTYPE(sv) != SVt_PV && SvTYPE(sv) != SVt_PVMG){
        croak("Invalid parameter: the parameter must be string.");

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

    STRLEN len;
    std::unordered_map<std::string, AdaGrad*>& classifers = *(self->classifers);
    double margin = 0.0;
    while ((he = hv_iternext(features))){
        char* key = HePV(he, len);
        std::string featStr = std::string(key, len);
        classifers_type::const_iterator iter = classifers.find(featStr);
        if(iter == classifers.end()){
            continue;
        }
        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

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

}
    
void
DESTROY(AdaGradPtr self)
CODE:
{
    std::unordered_map<std::string, AdaGrad*>& classifers = *(self->classifers);
    std::unordered_map<std::string, AdaGrad*>::iterator iter = classifers.begin();
    std::unordered_map<std::string, AdaGrad*>::iterator iter_end = classifers.end();   
    for(;iter != iter_end; ++iter){
        Safefree(iter->second);
    }
    Safefree (self->classifers);
    Safefree (self);
}



( run in 0.792 second using v1.01-cache-2.11-cpan-39bf76dae61 )