SHOGUN  v3.2.0
LatentSVM.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 2012 Viktor Gal
8  * Copyright (C) 2012 Viktor Gal
9  */
10 
11 #include <typeinfo>
12 
15 
16 using namespace shogun;
17 
20 {
21 }
22 
24  : CLinearLatentMachine(model, C)
25 {
26 }
27 
29 {
30 }
31 
33 {
34  if (!m_model)
35  SG_ERROR("LatentModel is not set!\n")
36 
37  if (m_model->get_num_vectors() < 1)
38  return NULL;
39 
40  index_t num_examples = m_model->get_num_vectors();
41  CLatentLabels* hs = new CLatentLabels(num_examples);
42  CBinaryLabels* ys = new CBinaryLabels(num_examples);
43  hs->set_labels(ys);
44  m_model->set_labels(hs);
45 
46  for (index_t i = 0; i < num_examples; ++i)
47  {
48  /* find h for the example */
50  hs->add_latent_label(h);
51  }
52 
53  /* compute the y labels */
55  x->dense_dot_range(ys->get_labels().vector, 0, num_examples, NULL, w.vector, w.vlen, 0.0);
56 
57  return hs;
58 }
59 
61 {
63  CDotFeatures* feats = (m_model->get_caching() ?
66  CSVMOcas svm(m_C, feats, ys);
67  svm.set_epsilon(cooling_eps);
68  svm.train();
69  SG_UNREF(ys);
70  SG_UNREF(feats);
71 
72  /* copy the resulting w */
73  SGVector<float64_t> cur_w = svm.get_w();
74  memcpy(w.vector, cur_w.vector, cur_w.vlen*sizeof(float64_t));
75 
76  return svm.compute_primal_objective();
77 }
78 
Abstract class CLatentModel It represents the application specific model and contains most of the app...
Definition: LatentModel.h:31
virtual void dense_dot_range(float64_t *output, int32_t start, int32_t stop, float64_t *alphas, float64_t *vec, int32_t dim, float64_t b)
Definition: DotFeatures.cpp:67
virtual ~CLatentSVM()
Definition: LatentSVM.cpp:28
int32_t index_t
Definition: common.h:60
The class Labels models labels, i.e. class assignments of objects.
Definition: Labels.h:35
void set_epsilon(float64_t eps)
Definition: SVMOcas.h:89
#define SG_UNREF(x)
Definition: SGRefObject.h:35
virtual float64_t do_inner_loop(float64_t cooling_eps)
Definition: LatentSVM.cpp:60
virtual float64_t compute_primal_objective() const
Definition: SVMOcas.cpp:361
#define SG_ERROR(...)
Definition: SGIO.h:131
bool get_caching() const
Definition: LatentModel.h:122
virtual CLatentLabels * apply_latent()
Definition: LatentSVM.cpp:32
Features that support dot products among other operations.
Definition: DotFeatures.h:41
void set_labels(CLatentLabels *labs)
Definition: LatentModel.cpp:48
SGVector< float64_t > get_labels()
Definition: DenseLabels.cpp:82
dummy data holder
Definition: Data.h:23
void set_labels(CLabels *labels)
double float64_t
Definition: common.h:48
CLatentLabels * get_labels() const
Definition: LatentModel.cpp:55
virtual CData * infer_latent_variable(const SGVector< float64_t > &w, index_t idx)=0
SGVector< float64_t > w
virtual CDotFeatures * get_psi_feature_vectors()=0
all of classes and functions are contained in the shogun namespace
Definition: class_list.h:16
abstract implementaion of Linear Machine with latent variable This is the base implementation of all ...
virtual SGVector< float64_t > get_w() const
CLabels * get_labels() const
virtual bool train(CFeatures *data=NULL)
Definition: Machine.cpp:49
Binary Labels for binary classification.
Definition: BinaryLabels.h:36
class SVMOcas
Definition: SVMOcas.h:32
void add_latent_label(CData *label)
CDotFeatures * get_cached_psi_features() const
abstract class for latent labels As latent labels always depends on the given application, this class only defines the API that the user has to implement for latent labels.
Definition: LatentLabels.h:24
virtual int32_t get_num_vectors() const
Definition: LatentModel.cpp:43
index_t vlen
Definition: SGVector.h:706

SHOGUN Machine Learning Toolbox - Documentation