Algorithm-LibLinear
view release on metacpan or search on metacpan
src/liblinear/linear.cpp view on Meta::CPAN
// primal_solver_tol obtained from eps for dual may be too loose
primal_solver_tol *= 0.001;
l2r_l2_svr_fun fun_obj(prob, param, C);
NEWTON newton_obj(&fun_obj, primal_solver_tol);
newton_obj.set_print_string(liblinear_print_string);
newton_obj.newton(w);
}
break;
}
default:
fprintf(stderr, "ERROR: unknown solver_type\n");
break;
}
delete[] C;
}
// Calculate the initial C for parameter selection
static double calc_start_C(const problem *prob, const parameter *param)
{
int i;
src/liblinear/linear.cpp view on Meta::CPAN
// calculate weighted C
double *weighted_C = Malloc(double, nr_class);
for(i=0;i<nr_class;i++)
weighted_C[i] = param->C;
for(i=0;i<param->nr_weight;i++)
{
for(j=0;j<nr_class;j++)
if(param->weight_label[i] == label[j])
break;
if(j == nr_class)
fprintf(stderr,"WARNING: class label %d specified in weight is not found\n", param->weight_label[i]);
else
weighted_C[j] *= param->weight[i];
}
// constructing the subproblem
feature_node **x = Malloc(feature_node *,l);
for(i=0;i<l;i++)
x[i] = prob->x[perm[i]];
int k;
src/liblinear/linear.cpp view on Meta::CPAN
void cross_validation(const problem *prob, const parameter *param, int nr_fold, double *target)
{
int i;
int *fold_start;
int l = prob->l;
int *perm = Malloc(int,l);
if (nr_fold > l)
{
nr_fold = l;
fprintf(stderr,"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\n");
}
fold_start = Malloc(int,nr_fold+1);
for(i=0;i<l;i++) perm[i]=i;
for(i=0;i<l;i++)
{
int j = i+rand()%(l-i);
swap(perm[i],perm[j]);
}
for(i=0;i<=nr_fold;i++)
fold_start[i]=i*l/nr_fold;
src/liblinear/linear.cpp view on Meta::CPAN
int i;
int *fold_start;
int l = prob->l;
int *perm = Malloc(int, l);
struct problem *subprob = Malloc(problem,nr_fold);
if (nr_fold > l)
{
nr_fold = l;
fprintf(stderr,"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\n");
}
fold_start = Malloc(int,nr_fold+1);
for(i=0;i<l;i++) perm[i]=i;
for(i=0;i<l;i++)
{
int j = i+rand()%(l-i);
swap(perm[i],perm[j]);
}
for(i=0;i<=nr_fold;i++)
fold_start[i]=i*l/nr_fold;
src/liblinear/linear.cpp view on Meta::CPAN
// FSCANF helps to handle fscanf failures.
// Its do-while block avoids the ambiguity when
// if (...)
// FSCANF();
// is used
//
#define FSCANF(_stream, _format, _var)do\
{\
if (fscanf(_stream, _format, _var) != 1)\
{\
fprintf(stderr, "ERROR: fscanf failed to read the model\n");\
EXIT_LOAD_MODEL()\
}\
}while(0)
// EXIT_LOAD_MODEL should NOT end with a semicolon.
#define EXIT_LOAD_MODEL()\
{\
setlocale(LC_ALL, old_locale);\
free(model_->label);\
free(model_);\
free(old_locale);\
src/liblinear/linear.cpp view on Meta::CPAN
for(i=0;solver_type_table[i];i++)
{
if(strcmp(solver_type_table[i],cmd)==0)
{
param.solver_type=i;
break;
}
}
if(solver_type_table[i] == NULL)
{
fprintf(stderr,"unknown solver type.\n");
EXIT_LOAD_MODEL()
}
}
else if(strcmp(cmd,"nr_class")==0)
{
FSCANF(fp,"%d",&nr_class);
model_->nr_class=nr_class;
}
else if(strcmp(cmd,"nr_feature")==0)
{
src/liblinear/linear.cpp view on Meta::CPAN
}
else if(strcmp(cmd,"label")==0)
{
int nr_class = model_->nr_class;
model_->label = Malloc(int,nr_class);
for(int i=0;i<nr_class;i++)
FSCANF(fp,"%d",&model_->label[i]);
}
else
{
fprintf(stderr,"unknown text in model file: [%s]\n",cmd);
EXIT_LOAD_MODEL()
}
}
nr_feature=model_->nr_feature;
if(model_->bias>=0)
n=nr_feature+1;
else
n=nr_feature;
int w_size = n;
src/liblinear/linear.cpp view on Meta::CPAN
{
if(feat_idx > model_->nr_feature)
return 0;
return get_w_value(model_, feat_idx-1, label_idx);
}
double get_decfun_bias(const struct model *model_, int label_idx)
{
if(check_oneclass_model(model_))
{
fprintf(stderr, "ERROR: get_decfun_bias can not be called for a one-class SVM model\n");
return 0;
}
int bias_idx = model_->nr_feature;
double bias = model_->bias;
if(bias <= 0)
return 0;
else
return bias*get_w_value(model_, bias_idx, label_idx);
}
double get_decfun_rho(const struct model *model_)
{
if(check_oneclass_model(model_))
return model_->rho;
else
{
fprintf(stderr, "ERROR: get_decfun_rho can be called only for a one-class SVM model\n");
return 0;
}
}
void free_model_content(struct model *model_ptr)
{
free(model_ptr->w);
model_ptr->w = NULL;
free(model_ptr->label);
model_ptr->label = NULL;
( run in 0.903 second using v1.01-cache-2.11-cpan-49f99fa48dc )