Changeset 1156


Ignore:
Timestamp:
Feb 26, 2008, 9:46:49 AM (16 years ago)
Author:
Markus Ringnér
Message:

Refs. #335, fixed for KNN

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/configure.ac

    r1148 r1156  
    137137  [quiet_nan=no])
    138138AC_MSG_RESULT($quiet_nan)
     139# Check for infinity support for doubles in OS
     140# At run-time, but this has the disadvantage that yat cannot be built 
     141# for cross-compilation
     142AC_MSG_CHECKING([if std::numeric_limits<>::has_infinity is true])
     143AC_RUN_IFELSE(
     144  [AC_LANG_PROGRAM(
     145    [#include <limits>],
     146    [return !std::numeric_limits<double>::has_infinity])],
     147  [has_infinity=yes],
     148  [has_infinity=no])
     149AC_MSG_RESULT($has_infinity)
     150
    139151
    140152# yat specific settings
     
    182194  Yat will not work on this system!])
    183195fi
     196
     197# No support for infinity is fatal -- sub-sequent compilation, or execution
     198# of created binary, will fail.
     199if test "${has_infinity}" = "no" ; then
     200  all_reqs_ok="false"
     201  AC_MSG_WARN([
     202  Support for infinity required.
     203  Yat will not work on this system!])
     204fi
     205
    184206
    185207# Non-existing BLAS is fatal -- sub-sequent compilation will fail.
  • trunk/doc/concepts.doxygen

    r1115 r1156  
    9999distance. For each class the function calculates a total vote based on
    100100the the nearest neighbors of the test sample that belong to the
    101 class. The total vote for each class is stored in the vector \a prediction.
     101class. The total vote for each class is stored in the vector \a
     102prediction.  The function should be implemented such that nearest
     103neighbors with distance infinity do not vote.
    102104
    103105\section Implementations
  • trunk/yat/classifier/KNN.h

    r1144 r1156  
    245245        (*distances)(i,j) = distance_(training1.begin(), training1.end(),
    246246                                      test1.begin());
     247        // If the distance is NaN (no common variables with non-zero weights),
     248        // the distance is set to infinity to be sorted as a neighbor at the end
     249        if(std::isnan((*distances)(i,j)))
     250          (*distances)(i,j)=std::numeric_limits<double>::infinity();
    247251      }
    248252    }
  • trunk/yat/classifier/KNN_ReciprocalRank.cc

    r1112 r1156  
    77#include "yat/utility/VectorMutable.h"
    88
     9#include <cmath>
    910#include <vector>
    1011
     
    1920  {           
    2021    for(size_t j=0;j<k_sorted.size();j++)
    21       prediction(target(k_sorted[j]))+=1.0/(j+1);               
     22      if(!std::isinf(distance(k_sorted[j])))
     23         prediction(target(k_sorted[j]))+=1.0/(j+1);               
    2224  }
    2325
  • trunk/yat/classifier/KNN_Uniform.cc

    r1142 r1156  
    77#include "yat/utility/VectorMutable.h"
    88
     9#include <cmath>
    910#include <vector>
    1011
     
    1920  {           
    2021    for(size_t j=0;j<k_sorted.size();j++)
    21       prediction(target(k_sorted[j]))+=1.0;           
     22      if(!std::isinf(distance(k_sorted[j])))
     23         prediction(target(k_sorted[j]))+=1.0;           
    2224  }
    2325
Note: See TracChangeset for help on using the changeset viewer.