| 478 | //! \brief class for on-line model selection |
| 479 | class ModelComparator: public ProdBM{ |
| 480 | protected: |
| 481 | multiBM weights; |
| 482 | public: |
| 483 | void bayes(const vec &yt, const vec &cond){ |
| 484 | vec w_nn(no_bms()); |
| 485 | for (int i=0; i<no_bms(); i++){ |
| 486 | bm(i)->bayes(yt,cond); |
| 487 | w_nn(i) += bm(i)->_ll(); |
| 488 | } |
| 489 | vec w=exp(w_nn-max(w_nn)); |
| 490 | weights.bayes(w/sum(w)); |
| 491 | } |
| 492 | void validate(){ |
| 493 | ProdBM::validate(); |
| 494 | weights.validate(); |
| 495 | } |
| 496 | void from_setting(const Setting& set){ |
| 497 | ProdBM::from_setting(set); |
| 498 | UI::get(weights.frg, set, "frg",UI::optional); |
| 499 | } |
| 500 | void to_setting(Setting& set) const{ |
| 501 | ProdBM::to_setting(set); |
| 502 | UI::save(weights.frg, set, "frg"); |
| 503 | } |
| 504 | }; |
| 505 | |