本文整理汇总了C++中CDotFeatures::get_feature_iterator方法的典型用法代码示例。如果您正苦于以下问题:C++ CDotFeatures::get_feature_iterator方法的具体用法?C++ CDotFeatures::get_feature_iterator怎么用?C++ CDotFeatures::get_feature_iterator使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CDotFeatures
的用法示例。
在下文中一共展示了CDotFeatures::get_feature_iterator方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
void CLibLinear::solve_l1r_lr(
const problem *prob_col, double eps,
double Cp, double Cn)
{
int l = prob_col->l;
int w_size = prob_col->n;
int j, s, iter = 0;
int active_size = w_size;
int max_num_linesearch = 20;
double x_min = 0;
double sigma = 0.01;
double d, G, H;
double Gmax_old = CMath::INFTY;
double Gmax_new;
double Gmax_init=0;
double sum1, appxcond1;
double sum2, appxcond2;
double cond;
int *index = SG_MALLOC(int, w_size);
int32_t *y = SG_MALLOC(int32_t, l);
double *exp_wTx = SG_MALLOC(double, l);
double *exp_wTx_new = SG_MALLOC(double, l);
double *xj_max = SG_MALLOC(double, w_size);
double *C_sum = SG_MALLOC(double, w_size);
double *xjneg_sum = SG_MALLOC(double, w_size);
double *xjpos_sum = SG_MALLOC(double, w_size);
CDotFeatures* x = prob_col->x;
void* iterator;
int ind;
double val;
double C[3] = {Cn,0,Cp};
int n = prob_col->n;
if (prob_col->use_bias)
n--;
for(j=0; j<l; j++)
{
exp_wTx[j] = 1;
if(prob_col->y[j] > 0)
y[j] = 1;
else
y[j] = -1;
}
for(j=0; j<w_size; j++)
{
w.vector[j] = 0;
index[j] = j;
xj_max[j] = 0;
C_sum[j] = 0;
xjneg_sum[j] = 0;
xjpos_sum[j] = 0;
if (use_bias && j==n)
{
for (ind=0; ind<l; ind++)
{
x_min = CMath::min(x_min, 1.0);
xj_max[j] = CMath::max(xj_max[j], 1.0);
C_sum[j] += C[GETI(ind)];
if(y[ind] == -1)
xjneg_sum[j] += C[GETI(ind)];
else
xjpos_sum[j] += C[GETI(ind)];
}
}
else
{
iterator=x->get_feature_iterator(j);
while (x->get_next_feature(ind, val, iterator))
{
x_min = CMath::min(x_min, val);
xj_max[j] = CMath::max(xj_max[j], val);
C_sum[j] += C[GETI(ind)];
if(y[ind] == -1)
xjneg_sum[j] += C[GETI(ind)]*val;
else
xjpos_sum[j] += C[GETI(ind)]*val;
}
x->free_feature_iterator(iterator);
}
}
CTime start_time;
while (iter < max_iterations && !CSignal::cancel_computations())
{
if (m_max_train_time > 0 && start_time.cur_time_diff() > m_max_train_time)
break;
Gmax_new = 0;
for(j=0; j<active_size; j++)
{
int i = j+rand()%(active_size-j);
CMath::swap(index[i], index[j]);
}
//.........这里部分代码省略.........