Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <shogun/ui/GUILabels.h>
00012 #include <shogun/ui/SGInterface.h>
00013
00014 #include <shogun/lib/config.h>
00015 #include <shogun/io/SGIO.h>
00016 #include <shogun/io/AsciiFile.h>
00017 #include <shogun/labels/Labels.h>
00018 #include <shogun/labels/BinaryLabels.h>
00019 #include <shogun/labels/MulticlassLabels.h>
00020 #include <shogun/labels/RegressionLabels.h>
00021
00022 #include <string.h>
00023
00024 using namespace shogun;
00025
00026 CGUILabels::CGUILabels(CSGInterface* ui_)
00027 : CSGObject(), ui(ui_), train_labels(NULL), test_labels(NULL)
00028 {
00029 }
00030
00031 CGUILabels::~CGUILabels()
00032 {
00033 SG_UNREF(train_labels);
00034 SG_UNREF(test_labels);
00035 }
00036
00037 bool CGUILabels::load(char* filename, char* target)
00038 {
00039 CLabels* labels=NULL;
00040
00041 if (strncmp(target, "TEST", 4)==0)
00042 labels=test_labels;
00043 else if (strncmp(target, "TRAIN", 5)==0)
00044 labels=train_labels;
00045 else
00046 SG_ERROR("Invalid target %s.\n", target);
00047
00048 if (labels)
00049 {
00050 SG_UNREF(labels);
00051 CAsciiFile* file=new CAsciiFile(filename);
00052 labels=new CRegressionLabels(file);
00053 SGVector<float64_t> labs = ((CRegressionLabels*) labels)->get_labels();
00054 float64_t* lab=SGVector<float64_t>::clone_vector(labs.vector, labs.vlen);
00055 labels=infer_labels(lab, labs.vlen);
00056
00057 if (labels)
00058 {
00059 if (strncmp(target, "TEST", 4)==0)
00060 set_test_labels(labels);
00061 else
00062 set_train_labels(labels);
00063
00064 return true;
00065 }
00066 else
00067 SG_ERROR("Loading labels failed.\n");
00068
00069 SG_UNREF(file);
00070 }
00071
00072 return false;
00073 }
00074
00075 bool CGUILabels::save(char* param)
00076 {
00077 bool result=false;
00078 return result;
00079 }
00080
00081 CLabels* CGUILabels::infer_labels(float64_t* lab, int32_t len)
00082 {
00083 CLabels* labels=NULL;
00084
00085 bool binary=true;
00086 bool multiclass=true;
00087 for (int32_t i=0; i<len; i++)
00088 {
00089 if (lab[i]!=-1 && lab[i]!=+1)
00090 binary=false;
00091
00092 if (lab[i]<0 || lab[i]!=int(lab[i]))
00093 multiclass=false;
00094
00095 if (binary == false && multiclass == false)
00096 {
00097 labels=new CRegressionLabels(SGVector<float64_t>(lab, len));
00098 break;
00099 }
00100 }
00101
00102 if (multiclass)
00103 labels=new CMulticlassLabels(SGVector<float64_t>(lab, len));
00104 if (binary)
00105 labels=new CBinaryLabels(SGVector<float64_t>(lab, len));
00106
00107 return labels;
00108 }