58 #define STDEXT_NAMESPACE __gnu_cxx
59 #define std_hash_map std::map
60 #define std_hash_set std::set
70 #ifndef DOXYGEN_SHOULD_SKIP_THIS
71 struct larank_kcache_s;
72 typedef struct larank_kcache_s larank_kcache_t;
73 struct larank_kcache_s
76 larank_kcache_t *prevbuddy;
77 larank_kcache_t *nextbuddy;
101 LaRankOutput () : beta(NULL), g(NULL), kernel(NULL), l(0)
104 virtual ~LaRankOutput ()
110 void initialize (CKernel* kfunc, int64_t cache);
119 float64_t computeGradient (int32_t xi_id, int32_t yi, int32_t ythis);
127 void set_kernel_buddy (larank_kcache_t * bud);
135 inline larank_kcache_t *getKernel ()
const
140 inline int32_t get_l ()
const
164 bool isSupportVector (int32_t x_id)
const;
174 larank_kcache_t *kernel;
184 LaRankPattern (int32_t x_index, int32_t label)
185 : x_id (x_index), y (label) {}
210 ~LaRankPatterns () {}
212 void insert (
const LaRankPattern & pattern)
214 if (!isPattern (pattern.x_id))
218 std_hash_set < uint32_t >::iterator it = freeidx.begin ();
219 patterns[*it] = pattern;
220 x_id2rank[pattern.x_id] = *it;
225 patterns.push_back (pattern);
226 x_id2rank[pattern.x_id] = patterns.size () - 1;
231 int32_t rank = getPatternRank (pattern.x_id);
232 patterns[rank] = pattern;
236 void remove (uint32_t i)
238 x_id2rank[patterns[i].x_id] = 0;
239 patterns[i].clear ();
245 return patterns.size () == freeidx.size ();
248 uint32_t size ()
const
250 return patterns.size () - freeidx.size ();
253 LaRankPattern & sample ()
258 uint32_t r =
CMath::random(uint32_t(0), uint32_t(patterns.size ()-1));
259 if (patterns[r].exists ())
265 uint32_t getPatternRank (int32_t x_id)
267 return x_id2rank[x_id];
270 bool isPattern (int32_t x_id)
272 return x_id2rank[x_id] != 0;
275 LaRankPattern & getPattern (int32_t x_id)
277 uint32_t rank = x_id2rank[x_id];
278 return patterns[rank];
281 uint32_t maxcount ()
const
283 return patterns.size ();
286 LaRankPattern & operator [] (uint32_t i)
291 const LaRankPattern & operator [] (uint32_t i)
const
297 std_hash_set < uint32_t >freeidx;
298 std::vector < LaRankPattern > patterns;
299 std_hash_map < int32_t, uint32_t >x_id2rank;
303 #endif // DOXYGEN_SHOULD_SKIP_THIS
330 virtual int32_t
add (int32_t x_id, int32_t yi);
336 virtual int32_t
predict (int32_t x_id);
368 virtual const char*
get_name()
const {
return "LaRank"; }
396 typedef std_hash_map < int32_t, LaRankOutput > outputhash_t;
399 outputhash_t outputs;
401 LaRankOutput *getOutput (int32_t index);
404 LaRankPatterns patterns;
407 int32_t nb_seen_examples;
423 struct outputgradient_t
425 outputgradient_t (int32_t result_output,
float64_t result_gradient)
426 : output (result_output), gradient (result_gradient) {}
428 : output (0), gradient (0) {}
433 bool operator < (
const outputgradient_t & og)
const
435 return gradient > og.gradient;
447 struct process_return_t
449 process_return_t (
float64_t dual, int32_t yprediction)
450 : dual_increase (dual), ypred (yprediction) {}
451 process_return_t () {}
457 process_return_t process (
const LaRankPattern & pattern, process_type ptype);
virtual const char * get_name() const
bool batch_mode
whether to use online learning or batch training
The class Labels models labels, i.e. class assignments of objects.
bool train_machine(CFeatures *data)
void set_batch_mode(bool enable)
void(* update)(float *foo, float bar)
virtual int32_t add(int32_t x_id, int32_t yi)
uint32_t class_count() const
class count
virtual EMachineType get_classifier_type()
virtual float64_t computeGap()
virtual uint32_t getNumOutputs() const
The class Features is the base class of all feature objects.
virtual int32_t predict(int32_t x_id)
the LaRank multiclass SVM machine
void set_tau(float64_t t)
std_hash_set< int32_t > classes
classes
int32_t step
progess output