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

svm_problem* Impala::Core::Training::TrainDataSrcKernelTable::MakeProblem ( Table::QuidTable mask  )  [inline, private]

Definition at line 83 of file TrainDataSrcKernelTable.h.

References Impala::Core::Feature::FeatureTable::FindQuid(), Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Get1(), Impala::Core::Table::TableTem< Col1T, Col2T, Col3T, Col4T, Col5T, Col6T, Col7T, Col8T, Col9T >::Get2(), Impala::Core::Vector::VectorTem< ElemT >::GetData(), Impala::Core::Feature::FeatureTable::GetFeatureVectorLength(), Impala::Core::Table::QuidTable::GetIndex(), Impala::Core::Feature::FeatureTable::GetQuidTable(), ILOG_ERROR, svm_node::index, Impala::Core::Table::AnnotationTable::IsNegative(), Impala::Core::Table::AnnotationTable::IsPositive(), svm_problem::l, Impala::Core::Training::TrainDataSrc::mAnnotation, mTable, Impala::Core::Table::Table::Size(), svm_node::value, svm_problem::x, and svm_problem::y.

Referenced by MakeSvmProblem().

00084     {
00085         int vectorLength = mTable->GetFeatureVectorLength();
00086         Table::QuidTable* quids = mTable->GetQuidTable();
00087         svm_problem* problem = new svm_problem;
00088         problem->l = mask->Size();
00089         problem->y = new double[problem->l];
00090         problem->x = new struct svm_node *[problem->l];
00091         struct svm_node* nodes = new struct svm_node[problem->l*(2+vectorLength)];
00092         for(int i=0 ; i<problem->l ; i++)
00093         {
00094             Quid q = mask->Get1(i);
00095             problem->y[i] = 0;
00096             if(mAnnotation->IsPositive(q))
00097                 problem->y[i] = 1;
00098             else if(mAnnotation->IsNegative(q))
00099                 problem->y[i] = -1;
00100 
00101             problem->x[i] = &nodes[i*(vectorLength+2)];
00102             problem->x[i][0].index = 0;
00103             problem->x[i][0].value = quids->GetIndex(q)+1;
00104             int rank = mTable->FindQuid(q);
00105             if(rank >= mTable->Size())
00106                 ILOG_ERROR("couldn't find quid in mTable table");
00107             Vector::VectorTem<double> vec = mTable->Get2(rank);
00108             const double* values = vec.GetData();
00109             int j;
00110             for(j=0 ; j<vectorLength ; j++)
00111             {
00112                 problem->x[i][j+1].index = j+1;
00113                 problem->x[i][j+1].value = values[j];
00114             }
00115             problem->x[i][j+1].index = -1;
00116         }
00117         return problem;
00118     }

Here is the call graph for this function:


Generated on Fri Mar 19 11:25:10 2010 for ImpalaSrc by  doxygen 1.5.1