Definition at line 23 of file mainTrainModel.cpp. References Impala::Util::PropertySet::Add(), Impala::Core::Training::AveragePrecision::Compute(), Impala::Core::Training::AveragePrecision::ComputeReversed(), Impala::Util::PropertySet::GetInt(), Impala::Core::Training::Factory::GetModelLocator(), Impala::Core::Training::Factory::GetProperties(), ILOG_ERROR, ILOG_VAR, Impala::Core::Training::Factory::MakeAnnotation(), Impala::Core::Training::Factory::MakeClassifier(), Impala::Core::Training::Factory::MakeConceptList(), Impala::Core::Training::Factory::MakeDataSrc(), Impala::Core::Training::Classifier::Predict(), Impala::Util::Mpi::SelectWorkLoadInPlace(), Impala::Persistency::ModelLocator::SetConcept(), Impala::Util::PropertySet::Size(), and Impala::Core::Training::Classifier::Train(). Referenced by mainTrainModel(). 00024 { 00025 ILOG_VAR(Impala.Application.TrainModel); 00026 std::vector<String> conceptList = factory->MakeConceptList(); 00027 if (!distKernel) 00028 Util::Mpi::SelectWorkLoadInPlace(&conceptList); 00029 for (int i=0 ; i<conceptList.size(); i++) 00030 { 00031 String concept = conceptList[i]; 00032 ModelLocator modelLoc = factory->GetModelLocator(); 00033 00034 if (SvmRepository().Exists(modelLoc)) 00035 { 00036 ILOG_WARNING_NODE("cannot create model for " << concept << 00037 "; skipping concept"); 00038 continue; 00039 } 00040 ILOG_INFO_NODE("concept " << concept); 00041 00042 // read params 00043 modelLoc.SetConcept(concept); 00044 Util::PropertySet* params = BestFileRepository().Get(modelLoc); 00045 params->Add("probability", 1); 00046 int cache = factory->GetProperties()->GetInt("cache"); 00047 params->Add("cache", cache); 00048 ILOG_INFO_NODE(*params); 00049 if (params->Size() == 0) 00050 { 00051 ILOG_WARNING_NODE("no best file found for " << concept << 00052 "; skipping concept"); 00053 continue; 00054 } 00055 00056 // load annotation 00057 Table::AnnotationTable* annotation = factory->MakeAnnotation(concept); 00058 if (annotation == 0) 00059 { 00060 ILOG_WARNING_NODE("no annotation found for " << concept << 00061 "; skipping concept"); 00062 continue; 00063 } 00064 annotation->Sort(); 00065 00066 // compute model 00067 TrainDataSrc* src = factory->MakeDataSrc(annotation); 00068 Classifier* classifier = factory->MakeClassifier("svm"); 00069 classifier->Train(params, src); 00070 Svm* svm = static_cast<Svm*>(classifier); 00071 if (svm) 00072 SvmRepository().Add(modelLoc, svm); 00073 else 00074 ILOG_ERROR("Rogue classifier"); 00075 00076 // score on self 00077 Table::ScoreTable* ranking = classifier->Predict(src); 00078 Training::AveragePrecision ap(annotation); 00079 double score = ap.Compute(ranking); 00080 double scoreRev = ap.ComputeReversed(ranking); 00081 if (score < scoreRev) 00082 { 00083 ILOG_ERROR_NODE("reversed ranking score (" << scoreRev << 00084 ") > normal ranking score (" << score << 00085 ") for " << concept << " => logic error in svm" << 00086 " (try setting C=1 in .best file)"); 00087 } 00088 delete ranking; 00089 ILOG_INFO_NODE("score on self = " << score); 00090 Util::PropertySet scoreProp; 00091 scoreProp.Add("scoreOnSelf", score); 00092 ScoreFileRepository().Add(modelLoc, &scoreProp); 00093 00094 delete classifier; 00095 delete src; 00096 delete annotation; 00097 delete params; 00098 } 00099 return 0; 00100 }
Here is the call graph for this function: ![]()
|