Skip to content

Commit

Permalink
Merge pull request #604 from karlnapf/master
Browse files Browse the repository at this point in the history
fix for wrong model selection parameter combinations
  • Loading branch information
karlnapf committed Jun 26, 2012
2 parents b501667 + e53fe46 commit 062bc5f
Show file tree
Hide file tree
Showing 6 changed files with 603 additions and 97 deletions.
304 changes: 275 additions & 29 deletions examples/undocumented/libshogun/modelselection_parameter_tree.cpp
Expand Up @@ -11,19 +11,44 @@
#include <shogun/base/init.h>
#include <shogun/modelselection/ModelSelectionParameters.h>
#include <shogun/modelselection/ParameterCombination.h>
#include <shogun/classifier/svm/LibSVM.h>
#include <shogun/kernel/GaussianKernel.h>
#include <shogun/kernel/PowerKernel.h>
#include <shogun/kernel/LinearKernel.h>
#include <shogun/distance/MinkowskiMetric.h>
#include <shogun/distance/EuclidianDistance.h>
#include <shogun/kernel/DistantSegmentsKernel.h>
#include <shogun/regression/gp/ExactInferenceMethod.h>
#include <shogun/regression/gp/GaussianLikelihood.h>
#include <shogun/regression/gp/ZeroMean.h>
#include <shogun/regression/GaussianProcessRegression.h>
#include <shogun/modelselection/ModelSelectionParameters.h>
#include <shogun/modelselection/ParameterCombination.h>

using namespace shogun;

void print_message(FILE* target, const char* str)
void test_tree(CModelSelectionParameters* tree)
{
fprintf(target, "%s", str);
SG_SPRINT("\n\ntree to process:\n");
tree->print_tree();

/* build combinations of parameter trees */
CDynamicObjectArray* combinations=tree->get_combinations();

/* print and directly delete them all */
SG_SPRINT("----------------------------------\n");
for (index_t i=0; i<combinations->get_num_elements(); ++i)
{
CParameterCombination* combination=
(CParameterCombination*)combinations->get_element(i);
combination->print_tree();
SG_UNREF(combination);
}

SG_UNREF(combinations);
}

CModelSelectionParameters* create_param_tree()
CModelSelectionParameters* create_param_tree_1()
{
CModelSelectionParameters* root=new CModelSelectionParameters();

Expand All @@ -37,8 +62,8 @@ CModelSelectionParameters* create_param_tree()
* Dont worry if yours is not included, simply write to the mailing list */
power_kernel->print_modsel_params();

CModelSelectionParameters* param_power_kernel=
new CModelSelectionParameters("kernel", power_kernel);
CModelSelectionParameters* param_power_kernel=new CModelSelectionParameters(
"kernel", power_kernel);

root->append_child(param_power_kernel);

Expand All @@ -53,15 +78,18 @@ CModelSelectionParameters* create_param_tree()
* Dont worry if yours is not included, simply write to the mailing list */
m_metric->print_modsel_params();

CModelSelectionParameters* param_power_kernel_metric1=
CModelSelectionParameters* param_power_kernel_metrikernel_width_sigma_param=
new CModelSelectionParameters("distance", m_metric);

param_power_kernel->append_child(param_power_kernel_metric1);
param_power_kernel->append_child(
param_power_kernel_metrikernel_width_sigma_param);

CModelSelectionParameters* param_power_kernel_metric1_k=
CModelSelectionParameters* param_power_kernel_metrikernel_width_sigma_param_k=
new CModelSelectionParameters("k");
param_power_kernel_metric1_k->build_values(1, 2, R_LINEAR);
param_power_kernel_metric1->append_child(param_power_kernel_metric1_k);
param_power_kernel_metrikernel_width_sigma_param_k->build_values(1, 2,
R_LINEAR);
param_power_kernel_metrikernel_width_sigma_param->append_child(
param_power_kernel_metrikernel_width_sigma_param_k);

CGaussianKernel* gaussian_kernel=new CGaussianKernel();

Expand All @@ -85,8 +113,8 @@ CModelSelectionParameters* create_param_tree()
* Dont worry if yours is not included, simply write to the mailing list */
ds_kernel->print_modsel_params();

CModelSelectionParameters* param_ds_kernel=new CModelSelectionParameters("kernel",
ds_kernel);
CModelSelectionParameters* param_ds_kernel=new CModelSelectionParameters(
"kernel", ds_kernel);

root->append_child(param_ds_kernel);

Expand All @@ -103,32 +131,250 @@ CModelSelectionParameters* create_param_tree()
return root;
}

CModelSelectionParameters* create_param_tree_2()
{
CModelSelectionParameters* root=new CModelSelectionParameters();

CPowerKernel* power_kernel=new CPowerKernel();
CModelSelectionParameters* param_power_kernel=new CModelSelectionParameters(
"kernel", power_kernel);
root->append_child(param_power_kernel);

CMinkowskiMetric* metric=new CMinkowskiMetric();
CModelSelectionParameters* param_power_kernel_metric=
new CModelSelectionParameters("distance", metric);
param_power_kernel->append_child(param_power_kernel_metric);

CModelSelectionParameters* param_metric_k=new CModelSelectionParameters(
"k");
param_metric_k->build_values(2, 3, R_LINEAR);
param_power_kernel_metric->append_child(param_metric_k);

CDistantSegmentsKernel* ds_kernel=new CDistantSegmentsKernel();
CModelSelectionParameters* param_ds_kernel=new CModelSelectionParameters(
"kernel", ds_kernel);
root->append_child(param_ds_kernel);

return root;
}

CModelSelectionParameters* create_param_tree_3()
{
CModelSelectionParameters* root=new CModelSelectionParameters();

CPowerKernel* power_kernel=new CPowerKernel();
CModelSelectionParameters* param_power_kernel=new CModelSelectionParameters(
"kernel", power_kernel);
root->append_child(param_power_kernel);

CMinkowskiMetric* metric=new CMinkowskiMetric();
CModelSelectionParameters* param_power_kernel_metric=
new CModelSelectionParameters("distance", metric);
param_power_kernel->append_child(param_power_kernel_metric);

CEuclidianDistance* euclidean=new CEuclidianDistance();
CModelSelectionParameters* param_power_kernel_distance=
new CModelSelectionParameters("distance", euclidean);
param_power_kernel->append_child(param_power_kernel_distance);

CDistantSegmentsKernel* ds_kernel=new CDistantSegmentsKernel();
CModelSelectionParameters* param_ds_kernel=new CModelSelectionParameters(
"kernel", ds_kernel);
root->append_child(param_ds_kernel);

return root;
}

CModelSelectionParameters* create_param_tree_4a()
{
CModelSelectionParameters* root=new CModelSelectionParameters();

CDenseFeatures<float64_t>* features=new CDenseFeatures<float64_t>();
CRegressionLabels* labels=new CRegressionLabels();
CGaussianKernel* gaussian_kernel=new CGaussianKernel(10, 2);
CPowerKernel* power_kernel=new CPowerKernel();

CZeroMean* mean=new CZeroMean();
CGaussianLikelihood* lik=new CGaussianLikelihood();
CExactInferenceMethod* inf=new CExactInferenceMethod(gaussian_kernel, features,
mean, labels, lik);

CLibSVM* svm=new CLibSVM();
CPowerKernel* power_kernel_svm=new CPowerKernel();
CGaussianKernel* gaussian_kernel_svm=new CGaussianKernel(10, 2);

CModelSelectionParameters* param_inf=new CModelSelectionParameters(
"Inference Method", inf);
root->append_child(param_inf);

CModelSelectionParameters* param_inf_gaussian=new CModelSelectionParameters(
"model", lik);
param_inf->append_child(param_inf_gaussian);

CModelSelectionParameters* param_inf_kernel_1=new CModelSelectionParameters(
"kernel", gaussian_kernel);
param_inf->append_child(param_inf_kernel_1);

CModelSelectionParameters* param_inf_kernel_2=new CModelSelectionParameters(
"kernel", power_kernel);
param_inf->append_child(param_inf_kernel_2);



CModelSelectionParameters* param_svm=new CModelSelectionParameters(
"SVM", svm);
root->append_child(param_svm);

CModelSelectionParameters* param_svm_kernel_1=new CModelSelectionParameters(
"kernel", power_kernel_svm);
param_svm->append_child(param_svm_kernel_1);

CModelSelectionParameters* param_svm_kernel_2=new CModelSelectionParameters(
"kernel", gaussian_kernel_svm);
param_svm->append_child(param_svm_kernel_2);

return root;
}

CModelSelectionParameters* create_param_tree_4b()
{
CModelSelectionParameters* root=new CModelSelectionParameters();

CDenseFeatures<float64_t>* features=new CDenseFeatures<float64_t>();
CRegressionLabels* labels=new CRegressionLabels();
CGaussianKernel* gaussian_kernel=new CGaussianKernel(10, 2);
CPowerKernel* power_kernel=new CPowerKernel();

CZeroMean* mean=new CZeroMean();
CGaussianLikelihood* lik=new CGaussianLikelihood();
CExactInferenceMethod* inf=new CExactInferenceMethod(gaussian_kernel, features,
mean, labels, lik);

CLibSVM* svm=new CLibSVM();
CPowerKernel* power_kernel_svm=new CPowerKernel();
CGaussianKernel* gaussian_kernel_svm=new CGaussianKernel(10, 2);

CModelSelectionParameters* param_c=new CModelSelectionParameters("C1");
root->append_child(param_c);
param_c->build_values(1,2,R_EXP);

CModelSelectionParameters* param_inf=new CModelSelectionParameters(
"Inference Method", inf);
root->append_child(param_inf);

CModelSelectionParameters* param_inf_gaussian=new CModelSelectionParameters(
"model", lik);
param_inf->append_child(param_inf_gaussian);

CModelSelectionParameters* param_inf_kernel_1=new CModelSelectionParameters(
"kernel", gaussian_kernel);
param_inf->append_child(param_inf_kernel_1);

CModelSelectionParameters* param_inf_kernel_2=new CModelSelectionParameters(
"kernel", power_kernel);
param_inf->append_child(param_inf_kernel_2);



CModelSelectionParameters* param_svm=new CModelSelectionParameters(
"SVM", svm);
root->append_child(param_svm);

CModelSelectionParameters* param_svm_kernel_1=new CModelSelectionParameters(
"kernel", power_kernel_svm);
param_svm->append_child(param_svm_kernel_1);

CModelSelectionParameters* param_svm_kernel_2=new CModelSelectionParameters(
"kernel", gaussian_kernel_svm);
param_svm->append_child(param_svm_kernel_2);

return root;
}

CModelSelectionParameters* create_param_tree_5()
{
CModelSelectionParameters* root=new CModelSelectionParameters();

CDenseFeatures<float64_t>* features=new CDenseFeatures<float64_t>();
CRegressionLabels* labels=new CRegressionLabels();
CGaussianKernel* gaussian_kernel=new CGaussianKernel(10, 2);
CLinearKernel* linear_kernel=new CLinearKernel();
CPowerKernel* power_kernel=new CPowerKernel();

CZeroMean* mean=new CZeroMean();
CGaussianLikelihood* lik=new CGaussianLikelihood();
CExactInferenceMethod* inf=new CExactInferenceMethod(gaussian_kernel, features,
mean, labels, lik);

CModelSelectionParameters* param_inf=new CModelSelectionParameters(
"Inference Method", inf);
root->append_child(param_inf);

CModelSelectionParameters* param_inf_gaussian=new CModelSelectionParameters(
"model", lik);
param_inf->append_child(param_inf_gaussian);

CModelSelectionParameters* param_inf_gaussian_sigma=
new CModelSelectionParameters("sigma");
param_inf_gaussian->append_child(param_inf_gaussian_sigma);
param_inf_gaussian_sigma->build_values(2.0, 3.0, R_EXP);

CModelSelectionParameters* param_inf_kernel_1=new CModelSelectionParameters(
"kernel", gaussian_kernel);
param_inf->append_child(param_inf_kernel_1);

CModelSelectionParameters* param_inf_kernel_width=
new CModelSelectionParameters("width");
param_inf_kernel_1->append_child(param_inf_kernel_width);
param_inf_kernel_width->build_values(1.0, 2.0, R_EXP);

CModelSelectionParameters* param_inf_kernel_2=new CModelSelectionParameters(
"kernel", linear_kernel);
param_inf->append_child(param_inf_kernel_2);

CModelSelectionParameters* param_inf_kernel_3=new CModelSelectionParameters(
"kernel", power_kernel);
param_inf->append_child(param_inf_kernel_3);

return root;
}

int main(int argc, char **argv)
{
init_shogun(&print_message, &print_message, &print_message);
init_shogun_with_defaults();

// sg_io->set_loglevel(MSG_DEBUG);

/* create example tree */
CModelSelectionParameters* tree=create_param_tree();
CModelSelectionParameters* tree=NULL;

tree=create_param_tree_1();
SG_REF(tree);
test_tree(tree);
SG_UNREF(tree);

tree->print_tree();
tree=create_param_tree_2();
SG_REF(tree);
test_tree(tree);
SG_UNREF(tree);

/* build combinations of parameter trees */
CDynamicObjectArray* combinations=tree->get_combinations();
tree=create_param_tree_3();
SG_REF(tree);
test_tree(tree);
SG_UNREF(tree);

/* print and directly delete them all */
SG_SPRINT("----------------------------------\n");
for (index_t i=0; i<combinations->get_num_elements(); ++i)
{
CParameterCombination* combination=(CParameterCombination*)
combinations->get_element(i);
combination->print_tree();
SG_UNREF(combination);
}
tree=create_param_tree_4a();
SG_REF(tree);
test_tree(tree);
SG_UNREF(tree);

SG_UNREF(combinations);
tree=create_param_tree_4b();
SG_REF(tree);
test_tree(tree);
SG_UNREF(tree);

/* delete example tree */
tree=create_param_tree_5();
SG_REF(tree);
test_tree(tree);
SG_UNREF(tree);

exit_shogun();
Expand Down
2 changes: 1 addition & 1 deletion src/shogun/lib/Set.h
Expand Up @@ -187,7 +187,7 @@ template<class T> class CSet: public CSGObject
T* get_element_ptr(int32_t index)
{
if (array->get_element(index)!=NULL)
return &(array->get_element(index)->data);
return &(array->get_element(index)->element);
return NULL;
}

Expand Down

0 comments on commit 062bc5f

Please sign in to comment.