Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
re-introduce load/save to labels
it does make sense to have these functions to be able to load/save
labels in standard file formats
  • Loading branch information
Soeren Sonnenburg committed May 5, 2012
1 parent b27af96 commit a576554
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 6 deletions.
30 changes: 30 additions & 0 deletions src/shogun/features/Labels.cpp
Expand Up @@ -49,6 +49,13 @@ void CLabels::set_to_one()
labels.vector[m_subset_stack->subset_idx_conversion(i)]=+1;
}

CLabels::CLabels(CFile* loader)
: CSGObject()
{
init();
load(loader);
}

CLabels::~CLabels()
{
SG_UNREF(m_subset_stack);
Expand Down Expand Up @@ -171,6 +178,29 @@ void CLabels::set_int_labels(SGVector<int32_t> lab)
set_int_label(i, lab.vector[i]);
}

void CLabels::load(CFile* loader)
{
remove_subset();

SG_SET_LOCALE_C;
labels.unref();
ASSERT(loader);
loader->get_vector(labels.vector, labels.vlen);
SG_RESET_LOCALE;
}

void CLabels::save(CFile* writer)
{
if (m_subset_stack->has_subsets())
SG_ERROR("save() is not possible on subset");

SG_SET_LOCALE_C;
ASSERT(writer);
ASSERT(labels.vector && labels.vlen>0);
writer->set_vector(labels.vector, labels.vlen);
SG_RESET_LOCALE;
}

bool CLabels::set_label(int32_t idx, float64_t label)
{
int32_t real_num=m_subset_stack->subset_idx_conversion(idx);
Expand Down
22 changes: 22 additions & 0 deletions src/shogun/features/Labels.h
Expand Up @@ -56,9 +56,31 @@ class CLabels : public CSGObject
*/
//CLabels(SGVector<int64_t> labels);

/** constructor
*
* @param loader File object via which to load data
*/
CLabels(CFile* loader);

/** destructor */
virtual ~CLabels();

/** load labels from file
*
* any subset is removed before
*
* @param loader File object via which to load data
*/
virtual void load(CFile* loader);

/** save labels to file
*
* not possible with subset
*
* @param writer File object via which to save data
*/
virtual void save(CFile* writer);

/** set label
*
* possible with subset
Expand Down
42 changes: 42 additions & 0 deletions src/shogun/ui/GUILabels.cpp
Expand Up @@ -13,6 +13,7 @@

#include <shogun/lib/config.h>
#include <shogun/io/SGIO.h>
#include <shogun/io/AsciiFile.h>
#include <shogun/features/Labels.h>

#include <string.h>
Expand All @@ -29,3 +30,44 @@ CGUILabels::~CGUILabels()
SG_UNREF(train_labels);
SG_UNREF(test_labels);
}

bool CGUILabels::load(char* filename, char* target)
{
CLabels* labels=NULL;

if (strncmp(target, "TEST", 4)==0)
labels=test_labels;
else if (strncmp(target, "TRAIN", 5)==0)
labels=train_labels;
else
SG_ERROR("Invalid target %s.\n", target);

if (labels)
{
SG_UNREF(labels);
CAsciiFile* file=new CAsciiFile(filename);
labels=new CLabels(file);

if (labels)
{
if (strncmp(target, "TEST", 4)==0)
set_test_labels(labels);
else
set_train_labels(labels);

return true;
}
else
SG_ERROR("Loading labels failed.\n");

SG_UNREF(file);
}

return false;
}

bool CGUILabels::save(char* param)
{
bool result=false;
return result;
}
10 changes: 10 additions & 0 deletions src/shogun/ui/GUILabels.h
Expand Up @@ -47,6 +47,16 @@ class CGUILabels : public CSGObject
*/
bool set_test_labels(CLabels* lab) { SG_UNREF(test_labels); SG_REF(lab); test_labels=lab; return true;}

/** load labels from file
* @param filename
* @param target
*/
bool load(char* filename, char* target);
/** save
* @param param
*/
bool save(char* param);

/** @return object name */
inline virtual const char* get_name() const { return "GUILabels"; }

Expand Down
8 changes: 2 additions & 6 deletions src/shogun/ui/SGInterface.cpp
Expand Up @@ -2450,10 +2450,7 @@ bool CSGInterface::cmd_reshape()

bool CSGInterface::cmd_load_labels()
{
//TODO FIXME
//
SG_NOTIMPLEMENTED;
/*if (m_nrhs<4 || !create_return_values(0))
if (m_nrhs<4 || !create_return_values(0))
return false;

int32_t len=0;
Expand All @@ -2464,8 +2461,7 @@ bool CSGInterface::cmd_load_labels()

SG_FREE(filename);
SG_FREE(target);
return success;*/
return false;
return success;
}

bool CSGInterface::cmd_set_labels()
Expand Down

0 comments on commit a576554

Please sign in to comment.