SHOGUN  3.2.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
16 
17 using namespace shogun;
18 
21 {
22 }
23 
25  : CLinearLatentMachine(model, C)
26 {
27 }
28 
30 {
31 }
32 
34 {
35  if (!m_model)
36  SG_ERROR("LatentModel is not set!\n")
37 
38  if (m_model->get_num_vectors() < 1)
39  return NULL;
40 
41  index_t num_examples = m_model->get_num_vectors();
42  CLatentLabels* hs = new CLatentLabels(num_examples);
43  CBinaryLabels* ys = new CBinaryLabels(num_examples);
44  hs->set_labels(ys);
45  m_model->set_labels(hs);
46 
47  for (index_t i = 0; i < num_examples; ++i)
48  {
49  /* find h for the example */
51  hs->add_latent_label(h);
52  }
53 
54  /* compute the y labels */
56  x->dense_dot_range(ys->get_labels().vector, 0, num_examples, NULL, w.vector, w.vlen, 0.0);
57 
58  return hs;
59 }
60 
62 {
64  CDotFeatures* feats = (m_model->get_caching() ?
67  CSVMOcas svm(m_C, feats, ys);
68  svm.set_epsilon(cooling_eps);
69  svm.train();
70  SG_UNREF(ys);
71  SG_UNREF(feats);
72 
73  /* copy the resulting w */
74  SGVector<float64_t> cur_w = svm.get_w();
75  memcpy(w.vector, cur_w.vector, cur_w.vlen*sizeof(float64_t));
76 
77  return svm.compute_primal_objective();
78 }
79 

SHOGUN Machine Learning Toolbox - Documentation