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
CLatentLabels * get_labels() const
Definition: LatentModel.cpp:55
virtual float64_t do_inner_loop(float64_t cooling_eps)
Definition: LatentSVM.cpp:60
#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
virtual float64_t compute_primal_objective() const
Definition: SVMOcas.cpp:361
void set_labels(CLatentLabels *labs)
Definition: LatentModel.cpp:48
SGVector< float64_t > get_labels()
Definition: DenseLabels.cpp:82
CLabels * get_labels() const
dummy data holder
Definition: Data.h:23
void set_labels(CLabels *labels)
double float64_t
Definition: common.h:48
virtual CData * infer_latent_variable(const SGVector< float64_t > &w, index_t idx)=0
SGVector< float64_t > w
virtual SGVector< float64_t > get_w() const
CDotFeatures * get_cached_psi_features() const
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 bool train(CFeatures *data=NULL)
Definition: Machine.cpp:49
Binary Labels for binary classification.
Definition: BinaryLabels.h:36
class SVMOcas
Definition: SVMOcas.h:32
virtual int32_t get_num_vectors() const
Definition: LatentModel.cpp:43
void add_latent_label(CData *label)
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
index_t vlen
Definition: SGVector.h:706

SHOGUN Machine Learning Toolbox - Documentation