From ea53122fa195a6da3b916879ae26ec4bd3e85cbf Mon Sep 17 00:00:00 2001 From: Heiko Strathmann Date: Thu, 14 Mar 2013 11:22:52 +0000 Subject: [PATCH] added serialisation support for multiclass labels now that the confidences are stored in a matrix --- src/shogun/labels/MulticlassLabels.cpp | 39 ++++++++++++++++++-------- src/shogun/labels/MulticlassLabels.h | 4 +++ 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/src/shogun/labels/MulticlassLabels.cpp b/src/shogun/labels/MulticlassLabels.cpp index 815e984e792..fd9f463047c 100644 --- a/src/shogun/labels/MulticlassLabels.cpp +++ b/src/shogun/labels/MulticlassLabels.cpp @@ -6,60 +6,77 @@ using namespace shogun; CMulticlassLabels::CMulticlassLabels() : CDenseLabels() { + init(); } CMulticlassLabels::CMulticlassLabels(int32_t num_labels) : CDenseLabels(num_labels) { + init(); } CMulticlassLabels::CMulticlassLabels(const SGVector src) : CDenseLabels() { + init(); set_labels(src); } CMulticlassLabels::CMulticlassLabels(CFile* loader) : CDenseLabels(loader) { + init(); } CMulticlassLabels::~CMulticlassLabels() { } +void CMulticlassLabels::init() +{ + SG_ADD(&m_multiclass_confidences, "multiclass_confidences", "Vectors of " + "multiclass confidences", MS_NOT_AVAILABLE); + + m_multiclass_confidences=SGMatrix(); +} + void CMulticlassLabels::set_multiclass_confidences(int32_t i, SGVector confidences) { - REQUIRE(confidences.size()==m_multiclass_confidences.num_rows,"Length of confidences should match size of the matrix"); + REQUIRE(confidences.size()==m_multiclass_confidences.num_rows, + "%s::set_multiclass_confidences(): Length of confidences should " + "match size of the matrix", get_name()); + for (index_t j=0; j CMulticlassLabels::get_multiclass_confidences(int32_t i) { SGVector confs(m_multiclass_confidences.num_rows); for (index_t j=0; j(n_classes,n_labels); } CMulticlassLabels* CMulticlassLabels::obtain_from_generic(CLabels* base_labels) { - if ( base_labels->get_label_type() == LT_MULTICLASS ) - return (CMulticlassLabels*) base_labels; - else - SG_SERROR("base_labels must be of dynamic type CMulticlassLabels") + if (!base_labels) + return NULL; + + if(base_labels->get_label_type()!=LT_MULTICLASS) + { + SG_SERROR("CMulticlassLabels::base_labels is of wrong type \"%s\"!\n", + base_labels->get_name()); + } - return NULL; + return (CMulticlassLabels*) base_labels; } void CMulticlassLabels::ensure_valid(const char* context) diff --git a/src/shogun/labels/MulticlassLabels.h b/src/shogun/labels/MulticlassLabels.h index acc3adfb26e..ed17191360c 100644 --- a/src/shogun/labels/MulticlassLabels.h +++ b/src/shogun/labels/MulticlassLabels.h @@ -127,6 +127,10 @@ class CMulticlassLabels : public CDenseLabels /** @return object name */ virtual const char* get_name() const { return "MulticlassLabels"; } + private: + /** initialises and register parameters */ + void init(); + protected: /** multiclass confidences */