[pktools] 274/375: working on pkfssvm, label names via global ConfusionMatrix seems not to work

Bas Couwenberg sebastic at xs4all.nl
Wed Dec 3 21:54:21 UTC 2014


This is an automated email from the git hooks/post-receive script.

sebastic-guest pushed a commit to branch upstream-master
in repository pktools.

commit 3a5b4d8fe102c0f5178056420154ddef69a367f3
Author: Pieter Kempeneers <kempenep at gmail.com>
Date:   Mon Jun 2 20:38:04 2014 +0200

    working on pkfssvm, label names via global ConfusionMatrix seems not to work
---
 src/algorithms/FeatureSelector.h |  5 ++---
 src/apps/pkdiff.cc               |  3 +++
 src/apps/pkfsann.cc              |  8 ++++----
 src/apps/pkfssvm.cc              | 13 +++++++------
 4 files changed, 16 insertions(+), 13 deletions(-)

diff --git a/src/algorithms/FeatureSelector.h b/src/algorithms/FeatureSelector.h
index b57771e..44ef7e5 100644
--- a/src/algorithms/FeatureSelector.h
+++ b/src/algorithms/FeatureSelector.h
@@ -38,7 +38,7 @@ class FeatureSelector
   template<class T> double forwardUnivariate(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures, short verbose=0);
   template<class T> double forward(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures, short verbose=0);
   template<class T> double backward(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int minFeatures, short verbose=0);
-  template<class T> double floating(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures=0, short verbose=0);
+  template<class T> double floating(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures=0, double epsilon=0.001, short verbose=0);
   template<class T> double bruteForce(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures=0, short verbose=0);
   
   private:
@@ -148,8 +148,7 @@ template<class T> double FeatureSelector::backward(std::vector< Vector2d<T> >& v
 }
 
 //floating search
-template<class T> double FeatureSelector::floating(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures, short verbose){
-  double epsilon=0.001;
+template<class T> double FeatureSelector::floating(std::vector< Vector2d<T> >& v, double (*getCost)(const std::vector< Vector2d<T> >&), std::list<int>& subset, int maxFeatures, double epsilon, short verbose){
   std::vector<T> cost;
   int maxLevels=v[0][0].size();
   if(maxFeatures<1)
diff --git a/src/apps/pkdiff.cc b/src/apps/pkdiff.cc
index f07d617..2eb469c 100644
--- a/src/apps/pkdiff.cc
+++ b/src/apps/pkdiff.cc
@@ -341,6 +341,7 @@ int main(int argc, char *argv[])
 	      referenceValue=readFeature->GetFieldAsInteger(readFeature->GetFieldIndex(labelref_opt[0].c_str()));
 	    if(verbose_opt[0])
 	      cout << "reference value: " << referenceValue << endl;
+	    
 	    bool pixelFlagged=false;
 	    bool maskFlagged=false;
 	    for(int iflag=0;iflag<nodata_opt.size();++iflag){
@@ -365,6 +366,7 @@ int main(int argc, char *argv[])
 	    //check if i_centre is out of bounds
 	    if(static_cast<int>(i_centre)<0||static_cast<int>(i_centre)>=inputReader.nrOfCol())
 	      continue;
+
 	    if(output_opt.size()){
 	      writeFeature = OGRFeature::CreateFeature(writeLayer->GetLayerDefn());
 	      assert(readFeature);
@@ -442,6 +444,7 @@ int main(int argc, char *argv[])
 	      }
 	    }
 	    //at this point we know the values for the entire window
+
 	    if(homogeneous_opt[0]){//only centre pixel
 	      int j=j_centre;
 	      int i=i_centre;
diff --git a/src/apps/pkfsann.cc b/src/apps/pkfsann.cc
index 51d8b98..ea23cc6 100644
--- a/src/apps/pkfsann.cc
+++ b/src/apps/pkfsann.cc
@@ -565,19 +565,19 @@ int main(int argc, char *argv[])
   list<int> subset;//set of selected features (levels) for each class combination
   FeatureSelector selector;
   try{
-    if(maxFeatures==nFeatures){
+    if(maxFeatures>=nFeatures){
       subset.clear();
       for(int ifeature=0;ifeature<nFeatures;++ifeature)
         subset.push_back(ifeature);
       cost=getCost(trainingFeatures);
     }
     else{
-      while(fabs(cost-previousCost)>epsilon_cost_opt[0]){
+      while(fabs(cost-previousCost)>=epsilon_cost_opt[0]){
         previousCost=cost;
         switch(selMap[selector_opt[0]]){
         case(SFFS):
           subset.clear();//needed to clear in case of floating and brute force search
-          cost=selector.floating(trainingFeatures,&getCost,subset,maxFeatures,verbose_opt[0]);
+          cost=selector.floating(trainingFeatures,&getCost,subset,maxFeatures,epsilon_cost_opt[0],verbose_opt[0]);
           break;
         case(SFS):
           cost=selector.forward(trainingFeatures,&getCost,subset,maxFeatures,verbose_opt[0]);
@@ -594,7 +594,7 @@ int main(int argc, char *argv[])
           exit(1);
           break;
         }
-        if(verbose_opt[0]){
+        if(verbose_opt[0]>1){
           std::cout << "cost: " << cost << std::endl;
           std::cout << "previousCost: " << previousCost << std::endl;
           std::cout << std::setprecision(12) << "cost-previousCost: " << cost - previousCost << " ( " << epsilon_cost_opt[0] << ")" << std::endl;
diff --git a/src/apps/pkfssvm.cc b/src/apps/pkfssvm.cc
index 5dfccf6..2a6b798 100644
--- a/src/apps/pkfssvm.cc
+++ b/src/apps/pkfssvm.cc
@@ -176,8 +176,9 @@ double getCost(const vector<Vector2d<float> > &trainingFeatures)
 	x_test[nFeatures].index=-1;
 	double predict_label=0;
 	//todo: make distinction between svm_predict and svm_predict_probability?
-	assert(svm_check_probability_model(svm));
-	predict_label = svm_predict_probability(svm,x_test,&(result[0]));
+	// assert(svm_check_probability_model(svm));
+	// predict_label = svm_predict_probability(svm,x_test,&(result[0]));
+	predict_label = svm_predict(svm,x_test);
 	string refClassName=nameVector[iclass];
 	string className=nameVector[static_cast<short>(predict_label)];
 	if(classValueMap.size())
@@ -591,19 +592,19 @@ int main(int argc, char *argv[])
   list<int> subset;//set of selected features (levels) for each class combination
   FeatureSelector selector;
   try{
-    if(maxFeatures==nFeatures){
+    if(maxFeatures>=nFeatures){
       subset.clear();
       for(int ifeature=0;ifeature<nFeatures;++ifeature)
         subset.push_back(ifeature);
       cost=getCost(trainingFeatures);
     }
     else{
-      while(fabs(cost-previousCost)>epsilon_cost_opt[0]){
+      while(fabs(cost-previousCost)>=epsilon_cost_opt[0]){
         previousCost=cost;
         switch(selMap[selector_opt[0]]){
         case(SFFS):
           subset.clear();//needed to clear in case of floating and brute force search
-          cost=selector.floating(trainingFeatures,&getCost,subset,maxFeatures,verbose_opt[0]);
+          cost=selector.floating(trainingFeatures,&getCost,subset,maxFeatures,epsilon_cost_opt[0],verbose_opt[0]);
           break;
         case(SFS):
           cost=selector.forward(trainingFeatures,&getCost,subset,maxFeatures,verbose_opt[0]);
@@ -620,7 +621,7 @@ int main(int argc, char *argv[])
           exit(1);
           break;
         }
-        if(verbose_opt[0]){
+        if(verbose_opt[0]>1){
           std::cout << "cost: " << cost << std::endl;
           std::cout << "previousCost: " << previousCost << std::endl;
           std::cout << std::setprecision(12) << "cost-previousCost: " << cost - previousCost << " ( " << epsilon_cost_opt[0] << ")" << std::endl;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/pktools.git



More information about the Pkg-grass-devel mailing list