cascade.cpp

Go to the documentation of this file.
00001 
00005 #include <assert.h>
00006 #include "cascade.h"
00007 
00008 namespace lemga {
00009 
00010 bool Cascade::serialize (std::ostream& os, ver_list& vl) const {
00011     SERIALIZE_PARENT(Aggregating, os, vl, 1);
00012     assert(lm.size() == upper_margin.size() &&
00013            lm.size() == lower_margin.size());
00014     for (UINT i = 0; i < lm.size(); ++i)
00015         if (!(os << '(' << lower_margin[i] << ','
00016               << upper_margin[i] << ')' << ' ')) return false;
00017     return true;
00018 }
00019 
00020 bool Cascade::unserialize (std::istream& is, ver_list& vl, const id_t& d) {
00021     if (d != id() && d != empty_id) return false;
00022     UNSERIALIZE_PARENT(Aggregating, is, vl, 1, v);
00023 
00024     const UINT n = lm.size();
00025     upper_margin.resize(n);
00026     lower_margin.resize(n);
00027 
00028     for (std::vector<REAL>::iterator
00029              pu = upper_margin.begin(), pl = lower_margin.begin();
00030          pu != upper_margin.end(); ++pu, ++pl)
00031     {
00032         char c;
00033         if (!(is >> c >> *pl >> c >> *pu >> c)) return false;
00034         if (*pl > *pu) return false;
00035     }
00036 
00037     return true;
00038 }
00039 
00040 Output Cascade::operator() (const Input& x) const {
00041     assert(n_in_agg > 0 && n_in_agg <= lm.size());
00042     assert(lm.size() == upper_margin.size() &&
00043            lm.size() == lower_margin.size());
00044 
00045     for (UINT i = 0; i < n_in_agg-1; ++i) {
00046         assert(lm[i] != NULL);
00047         Output out = (*lm[i])(x);
00048         REAL b = belief(*lm[i], x, out);
00049         //assert(lower_margin[i] < upper_margin[i]);
00050         if (b > upper_margin[i] || b < lower_margin[i])
00051             return out;
00052     }
00053 
00054     return (*lm[n_in_agg-1])(x);
00055 }
00056 
00058 REAL Cascade::belief (const LearnModel& l, const Input& x,
00059                       const Output& y) const {
00060     assert(l(x) == y);
00061     assert(l.n_output() == 1);
00062     return y[0];
00063 }
00064 
00065 } // namespace lemga

Generated on Mon Jan 9 23:43:23 2006 for LEMGA by  doxygen 1.4.6