test-GBC.C
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include "Component/ModelManager.H"
00039 #include "Learn/GentleBoostComponent.H"
00040 #include "Image/Image.H"
00041 #include "Image/ImageSet.H"
00042 #include "Image/Kernels.H"
00043 #include "Image/MathOps.H"
00044 #include "Image/ShapeOps.H"
00045 #include "Raster/Raster.H"
00046 #include "Util/log.H"
00047 #include "rutz/rand.h"
00048
00049 #include <cmath>
00050 #include <dirent.h>
00051 #include <fstream>
00052 #include <iostream>
00053 #include <string>
00054 #include <vector>
00055
00056
00057
00058
00059
00060 void makeData(const int numCategories, const uint sampleDim, const uint dataDim, std::vector<std::vector<float> >& data, std::vector<int>& labels, bool printData);
00061
00062
00063 int main(int argc, char **argv)
00064 {
00065 MYLOGVERB = LOG_INFO;
00066 ModelManager *mgr = new ModelManager("Test GentleBoost Component");
00067
00068 nub::ref<GentleBoostComponent> gbc(new GentleBoostComponent(*mgr));
00069 mgr->addSubComponent(gbc);
00070
00071 mgr->exportOptions(MC_RECURSE);
00072
00073 if (mgr->parseCommandLine(
00074 (const int)argc, (const char**)argv, "", 0, 0) == false)
00075 return 1;
00076
00077
00078 mgr->start();
00079
00080
00081
00082 uint nDim=4;
00083 int numCategories=3;
00084 int numSamples=100;
00085
00086 std::vector<std::vector<float> > traindata;
00087 std::vector<int> trainlabels;
00088
00089 makeData(numCategories,numSamples,nDim,traindata,trainlabels,false);
00090
00091 for(int i=0;i<numSamples;i++)
00092 gbc->addTrainVector(traindata[i],trainlabels[i]);
00093
00094
00095 gbc->train();
00096
00097
00098 int numCorrect=0;
00099 for(int i=0;i<numSamples;i++)
00100 {
00101 int predId = gbc->predict(traindata[i]);
00102 if(trainlabels[i]==predId) numCorrect++;
00103 }
00104 printf("Training Accuracy:[Correct/Total]=[%d/%Zu]:%f\n",numCorrect,trainlabels.size(),numCorrect/float(trainlabels.size()));
00105
00106 std::vector<std::vector<float> > testdata;
00107 std::vector<int> testlabels;
00108
00109 makeData(numCategories,numSamples,nDim,testdata,testlabels,false);
00110
00111 numCorrect = 0;
00112 for(int i=0;i<numSamples;i++)
00113 {
00114 std::map<int,float> testPDF = gbc->predictPDF(testdata[i]);
00115 int predId = gbc->getMostLikelyClass(testPDF);
00116 if(testlabels[i]==predId) numCorrect++;
00117 printf("Guess %d [",predId);
00118 std::map<int,float>::iterator litr;
00119 for(litr=testPDF.begin();litr!=testPDF.end();litr++)
00120 {
00121 printf("(%d)%f, ",litr->first,litr->second);
00122 }
00123 printf("] *** Ground Truth %d\n",testlabels[i]);
00124 }
00125 printf("Accuracy:[Correct/Total]=[%d/%Zu]:%f\n",numCorrect,testlabels.size(),numCorrect/float(testlabels.size()));
00126
00127 mgr->stop();
00128
00129
00130 }
00131
00132
00133 void makeData(const int numCategories, const uint sampleDim, const uint dataDim, std::vector<std::vector<float> >& data, std::vector<int>& labels, bool printData)
00134 {
00135
00136 rutz::urand rgen(time((time_t*)0)+getpid());
00137
00138 data = std::vector<std::vector<float> >(sampleDim);
00139
00140 for(uint i=0;i<data.size();i++)
00141 {
00142 int l=rgen.idraw(numCategories)+1;
00143 if(printData) printf("data[][%u]: l=%d; ",i,l);
00144 for(uint j=0;j<dataDim;j++)
00145 {
00146 data[i].push_back(rgen.fdraw_range(l-0.75,l+0.75));
00147 if(printData) printf("%f, ",data[i][j]);
00148 }
00149 if(printData) printf("\n");
00150 labels.push_back(l);
00151 }
00152 }
00153
00154
00155
00156
00157
00158
00159