Home || Visual Search || Applications || Architecture || Important Messages || OGL || Src

ApplyConceptsHelperFik.h

Go to the documentation of this file.
00001 #ifndef Impala_Core_Training_ApplyConceptsHelperFik_h
00002 #define Impala_Core_Training_ApplyConceptsHelperFik_h
00003 
00004 #include "Core/Training/ApplyConceptsHelper.h"
00005 #include "Persistency/FeatureTableRepository.h"
00006 #include "Persistency/FikSvmRepository.h"
00007 #include "Util/SimpleMap.h"
00008 
00009 namespace Impala
00010 {
00011 namespace Core
00012 {
00013 namespace Training
00014 {
00015 
00016 
00017 class ApplyConceptsHelperFik : public ApplyConceptsHelper
00018 {
00019 public:
00020 
00021     ApplyConceptsHelperFik() 
00022     {
00023     }
00024 
00025     virtual 
00026     ~ApplyConceptsHelperFik()
00027     {
00028         mModels.Clear();
00029     }
00030 
00031     void
00032     Initialise(Database::RawDataSet* annoSet, const ModelLocator& modelLoc)
00033     {
00034         FikSvm* svm = Persistency::FikSvmRepository().Get(modelLoc);
00035         mFeatureDefs = *(svm->GetFeatureList());
00036         mModels.Add(modelLoc.ToString(), svm);
00037     }
00038 
00039     FeatureTable*
00040     LoadFeatures(const FeatureLocator& featLoc)
00041     {
00042         typedef Persistency::FeatureTableRepository FeatureTableRepository;
00043         int sizeCheck = -1;
00044         for (int i=0 ; i<mFeatureDefs.Size() ; i++)
00045         {
00046             FeatureLocator fLoc = featLoc;
00047             fLoc.SetFeatureString(mFeatureDefs.GetFeature(i));
00048             FeatureTable* feature = FeatureTableRepository().Get(fLoc);
00049             if (sizeCheck == -1)
00050             {
00051                 sizeCheck = feature->Size();
00052                 ILOG_INFO("size of apply set is " << sizeCheck);
00053             }
00054             if (feature->Size() != sizeCheck)
00055             {
00056                 ILOG_ERROR("Size mismatch in the FeatureData for the dataset to"
00057                            << " apply to: have " << sizeCheck << " and " <<
00058                            feature->Size());
00059                 return 0;
00060             }
00061             mFeatures.push_back(feature);
00062         }
00063         return mFeatures[0];
00064     }
00065 
00066     Table::ScoreTable*
00067     Predict(const ModelLocator& loc)
00068     {
00069         FikSvm* svm = 0;
00070         if (!mModels.Get(loc.ToString(), svm))
00071         {
00072             svm = Persistency::FikSvmRepository().Get(loc);
00073             mModels.Add(loc.ToString(), svm);
00074         }
00075 
00076         Table::ScoreTable* scores = new Table::ScoreTable();
00077         int nrVec = mFeatures[0]->Size();
00078         for (int v=0 ; v<nrVec ; v++)
00079         {
00080             Real64 score = 0;
00081             for (int f=0 ; f<mFeatureDefs.Size() ; f++)
00082             {
00083                 FeatureTable::VectorReal64 vec = mFeatures[f]->Get2(v);
00084                 Real64 subScore = svm->Apply(f, vec);
00085                 subScore += svm->GetRho(); // correct for incremental feature
00086                 subScore *= mFeatureDefs.GetWeight(f);
00087                 score += subScore;
00088             }
00089             score /= mFeatureDefs.GetTotalWeight();
00090             score -= svm->GetRho(); // correct for incremental feature
00091 
00092             score = svm->PredictProbability(score);
00093             scores->Add(mFeatures[0]->Get1(v), score);
00094         }
00095         return scores;
00096     }
00097 
00098     void
00099     UnloadFeatures()
00100     {
00101         for (int i=0 ; i<mFeatures.size() ; i++)
00102             delete mFeatures[i];
00103         mFeatures.clear();
00104     }
00105 
00106 private:
00107 
00108     Feature::WeightedFeatureList           mFeatureDefs;
00109     std::vector<FeatureTable*>             mFeatures;
00110     Util::SimpleMapDelete<String, FikSvm*> mModels;
00111 
00112     ILOG_VAR_DEC;
00113 };
00114 
00115 ILOG_VAR_INIT(ApplyConceptsHelperFik, Impala.Core.Training);
00116 
00117 } //namespace
00118 } //namespace
00119 } //namespace
00120 
00121 #endif

Generated on Thu Jan 13 09:04:41 2011 for ImpalaSrc by  doxygen 1.5.1