Changeset 584


Ignore:
Timestamp:
May 18, 2006, 9:11:06 AM (16 years ago)
Author:
Markus Ringnér
Message:

Fixed so NCC and IGP works when there are NaNs? in centroids.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/c++_tools/classifier/IGP.cc

    r581 r584  
    1111
    1212#include <cassert>
     13#include <cmath>
    1314#include <limits>
    1415
     
    2526    igp_=gslapi::vector(target_.nof_classes());
    2627    for(u_int i=0; i<target.size(); i++) {
     28      std::cout << "Processing sample: " << i << std::endl;
    2729      u_int neighbor=i;
    2830      double mindist=std::numeric_limits<double>::max();
    2931      gslapi::vector a;
    3032      convert(DataLookup1D(matrix_,i,false),a);
    31      
     33      gslapi::vector wa(a.size(),0);
     34      for(size_t k=0; k<a.size(); k++)  { // take care of missing values
     35          if(!std::isnan(a(k)))
     36            wa(k)=1.0;
     37      }
     38
    3239      for(u_int j=0; j<target.size(); j++) {           
    3340        gslapi::vector b;
    3441        convert(DataLookup1D(matrix_,j,false),b);
    35         double dist=distance_(a,b);
     42        gslapi::vector wb(b.size(),0);
     43        for(size_t k=0; k<b.size(); k++)  { // take care of missing values
     44          if(!std::isnan(b(k)))
     45            wb(k)=1.0;
     46        }
     47        double dist=distance_(a,b,wa,wb);
    3648        if(j!=i && dist<mindist) {
    3749          mindist=dist;
     
    4355     
    4456    }
    45     for(u_int i=0; i<target.nof_classes(); i++)
    46       igp_(i)/=target.size(i);   
     57    for(u_int i=0; i<target.nof_classes(); i++) {
     58      igp_(i)/=static_cast<double>(target.size(i));
     59      std::cout << igp_(i) << "\t" << target.size(i) << std::endl;
     60    }
    4761  }
    4862 
  • trunk/c++_tools/classifier/NCC.cc

    r543 r584  
    107107        w(i)=1.0;
    108108    }
    109     for(size_t j=0; j<centroids_.columns(); j++)
    110       prediction(j)=distance_(value,gslapi::vector(centroids_,j,false),w, w);   
     109    for(size_t j=0; j<centroids_.columns(); j++) {
     110      gslapi::vector centroid=gslapi::vector(centroids_,j,false);
     111      gslapi::vector wc(centroid.size(),0);
     112      for(size_t i=0; i<centroid.size(); i++)  { // take care of missing values
     113        if(!std::isnan(centroid(i)))
     114          wc(i)=1.0;
     115      }
     116      prediction(j)=distance_(value,centroid,w,wc);   
     117    }
    111118  }
    112119
  • trunk/test/ncc_test.cc

    r505 r584  
    11// $Id$
    22
     3#include <c++_tools/classifier/IGP.h>
    34#include <c++_tools/classifier/MatrixLookup.h>
    45#include <c++_tools/classifier/NCC.h>
     
    7172  }
    7273 
     74
     75  // Testing IGP
     76  *error << "testing igp" << std::endl;
     77  classifier::IGP igp(dataview,targets,pearson);
     78  *error << igp.score() << std::endl;
     79
     80
    7381  if (error!=&std::cerr)
    7482    delete error;
Note: See TracChangeset for help on using the changeset viewer.