SHOGUN  4.1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
SplittingStrategy.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) 2011-2012 Heiko Strathmann
8  * Copyright (C) 2011 Berlin Institute of Technology and Max-Planck-Society
9  */
10 
12 #include <shogun/labels/Labels.h>
13 
14 using namespace shogun;
15 
17 {
18  init();
19 }
20 
21 CSplittingStrategy::CSplittingStrategy(CLabels* labels, int32_t num_subsets)
22 {
23  init();
24 
25  m_num_subsets=num_subsets;
26 
27  /* "assert" that num_subsets is smaller than num labels */
28  if (labels->get_num_labels()<num_subsets)
29  {
30  SG_ERROR("Only %d labels for %d subsets!\n", labels->get_num_labels(),
31  num_subsets);
32  }
33 
34  m_labels=labels;
36 
37  reset_subsets();
38 }
39 
41 {
42  if (m_subset_indices)
44 
47 
48  /* construct all arrays */
49  for (index_t i=0; i<m_num_subsets; ++i)
51 
52  m_is_filled=false;
53 }
54 
55 void CSplittingStrategy::init()
56 {
57  m_labels=NULL;
58  m_subset_indices=NULL;
60  m_is_filled=false;
61  m_num_subsets=0;
62 
63  m_parameters->add((CSGObject**)&m_labels, "labels", "Labels for subsets");
64  m_parameters->add((CSGObject**)&m_subset_indices, "subset_indices",
65  "Set of sets of subset indices");
66  m_parameters->add(&m_is_filled, "is_filled", "Whether ther are index sets");
67  m_parameters->add(&m_num_subsets, "num_subsets", "Number of index sets");
68 }
69 
71 {
74 }
75 
77 {
78  if (!m_is_filled)
79  {
80  SG_ERROR("Call %s::build_subsets() before accessing them! If this error"
81  " stays, its an implementation error of %s::build_subsets()\n",
82  get_name(), get_name());
83  }
84 
85  /* construct SGVector copy from index vector */
88 
89  index_t num_elements=to_copy->get_num_elements();
90  SGVector<index_t> result(num_elements, true);
91 
92  /* copy data */
93  memcpy(result.vector, to_copy->get_array(), sizeof(index_t)*num_elements);
94 
95  SG_UNREF(to_copy);
96 
97  return result;
98 }
99 
101 {
102  if (!m_is_filled)
103  {
104  SG_ERROR("Call %s::build_subsets() before accessing them! If this error"
105  " stays, its an implementation error of %s::build_subsets()\n",
106  get_name(), get_name());
107  }
108 
110  m_subset_indices->get_element_safe(subset_idx);
111 
112  SGVector<index_t> result(
113  m_labels->get_num_labels()-to_invert->get_num_elements(), true);
114 
115  index_t index=0;
116  for (index_t i=0; i<m_labels->get_num_labels(); ++i)
117  {
118  /* add i to inverse indices if it is not in the to be inverted set */
119  if (to_invert->find_element(i)==-1)
120  result.vector[index++]=i;
121  }
122 
123  SG_UNREF(to_invert);
124 
125  return result;
126 }
127 
129 {
131 }
virtual const char * get_name() const =0
int32_t index_t
Definition: common.h:62
The class Labels models labels, i.e. class assignments of objects.
Definition: Labels.h:43
virtual int32_t get_num_labels() const =0
T * get_array() const
Definition: DynamicArray.h:408
#define SG_ERROR(...)
Definition: SGIO.h:129
Parameter * m_parameters
Definition: SGObject.h:378
Template Dynamic array class that creates an array that can be used like a list or an array...
Definition: DynArray.h:22
#define SG_REF(x)
Definition: SGObject.h:51
void add(bool *param, const char *name, const char *description="")
Definition: Parameter.cpp:37
Class SGObject is the base class of all shogun objects.
Definition: SGObject.h:112
SGVector< index_t > generate_subset_inverse(index_t subset_idx)
Dynamic array class for CSGObject pointers that creates an array that can be used like a list or an a...
#define SG_UNREF(x)
Definition: SGObject.h:52
all of classes and functions are contained in the shogun namespace
Definition: class_list.h:18
CSGObject * get_element_safe(int32_t index) const
CDynamicObjectArray * m_subset_indices
SGVector< index_t > generate_subset_indices(index_t subset_idx)
int32_t find_element(T e)
Definition: DynamicArray.h:364
int32_t get_num_elements() const
Definition: DynamicArray.h:200
bool append_element(CSGObject *e)

SHOGUN Machine Learning Toolbox - Documentation