Algorithm-LibLinear
view release on metacpan or search on metacpan
src/liblinear.xs view on Meta::CPAN
int max_feature_index = 0;
for (int i = 0; i < num_features; ++i) {
SV *feature = *av_fetch(features, i, 0);
if (!(SvROK(feature) && SvTYPE(SvRV(feature)) == SVt_PVHV)) {
Perl_croak(aTHX_ "Not a HASH reference.");
}
HV *feature_hash = (HV *)SvRV(feature);
hv_iterinit(feature_hash);
HE *nonzero_element;
while ((nonzero_element = hv_iternext(feature_hash))) {
I32 index_length;
int index = atoi(hv_iterkey(nonzero_element, &index_length));
if (max_feature_index < index) { max_feature_index = index; }
}
}
return max_feature_index;
}
void
free_parameter(pTHX_ struct parameter *parameter_) {
Safefree(parameter_->weight_label);
Safefree(parameter_->weight);
src/liblinear.xs view on Meta::CPAN
struct feature_node *
hv2feature(
pTHX_ HV *feature_hash, int bias_index = 0, double bias = -1.0) {
bool has_bias = bias >= 0;
int feature_vector_size =
hv_iterinit(feature_hash) + (has_bias ? 1 : 0) + 1;
struct feature_node *feature_vector;
Newx(feature_vector, feature_vector_size, struct feature_node);
char *index;
I32 index_length;
SV *value;
struct feature_node *curr = feature_vector;
while ((value = hv_iternextsv(feature_hash, &index, &index_length))) {
curr->index = atoi(index);
curr->value = SvNV(value);
++curr;
}
if (has_bias) {
curr->index = bias_index;
curr->value = bias;
++curr;
}
// Sentinel. LIBLINEAR doesn't care about its value.
src/liblinear/linear.cpp view on Meta::CPAN
}
for(i=0; i<n; i++)
x_space[col_ptr[i]].index = -1;
*x_space_ret = x_space;
delete [] col_ptr;
}
// label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data
// perm, length l, must be allocated before calling this subroutine
static void group_classes(const problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm)
{
int l = prob->l;
int max_nr_class = 16;
int nr_class = 0;
int *label = Malloc(int,max_nr_class);
int *count = Malloc(int,max_nr_class);
int *data_label = Malloc(int,l);
int i;
( run in 0.261 second using v1.01-cache-2.11-cpan-65fba6d93b7 )