From 6b0402569f2c2ae3c80c30b3013aecb93f5d250c Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:06:22 +0200 Subject: [PATCH 01/12] added comment --- src/shogun/features/SimpleFeatures.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/shogun/features/SimpleFeatures.h b/src/shogun/features/SimpleFeatures.h index 51554290640..81736ad4128 100644 --- a/src/shogun/features/SimpleFeatures.h +++ b/src/shogun/features/SimpleFeatures.h @@ -969,6 +969,8 @@ template class CSimpleFeatures: public CDotFeatures /** Creates a new CFeatures instance containing copies of the elements * which are specified by the provided indices. * + * possible with subset + * * @param indices indices of feature elements to copy * @return new CFeatures instance with copies of feature data */ From 56586f13215e0308409541cd42797c89df0a0196 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:06:39 +0200 Subject: [PATCH 02/12] added copy_subset implementation --- src/shogun/features/StringFeatures.h | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/shogun/features/StringFeatures.h b/src/shogun/features/StringFeatures.h index fdf57c9b0e6..c699a07c642 100644 --- a/src/shogun/features/StringFeatures.h +++ b/src/shogun/features/StringFeatures.h @@ -2112,6 +2112,36 @@ template class CStringFeatures : public CFeatures } */ + /** Creates a new CFeatures instance containing copies of the elements + * which are specified by the provided indices. + * + * possible with subset + * + * @param indices indices of feature elements to copy + * @return new CFeatures instance with copies of feature data + */ + virtual CFeatures* copy_subset(SGVector indices) const + { + /* string list to create new CStringFeatures from */ + SGStringList copy(indices.vlen, max_string_length); + + /* copy all features */ + for (index_t i=0; idetermine_maximum_string_length(); + + return result; + } + /** @return object name */ inline virtual const char* get_name() const { return "StringFeatures"; } From 60ba2b2512df06bd272d5703faff02917ae22ae4 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:06:55 +0200 Subject: [PATCH 03/12] added constructors for SGStringList and SGString --- src/shogun/lib/DataType.h | 59 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-) diff --git a/src/shogun/lib/DataType.h b/src/shogun/lib/DataType.h index 3c2729b1de2..5713e49a17b 100644 --- a/src/shogun/lib/DataType.h +++ b/src/shogun/lib/DataType.h @@ -142,23 +142,78 @@ template class SGNDArray template struct SGString { +public: + /** default constructor */ + SGString() : string(NULL), length(0), do_free(false) { } + + /** constructor for setting params */ + SGString(T* s, index_t l, bool free_string=false) + : string(s), length(l), do_free(free_string) { } + + /** constructor for setting params from a SGVector*/ + SGString(SGVector v) + : string(v.vector), length(v.vlen), do_free(v.do_free) { } + + /** constructor to create new matrix in memory */ + SGString(index_t len, bool free_string=false) : + length(len), do_free(free_string) + { + string=new T[len]; + } + + /** copy constructor */ + SGString(const SGString &orig) + : string(orig.string), length(orig.length), do_free(orig.do_free) { } + +public: /** string */ T* string; /** length of string */ index_t length; + /** whether string needs to be freed */ + bool do_free; }; /** template class SGStringList */ template struct SGStringList { +public: + /** default constructor */ + SGStringList() : strings(NULL), num_strings(0), max_string_length(0), + do_free(false) { } + + /** constructor for setting params */ + SGStringList(T* s, index_t num_s, index_t max_length, bool free_strings=false) + : strings(s), num_strings(num_s), max_string_length(max_length), + do_free(free_strings) { } + + /** constructor to create new matrix in memory */ + SGStringList(index_t num_s, index_t max_length, bool free_strings=false) + : num_strings(num_s), max_string_length(max_length), + do_free(free_strings) + { + strings=new SGString[num_strings]; + } + + /** copy constructor */ + SGStringList(const SGStringList &orig) + : num_strings(orig.num_strings), + max_string_length(orig.max_string_length), strings(orig.strings), + do_free(orig.do_free) { } + + +public: /* number of strings */ - int32_t num_strings; + index_t num_strings; /** length of longest string */ - int32_t max_string_length; + index_t max_string_length; /// this contains the array of features. SGString* strings; + + /** whether vector needs to be freed */ + bool do_free; }; /** template class SGSparseVectorEntry */ From ce1ccb7c9ff291e947d09d3babc49b8dd29e520f Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:12:05 +0200 Subject: [PATCH 04/12] print method now handles different data types --- src/shogun/modelselection/ParameterCombination.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/shogun/modelselection/ParameterCombination.cpp b/src/shogun/modelselection/ParameterCombination.cpp index 83cc74a4e1e..389146cab9f 100644 --- a/src/shogun/modelselection/ParameterCombination.cpp +++ b/src/shogun/modelselection/ParameterCombination.cpp @@ -76,9 +76,19 @@ void CParameterCombination::print_tree(int prefix_num) const } else { - SG_SPRINT("\"%s\"=%f ", m_param->get_parameter(i)->m_name, - *((float64_t*)m_param->get_parameter(i)->m_parameter)); + SG_SPRINT("\"%s\"=", m_param->get_parameter(i)->m_name); + void* param=m_param->get_parameter(i)->m_parameter; + + if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_FLOAT64) + SG_SPRINT("%f ", *((float64_t*)param)); + else if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_INT32) + SG_SPRINT("%i ", *((int32_t*)param)); + else if (m_param->get_parameter(i)->m_datatype.m_ptype==PT_BOOL) + SG_SPRINT("%s ", *((bool*)param ? "true" : "false")); + else + SG_NOTIMPLEMENTED; } + } } From 1b3ca5a000e3686b6b7a1173bb504166cd2e3d36 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:13:19 +0200 Subject: [PATCH 05/12] work towards handling of multiple data types --- .../ModelSelectionParameters.cpp | 149 +++++++++++++----- .../modelselection/ModelSelectionParameters.h | 102 +++++++++--- 2 files changed, 196 insertions(+), 55 deletions(-) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index a405b0c8468..3f52b219d1b 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -44,19 +44,22 @@ void CModelSelectionParameters::init() m_sgobject=NULL; m_child_nodes=new CDynamicObjectArray(); SG_REF(m_child_nodes); + m_value_type=MSPT_NONE; m_parameters->add((char*)m_node_name, "node_name", "Name of node"); m_parameters->add((CSGObject**)&m_sgobject, "sgobject", "CSGObject of this node"); m_parameters->add((CSGObject**)m_child_nodes, "child nodes", "children of this node"); +// m_parameters->add(&m_value_type, "value_type", +// "type of the values of this node"); } CModelSelectionParameters::~CModelSelectionParameters() { SG_UNREF(m_child_nodes); SG_UNREF(m_sgobject); - SG_FREE(m_values.vector); + delete_values(); } void CModelSelectionParameters::append_child(CModelSelectionParameters* child) @@ -89,15 +92,22 @@ void CModelSelectionParameters::append_child(CModelSelectionParameters* child) m_child_nodes->append_element(child); } -void CModelSelectionParameters::set_values(SGVector values) +void CModelSelectionParameters::set_values(SGVector values) { /* possibly delete old range values */ - SG_FREE(m_values.vector); + delete_values(); m_values=values; } void CModelSelectionParameters::build_values(float64_t min, float64_t max, ERangeType type, float64_t step, float64_t type_base) +{ + build_values(MSPT_FLOAT, (void*)&min, (void*)&max, type, (void*)&step, + (void*)&type_base); +} + +void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, + void* max, ERangeType type, void* step, void* type_base) { if (m_sgobject || has_children()) { @@ -106,40 +116,38 @@ void CModelSelectionParameters::build_values(float64_t min, float64_t max, } /* possibly delete old range values */ - SG_FREE(m_values.vector); + delete_values(); - if (max values=create_range_array( + *((float64_t*)min), + *((float64_t*)max), + type, + *((float64_t*)step), + *((float64_t*)type_base)); + + m_values.vector=(void*)values.vector; + m_values.vlen=values.vlen; + } + else if (value_type==MSPT_INT) + { + SG_NOTIMPLEMENTED; + } + else if (value_type==MSPT_BOOL) + { + SG_NOTIMPLEMENTED; + } + else if (value_type==MSPT_BOOL) + { + SG_ERROR("Value node has no type!\n"); + } + else + { + SG_ERROR("Unknown type for model selection parameter!\n"); } } @@ -157,7 +165,25 @@ CDynamicObjectArray* CModelSelectionParameters::get_combi { /* create tree with only one parameter element */ Parameter* p=new Parameter(); - p->add(&m_values.vector[i], m_node_name); + + switch (m_value_type) + { + case MSPT_FLOAT: + p->add(&((float64_t*)m_values.vector)[i], m_node_name); + break; + case MSPT_INT: + SG_NOTIMPLEMENTED; + break; + case MSPT_BOOL: + SG_NOTIMPLEMENTED; + break; + case MSPT_NONE: + SG_ERROR("Value node has no type!\n"); + break; + default: + SG_ERROR("Unknown type for model selection parameter!\n"); + break; + } result->append_element(new CParameterCombination(p)); } @@ -379,11 +405,60 @@ void CModelSelectionParameters::print_tree(int prefix_num) } else { - SG_PRINT("%s%s with values: ", prefix, m_node_name); - CMath::display_vector(m_values.vector, m_values.vlen); + + if (m_values.vector) + { + /* value node */ + SG_PRINT("%s%s with values: ", prefix, m_node_name); + + switch (m_value_type) + { + case MSPT_FLOAT: + CMath::display_vector((float64_t*)m_values.vector, m_values.vlen); + break; + case MSPT_INT: + SG_NOTIMPLEMENTED; + break; + case MSPT_BOOL: + SG_NOTIMPLEMENTED; + break; + case MSPT_NONE: + SG_ERROR("Value node has no type!\n"); + break; + default: + SG_ERROR("Unknown type for model selection parameter!\n"); + break; + } + } + else + SG_PRINT("root\n"); } } SG_FREE(prefix); } +void CModelSelectionParameters::delete_values() +{ + if (m_values.vector) + { + switch (m_value_type) + { + case MSPT_FLOAT: + delete[] (float64_t*) m_values.vector; + break; + case MSPT_INT: + SG_NOTIMPLEMENTED; + break; + case MSPT_BOOL: + SG_NOTIMPLEMENTED; + break; + case MSPT_NONE: + SG_ERROR("Value node has no type!\n"); + break; + default: + SG_ERROR("Unknown type for model selection parameter!\n"); + break; + } + } +} diff --git a/src/shogun/modelselection/ModelSelectionParameters.h b/src/shogun/modelselection/ModelSelectionParameters.h index b290a5e5438..de72558246b 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.h +++ b/src/shogun/modelselection/ModelSelectionParameters.h @@ -24,6 +24,22 @@ enum ERangeType R_LINEAR, R_EXP, R_LOG }; +/** value type of a model selection parameter node */ +enum EMSParamType +{ + /** no type */ + MSPT_NONE=0, + + /* float64_t */ + MSPT_FLOAT, + + /* int32_t */ + MSPT_INT, + + /* bool */ + MSPT_BOOL +}; + /** * @brief Class to select parameters and their ranges for model selection. The * structure is organized as a tree with different kinds of nodes, depending on @@ -35,8 +51,8 @@ enum ERangeType * parameters of the CSGObject. CSGObjects are SG_REF'ed/SG_UNREF'ed * * -value node: a node with a (parameter) name and an array of values for that - * parameter. These ranges may be set using set_range(). This node is always a - * leaf + * parameter. These ranges may be set using build_values(). + * This node is always a leaf. * * After a (legal!) tree is constructed with the append_child method, all * possible combinations that are implied by this tree may be extracted with the @@ -71,27 +87,13 @@ class CModelSelectionParameters: public CSGObject */ void append_child(CModelSelectionParameters* child); - /** setter for the range of this node. Only possible if this is a value - * node. A minimum and a maximum is specified, step interval, and an - * ERangeType (s. above) of the range, which is used to fill an array with - * concrete values. For some range types, a base is required - * - * @param min minimum of desired range. Requires min values); + void set_values(SGVector values); /** SG_PRINT's the tree of which this node is the base * @@ -109,6 +111,10 @@ class CModelSelectionParameters: public CSGObject */ CDynamicObjectArray* get_combinations(); + /** float64_t wrapper for build_values() */ + void build_values(float64_t min, float64_t max, ERangeType type, + float64_t step=1, float64_t type_base=2); + /** @return name of the SGSerializable */ inline virtual const char* get_name() const { @@ -118,6 +124,13 @@ class CModelSelectionParameters: public CSGObject private: void init(); + /** deletes the values vector with respect to its type */ + void delete_values(); + + /** generic wrapper for create_range_array */ + void build_values(EMSParamType param_type, void* min, void* max, + ERangeType type, void* step, void* type_base); + protected: /** checks if this node has children * @@ -131,9 +144,62 @@ class CModelSelectionParameters: public CSGObject private: CSGObject* m_sgobject; const char* m_node_name; - SGVector m_values; + SGVector m_values; CDynamicObjectArray* m_child_nodes; + EMSParamType m_value_type; }; +/** Creates an array of values specified by the parameters. + * A minimum and a maximum is specified, step interval, and an + * ERangeType (s. above) of the range, which is used to fill an array with + * concrete values. For some range types, a base is required. + * All values are given by void pointers to them (type conversion is done + * via m_value_type variable). + * + * @param min minimum of desired range. Requires min SGVector create_range_array(T min, T max, + ERangeType type, T step, T type_base) +{ + if (max result(num_values); + + /* fill array */ + for (index_t i=0; i Date: Tue, 26 Jul 2011 00:24:56 +0200 Subject: [PATCH 06/12] class is now able to take multiple types of values. currently float64_t and int32_t are implemented --- .../ModelSelectionParameters.cpp | 56 ++++++++++--------- .../modelselection/ModelSelectionParameters.h | 13 +++-- 2 files changed, 36 insertions(+), 33 deletions(-) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index 3f52b219d1b..8149773bcab 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -102,7 +102,14 @@ void CModelSelectionParameters::set_values(SGVector values) void CModelSelectionParameters::build_values(float64_t min, float64_t max, ERangeType type, float64_t step, float64_t type_base) { - build_values(MSPT_FLOAT, (void*)&min, (void*)&max, type, (void*)&step, + build_values(MSPT_FLOAT64, (void*)&min, (void*)&max, type, (void*)&step, + (void*)&type_base); +} + +void CModelSelectionParameters::build_values(int32_t min, int32_t max, + ERangeType type, int32_t step, int32_t type_base) +{ + build_values(MSPT_INT32, (void*)&min, (void*)&max, type, (void*)&step, (void*)&type_base); } @@ -121,7 +128,7 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, /* save new type */ m_value_type=value_type; - if (value_type==MSPT_FLOAT) + if (value_type==MSPT_FLOAT64) { SGVector values=create_range_array( *((float64_t*)min), @@ -133,15 +140,19 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, m_values.vector=(void*)values.vector; m_values.vlen=values.vlen; } - else if (value_type==MSPT_INT) + else if (value_type==MSPT_INT32) { - SG_NOTIMPLEMENTED; - } - else if (value_type==MSPT_BOOL) - { - SG_NOTIMPLEMENTED; + SGVector values=create_range_array( + *((int32_t*)min), + *((int32_t*)max), + type, + *((int32_t*)step), + *((int32_t*)type_base)); + + m_values.vector=(void*)values.vector; + m_values.vlen=values.vlen; } - else if (value_type==MSPT_BOOL) + else if (value_type==MSPT_NONE) { SG_ERROR("Value node has no type!\n"); } @@ -168,14 +179,11 @@ CDynamicObjectArray* CModelSelectionParameters::get_combi switch (m_value_type) { - case MSPT_FLOAT: + case MSPT_FLOAT64: p->add(&((float64_t*)m_values.vector)[i], m_node_name); break; - case MSPT_INT: - SG_NOTIMPLEMENTED; - break; - case MSPT_BOOL: - SG_NOTIMPLEMENTED; + case MSPT_INT32: + p->add(&((int32_t*)m_values.vector)[i], m_node_name);; break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); @@ -413,14 +421,11 @@ void CModelSelectionParameters::print_tree(int prefix_num) switch (m_value_type) { - case MSPT_FLOAT: + case MSPT_FLOAT64: CMath::display_vector((float64_t*)m_values.vector, m_values.vlen); break; - case MSPT_INT: - SG_NOTIMPLEMENTED; - break; - case MSPT_BOOL: - SG_NOTIMPLEMENTED; + case MSPT_INT32: + CMath::display_vector((int32_t*)m_values.vector, m_values.vlen);; break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); @@ -444,14 +449,11 @@ void CModelSelectionParameters::delete_values() { switch (m_value_type) { - case MSPT_FLOAT: + case MSPT_FLOAT64: delete[] (float64_t*) m_values.vector; break; - case MSPT_INT: - SG_NOTIMPLEMENTED; - break; - case MSPT_BOOL: - SG_NOTIMPLEMENTED; + case MSPT_INT32: + delete[] (int32_t*) m_values.vector; break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); diff --git a/src/shogun/modelselection/ModelSelectionParameters.h b/src/shogun/modelselection/ModelSelectionParameters.h index de72558246b..0a2cd5792aa 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.h +++ b/src/shogun/modelselection/ModelSelectionParameters.h @@ -31,13 +31,10 @@ enum EMSParamType MSPT_NONE=0, /* float64_t */ - MSPT_FLOAT, + MSPT_FLOAT64, /* int32_t */ - MSPT_INT, - - /* bool */ - MSPT_BOOL + MSPT_INT32, }; /** @@ -113,7 +110,11 @@ class CModelSelectionParameters: public CSGObject /** float64_t wrapper for build_values() */ void build_values(float64_t min, float64_t max, ERangeType type, - float64_t step=1, float64_t type_base=2); + float64_t step=1.0, float64_t type_base=2.0); + + /** int32_t wrapper for build_values() */ + void build_values(int32_t min, int32_t max, ERangeType type, int32_t step=1, + int32_t type_base=2); /** @return name of the SGSerializable */ inline virtual const char* get_name() const From cea5eee9e524f668b40c42fb712d254109e8f190 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:25:37 +0200 Subject: [PATCH 07/12] method calls should remain float64, not in integer type --- .../modelselection_apply_parameter_tree.cpp | 4 ++-- .../modelselection_grid_search_kernel.cpp | 10 +++++----- .../modelselection_grid_search_linear.cpp | 4 ++-- ...ection_model_selection_parameters_test.cpp | 20 +++++++++---------- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/examples/undocumented/libshogun/modelselection_apply_parameter_tree.cpp b/examples/undocumented/libshogun/modelselection_apply_parameter_tree.cpp index 62186c212a3..9da3abcc669 100644 --- a/examples/undocumented/libshogun/modelselection_apply_parameter_tree.cpp +++ b/examples/undocumented/libshogun/modelselection_apply_parameter_tree.cpp @@ -29,7 +29,7 @@ CModelSelectionParameters* create_param_tree() CModelSelectionParameters* c=new CModelSelectionParameters("C1"); root->append_child(c); - c->build_values(1, 2, R_EXP); + c->build_values(1.0, 2.0, R_EXP); CGaussianKernel* gaussian_kernel=new CGaussianKernel(); CModelSelectionParameters* param_gaussian_kernel= @@ -39,7 +39,7 @@ CModelSelectionParameters* create_param_tree() CModelSelectionParameters* param_gaussian_kernel_width= new CModelSelectionParameters("width"); - param_gaussian_kernel_width->build_values(1, 2, R_EXP); + param_gaussian_kernel_width->build_values(1.0, 2.0, R_EXP); param_gaussian_kernel->append_child(param_gaussian_kernel_width); return root; diff --git a/examples/undocumented/libshogun/modelselection_grid_search_kernel.cpp b/examples/undocumented/libshogun/modelselection_grid_search_kernel.cpp index bbf0153220d..1577e23934e 100644 --- a/examples/undocumented/libshogun/modelselection_grid_search_kernel.cpp +++ b/examples/undocumented/libshogun/modelselection_grid_search_kernel.cpp @@ -36,18 +36,18 @@ CModelSelectionParameters* create_param_tree() CModelSelectionParameters* c1=new CModelSelectionParameters("C1"); root->append_child(c1); - c1->build_values(-5, 5, R_EXP); + c1->build_values(-5.0, 5.0, R_EXP); CModelSelectionParameters* c2=new CModelSelectionParameters("C2"); root->append_child(c2); - c2->build_values(-5, 5, R_EXP); + c2->build_values(-5.0, 5.0, R_EXP); CGaussianKernel* gaussian_kernel=new CGaussianKernel(); CModelSelectionParameters* param_gaussian_kernel= new CModelSelectionParameters("kernel", gaussian_kernel); CModelSelectionParameters* gaussian_kernel_width= new CModelSelectionParameters("width"); - gaussian_kernel_width->build_values(-5, 5, R_EXP, 1, 2); + gaussian_kernel_width->build_values(-5.0, 5.0, R_EXP, 1.0, 2.0); param_gaussian_kernel->append_child(gaussian_kernel_width); root->append_child(param_gaussian_kernel); @@ -59,7 +59,7 @@ CModelSelectionParameters* create_param_tree() CModelSelectionParameters* param_power_kernel_degree= new CModelSelectionParameters("degree"); - param_power_kernel_degree->build_values(1, 1, R_EXP); + param_power_kernel_degree->build_values(1.0, 1.0, R_EXP); param_power_kernel->append_child(param_power_kernel_degree); CMinkowskiMetric* m_metric=new CMinkowskiMetric(10); @@ -70,7 +70,7 @@ CModelSelectionParameters* create_param_tree() CModelSelectionParameters* param_power_kernel_metric1_k= new CModelSelectionParameters("k"); - param_power_kernel_metric1_k->build_values(1, 12, R_LINEAR); + param_power_kernel_metric1_k->build_values(1.0, 12.0, R_LINEAR); param_power_kernel_metric1->append_child(param_power_kernel_metric1_k); return root; diff --git a/examples/undocumented/libshogun/modelselection_grid_search_linear.cpp b/examples/undocumented/libshogun/modelselection_grid_search_linear.cpp index 17cacbceadc..90323f513c4 100644 --- a/examples/undocumented/libshogun/modelselection_grid_search_linear.cpp +++ b/examples/undocumented/libshogun/modelselection_grid_search_linear.cpp @@ -32,11 +32,11 @@ CModelSelectionParameters* create_param_tree() CModelSelectionParameters* c1=new CModelSelectionParameters("C1"); root->append_child(c1); - c1->build_values(-15, 15, R_EXP); + c1->build_values(-15.0, 15.0, R_EXP); CModelSelectionParameters* c2=new CModelSelectionParameters("C2"); root->append_child(c2); - c2->build_values(-15, 15, R_EXP); + c2->build_values(-15.0, 15.0, R_EXP); return root; } diff --git a/examples/undocumented/libshogun/modelselection_model_selection_parameters_test.cpp b/examples/undocumented/libshogun/modelselection_model_selection_parameters_test.cpp index 5006e5c0aac..121d2c77ff6 100644 --- a/examples/undocumented/libshogun/modelselection_model_selection_parameters_test.cpp +++ b/examples/undocumented/libshogun/modelselection_model_selection_parameters_test.cpp @@ -29,7 +29,7 @@ CModelSelectionParameters* build_complex_example_tree() CModelSelectionParameters* c=new CModelSelectionParameters("C"); root->append_child(c); - c->build_values(1, 1, R_EXP); + c->build_values(1.0, 1.0, R_EXP); CPowerKernel* power_kernel=new CPowerKernel(); CModelSelectionParameters* param_power_kernel= @@ -39,7 +39,7 @@ CModelSelectionParameters* build_complex_example_tree() CModelSelectionParameters* param_power_kernel_degree= new CModelSelectionParameters("degree"); - param_power_kernel_degree->build_values(1, 1, R_EXP); + param_power_kernel_degree->build_values(1.0, 1.0, R_EXP); param_power_kernel->append_child(param_power_kernel_degree); CMinkowskiMetric* m_metric=new CMinkowskiMetric(10); @@ -50,7 +50,7 @@ CModelSelectionParameters* build_complex_example_tree() CModelSelectionParameters* param_power_kernel_metric1_k= new CModelSelectionParameters("k"); - param_power_kernel_metric1_k->build_values(1, 12, R_LINEAR); + param_power_kernel_metric1_k->build_values(1.0, 12.0, R_LINEAR); param_power_kernel_metric1->append_child(param_power_kernel_metric1_k); CGaussianKernel* gaussian_kernel=new CGaussianKernel(); @@ -61,7 +61,7 @@ CModelSelectionParameters* build_complex_example_tree() CModelSelectionParameters* param_gaussian_kernel_width= new CModelSelectionParameters("width"); - param_gaussian_kernel_width->build_values(1, 2, R_EXP); + param_gaussian_kernel_width->build_values(1.0, 2.0, R_EXP); param_gaussian_kernel->append_child(param_gaussian_kernel_width); CDistantSegmentsKernel* ds_kernel=new CDistantSegmentsKernel(); @@ -72,12 +72,12 @@ CModelSelectionParameters* build_complex_example_tree() CModelSelectionParameters* param_ds_kernel_delta= new CModelSelectionParameters("delta"); - param_ds_kernel_delta->build_values(1, 2, R_EXP); + param_ds_kernel_delta->build_values(1.0, 2.0, R_EXP); param_ds_kernel->append_child(param_ds_kernel_delta); CModelSelectionParameters* param_ds_kernel_theta= new CModelSelectionParameters("theta"); - param_ds_kernel_theta->build_values(1, 2, R_EXP); + param_ds_kernel_theta->build_values(1.0, 2.0, R_EXP); param_ds_kernel->append_child(param_ds_kernel_theta); return root; @@ -95,7 +95,7 @@ CModelSelectionParameters* build_sgobject_no_childs_tree() CModelSelectionParameters* build_leaf_node_tree() { CModelSelectionParameters* c_1=new CModelSelectionParameters("C1"); - c_1->build_values(1, 1, R_EXP); + c_1->build_values(1.0, 1.0, R_EXP); return c_1; } @@ -111,11 +111,11 @@ CModelSelectionParameters* build_root_value_childs_tree() CModelSelectionParameters* c_1=new CModelSelectionParameters("C1"); root->append_child(c_1); - c_1->build_values(1, 1, R_EXP); + c_1->build_values(1.0, 1.0, R_EXP); CModelSelectionParameters* c_2=new CModelSelectionParameters("C2"); root->append_child(c_2); - c_2->build_values(1, 1, R_EXP); + c_2->build_values(1.0, 1.0, R_EXP); return root; } @@ -143,7 +143,7 @@ CModelSelectionParameters* build_root_sg_object_child_value_child_tree() CModelSelectionParameters* c=new CModelSelectionParameters("C"); root->append_child(c); - c->build_values(1, 1, R_EXP); + c->build_values(1.0, 1.0, R_EXP); root->append_child(param_power_kernel); From 03d6f10aaf1a93891f6b3bf4fae673f377779bfd Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:13:19 +0200 Subject: [PATCH 08/12] work towards handling of multiple data types --- .../ModelSelectionParameters.cpp | 61 +++++++++++++++++++ .../modelselection/ModelSelectionParameters.h | 14 +++++ 2 files changed, 75 insertions(+) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index 8149773bcab..63f686e6d34 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -59,6 +59,10 @@ CModelSelectionParameters::~CModelSelectionParameters() { SG_UNREF(m_child_nodes); SG_UNREF(m_sgobject); +<<<<<<< HEAD +======= + +>>>>>>> work towards handling of multiple data types delete_values(); } @@ -102,6 +106,7 @@ void CModelSelectionParameters::set_values(SGVector values) void CModelSelectionParameters::build_values(float64_t min, float64_t max, ERangeType type, float64_t step, float64_t type_base) { +<<<<<<< HEAD build_values(MSPT_FLOAT64, (void*)&min, (void*)&max, type, (void*)&step, (void*)&type_base); } @@ -110,6 +115,9 @@ void CModelSelectionParameters::build_values(int32_t min, int32_t max, ERangeType type, int32_t step, int32_t type_base) { build_values(MSPT_INT32, (void*)&min, (void*)&max, type, (void*)&step, +======= + build_values(MSPT_FLOAT, (void*)&min, (void*)&max, type, (void*)&step, +>>>>>>> work towards handling of multiple data types (void*)&type_base); } @@ -124,11 +132,19 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, /* possibly delete old range values */ delete_values(); +<<<<<<< HEAD /* save new type */ m_value_type=value_type; if (value_type==MSPT_FLOAT64) +======= + + /* save new type */ + m_value_type=value_type; + + if (value_type==MSPT_FLOAT) +>>>>>>> work towards handling of multiple data types { SGVector values=create_range_array( *((float64_t*)min), @@ -140,6 +156,7 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, m_values.vector=(void*)values.vector; m_values.vlen=values.vlen; } +<<<<<<< HEAD else if (value_type==MSPT_INT32) { SGVector values=create_range_array( @@ -153,6 +170,17 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, m_values.vlen=values.vlen; } else if (value_type==MSPT_NONE) +======= + else if (value_type==MSPT_INT) + { + SG_NOTIMPLEMENTED; + } + else if (value_type==MSPT_BOOL) + { + SG_NOTIMPLEMENTED; + } + else if (value_type==MSPT_BOOL) +>>>>>>> work towards handling of multiple data types { SG_ERROR("Value node has no type!\n"); } @@ -179,11 +207,22 @@ CDynamicObjectArray* CModelSelectionParameters::get_combi switch (m_value_type) { +<<<<<<< HEAD case MSPT_FLOAT64: p->add(&((float64_t*)m_values.vector)[i], m_node_name); break; case MSPT_INT32: p->add(&((int32_t*)m_values.vector)[i], m_node_name);; +======= + case MSPT_FLOAT: + p->add(&((float64_t*)m_values.vector)[i], m_node_name); + break; + case MSPT_INT: + SG_NOTIMPLEMENTED; + break; + case MSPT_BOOL: + SG_NOTIMPLEMENTED; +>>>>>>> work towards handling of multiple data types break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); @@ -421,11 +460,22 @@ void CModelSelectionParameters::print_tree(int prefix_num) switch (m_value_type) { +<<<<<<< HEAD case MSPT_FLOAT64: CMath::display_vector((float64_t*)m_values.vector, m_values.vlen); break; case MSPT_INT32: CMath::display_vector((int32_t*)m_values.vector, m_values.vlen);; +======= + case MSPT_FLOAT: + CMath::display_vector((float64_t*)m_values.vector, m_values.vlen); + break; + case MSPT_INT: + SG_NOTIMPLEMENTED; + break; + case MSPT_BOOL: + SG_NOTIMPLEMENTED; +>>>>>>> work towards handling of multiple data types break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); @@ -449,11 +499,22 @@ void CModelSelectionParameters::delete_values() { switch (m_value_type) { +<<<<<<< HEAD case MSPT_FLOAT64: delete[] (float64_t*) m_values.vector; break; case MSPT_INT32: delete[] (int32_t*) m_values.vector; +======= + case MSPT_FLOAT: + delete[] (float64_t*) m_values.vector; + break; + case MSPT_INT: + SG_NOTIMPLEMENTED; + break; + case MSPT_BOOL: + SG_NOTIMPLEMENTED; +>>>>>>> work towards handling of multiple data types break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); diff --git a/src/shogun/modelselection/ModelSelectionParameters.h b/src/shogun/modelselection/ModelSelectionParameters.h index 0a2cd5792aa..e6739954aac 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.h +++ b/src/shogun/modelselection/ModelSelectionParameters.h @@ -31,10 +31,20 @@ enum EMSParamType MSPT_NONE=0, /* float64_t */ +<<<<<<< HEAD MSPT_FLOAT64, /* int32_t */ MSPT_INT32, +======= + MSPT_FLOAT, + + /* int32_t */ + MSPT_INT, + + /* bool */ + MSPT_BOOL +>>>>>>> work towards handling of multiple data types }; /** @@ -110,11 +120,15 @@ class CModelSelectionParameters: public CSGObject /** float64_t wrapper for build_values() */ void build_values(float64_t min, float64_t max, ERangeType type, +<<<<<<< HEAD float64_t step=1.0, float64_t type_base=2.0); /** int32_t wrapper for build_values() */ void build_values(int32_t min, int32_t max, ERangeType type, int32_t step=1, int32_t type_base=2); +======= + float64_t step=1, float64_t type_base=2); +>>>>>>> work towards handling of multiple data types /** @return name of the SGSerializable */ inline virtual const char* get_name() const From 8edd3cad4bd15b7200c1696989abfe3890a26c9a Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:24:56 +0200 Subject: [PATCH 09/12] class is now able to take multiple types of values. currently float64_t and int32_t are implemented --- .../ModelSelectionParameters.cpp | 61 ------------------- .../modelselection/ModelSelectionParameters.h | 14 ----- 2 files changed, 75 deletions(-) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index 63f686e6d34..8149773bcab 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -59,10 +59,6 @@ CModelSelectionParameters::~CModelSelectionParameters() { SG_UNREF(m_child_nodes); SG_UNREF(m_sgobject); -<<<<<<< HEAD -======= - ->>>>>>> work towards handling of multiple data types delete_values(); } @@ -106,7 +102,6 @@ void CModelSelectionParameters::set_values(SGVector values) void CModelSelectionParameters::build_values(float64_t min, float64_t max, ERangeType type, float64_t step, float64_t type_base) { -<<<<<<< HEAD build_values(MSPT_FLOAT64, (void*)&min, (void*)&max, type, (void*)&step, (void*)&type_base); } @@ -115,9 +110,6 @@ void CModelSelectionParameters::build_values(int32_t min, int32_t max, ERangeType type, int32_t step, int32_t type_base) { build_values(MSPT_INT32, (void*)&min, (void*)&max, type, (void*)&step, -======= - build_values(MSPT_FLOAT, (void*)&min, (void*)&max, type, (void*)&step, ->>>>>>> work towards handling of multiple data types (void*)&type_base); } @@ -132,19 +124,11 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, /* possibly delete old range values */ delete_values(); -<<<<<<< HEAD /* save new type */ m_value_type=value_type; if (value_type==MSPT_FLOAT64) -======= - - /* save new type */ - m_value_type=value_type; - - if (value_type==MSPT_FLOAT) ->>>>>>> work towards handling of multiple data types { SGVector values=create_range_array( *((float64_t*)min), @@ -156,7 +140,6 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, m_values.vector=(void*)values.vector; m_values.vlen=values.vlen; } -<<<<<<< HEAD else if (value_type==MSPT_INT32) { SGVector values=create_range_array( @@ -170,17 +153,6 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, m_values.vlen=values.vlen; } else if (value_type==MSPT_NONE) -======= - else if (value_type==MSPT_INT) - { - SG_NOTIMPLEMENTED; - } - else if (value_type==MSPT_BOOL) - { - SG_NOTIMPLEMENTED; - } - else if (value_type==MSPT_BOOL) ->>>>>>> work towards handling of multiple data types { SG_ERROR("Value node has no type!\n"); } @@ -207,22 +179,11 @@ CDynamicObjectArray* CModelSelectionParameters::get_combi switch (m_value_type) { -<<<<<<< HEAD case MSPT_FLOAT64: p->add(&((float64_t*)m_values.vector)[i], m_node_name); break; case MSPT_INT32: p->add(&((int32_t*)m_values.vector)[i], m_node_name);; -======= - case MSPT_FLOAT: - p->add(&((float64_t*)m_values.vector)[i], m_node_name); - break; - case MSPT_INT: - SG_NOTIMPLEMENTED; - break; - case MSPT_BOOL: - SG_NOTIMPLEMENTED; ->>>>>>> work towards handling of multiple data types break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); @@ -460,22 +421,11 @@ void CModelSelectionParameters::print_tree(int prefix_num) switch (m_value_type) { -<<<<<<< HEAD case MSPT_FLOAT64: CMath::display_vector((float64_t*)m_values.vector, m_values.vlen); break; case MSPT_INT32: CMath::display_vector((int32_t*)m_values.vector, m_values.vlen);; -======= - case MSPT_FLOAT: - CMath::display_vector((float64_t*)m_values.vector, m_values.vlen); - break; - case MSPT_INT: - SG_NOTIMPLEMENTED; - break; - case MSPT_BOOL: - SG_NOTIMPLEMENTED; ->>>>>>> work towards handling of multiple data types break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); @@ -499,22 +449,11 @@ void CModelSelectionParameters::delete_values() { switch (m_value_type) { -<<<<<<< HEAD case MSPT_FLOAT64: delete[] (float64_t*) m_values.vector; break; case MSPT_INT32: delete[] (int32_t*) m_values.vector; -======= - case MSPT_FLOAT: - delete[] (float64_t*) m_values.vector; - break; - case MSPT_INT: - SG_NOTIMPLEMENTED; - break; - case MSPT_BOOL: - SG_NOTIMPLEMENTED; ->>>>>>> work towards handling of multiple data types break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); diff --git a/src/shogun/modelselection/ModelSelectionParameters.h b/src/shogun/modelselection/ModelSelectionParameters.h index e6739954aac..0a2cd5792aa 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.h +++ b/src/shogun/modelselection/ModelSelectionParameters.h @@ -31,20 +31,10 @@ enum EMSParamType MSPT_NONE=0, /* float64_t */ -<<<<<<< HEAD MSPT_FLOAT64, /* int32_t */ MSPT_INT32, -======= - MSPT_FLOAT, - - /* int32_t */ - MSPT_INT, - - /* bool */ - MSPT_BOOL ->>>>>>> work towards handling of multiple data types }; /** @@ -120,15 +110,11 @@ class CModelSelectionParameters: public CSGObject /** float64_t wrapper for build_values() */ void build_values(float64_t min, float64_t max, ERangeType type, -<<<<<<< HEAD float64_t step=1.0, float64_t type_base=2.0); /** int32_t wrapper for build_values() */ void build_values(int32_t min, int32_t max, ERangeType type, int32_t step=1, int32_t type_base=2); -======= - float64_t step=1, float64_t type_base=2); ->>>>>>> work towards handling of multiple data types /** @return name of the SGSerializable */ inline virtual const char* get_name() const From 869cc6730f181817a60cd9fd84866817472282e3 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Wed, 27 Jul 2011 12:16:55 +0200 Subject: [PATCH 10/12] merge of current upstream --- src/shogun/modelselection/ModelSelectionParameters.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index 8149773bcab..827a899feb7 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -454,6 +454,7 @@ void CModelSelectionParameters::delete_values() break; case MSPT_INT32: delete[] (int32_t*) m_values.vector; +>>>>>>> merge of current upstream break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); From 3a0a8e1870db4625c4764c3327f12af0f2ba7791 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Tue, 26 Jul 2011 00:24:56 +0200 Subject: [PATCH 11/12] class is now able to take multiple types of values. currently float64_t and int32_t are implemented --- src/shogun/modelselection/ModelSelectionParameters.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index 827a899feb7..8149773bcab 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -454,7 +454,6 @@ void CModelSelectionParameters::delete_values() break; case MSPT_INT32: delete[] (int32_t*) m_values.vector; ->>>>>>> merge of current upstream break; case MSPT_NONE: SG_ERROR("Value node has no type!\n"); From 77acd3cd2b1cf4ba5744e9ad9bd3086db35f3680 Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Wed, 27 Jul 2011 13:02:14 +0200 Subject: [PATCH 12/12] removed merge artefacts --- .../modelselection/ModelSelectionParameters.cpp | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/shogun/modelselection/ModelSelectionParameters.cpp b/src/shogun/modelselection/ModelSelectionParameters.cpp index a5e3d86d778..8149773bcab 100644 --- a/src/shogun/modelselection/ModelSelectionParameters.cpp +++ b/src/shogun/modelselection/ModelSelectionParameters.cpp @@ -59,10 +59,6 @@ CModelSelectionParameters::~CModelSelectionParameters() { SG_UNREF(m_child_nodes); SG_UNREF(m_sgobject); -<<<<<<< HEAD -======= - ->>>>>>> kernelmachine delete_values(); } @@ -128,17 +124,10 @@ void CModelSelectionParameters::build_values(EMSParamType value_type, void* min, /* possibly delete old range values */ delete_values(); -<<<<<<< HEAD - - /* save new type */ - m_value_type=value_type; - -======= /* save new type */ m_value_type=value_type; ->>>>>>> kernelmachine if (value_type==MSPT_FLOAT64) { SGVector values=create_range_array(