Changeset 713
- Timestamp:
- 11/10/09 11:03:09 (15 years ago)
- Location:
- library
- Files:
-
- 1 added
- 15 modified
Legend:
- Unmodified
- Added
- Removed
-
library/bdm/base/bdmbase.cpp
r700 r713 156 156 } 157 157 158 mat epdf::sample_m ( int N ) const {158 mat epdf::sample_mat ( int N ) const { 159 159 mat X = zeros ( dim, N ); 160 160 for ( int i = 0; i < N; i++ ) X.set_col ( i, this->sample() ); … … 162 162 } 163 163 164 vec epdf::evallog_m ( const mat &Val ) const {164 vec epdf::evallog_mat ( const mat &Val ) const { 165 165 vec x ( Val.cols() ); 166 166 for ( int i = 0; i < Val.cols(); i++ ) { … … 171 171 } 172 172 173 vec epdf::evallog_m ( const Array<vec> &Avec ) const {173 vec epdf::evallog_mat ( const Array<vec> &Avec ) const { 174 174 vec x ( Avec.size() ); 175 175 for ( int i = 0; i < Avec.size(); i++ ) { … … 180 180 } 181 181 182 mat pdf::samplecond_m ( const vec &cond, int N ) {182 mat pdf::samplecond_mat ( const vec &cond, int N ) { 183 183 mat M ( dimension(), N ); 184 184 for ( int i = 0; i < N; i++ ) { -
library/bdm/base/bdmbase.h
r712 r713 429 429 430 430 //! Returns \param N samples from the density conditioned on \c cond, \f$x \sim epdf(rv|cond)\f$. \param cond is numeric value of \c rv 431 virtual mat samplecond_m ( const vec &cond, int N );431 virtual mat samplecond_mat ( const vec &cond, int N ); 432 432 433 433 //! Shortcut for conditioning and evaluation of the internal epdf. In some cases, this operation can be implemented efficiently. … … 438 438 439 439 //! Matrix version of evallogcond 440 virtual vec evallogcond_m ( const mat &Yt, const vec &cond ) {440 virtual vec evallogcond_mat ( const mat &Yt, const vec &cond ) { 441 441 vec v ( Yt.cols() ); 442 442 for ( int i = 0; i < Yt.cols(); i++ ) { … … 447 447 448 448 //! Array<vec> version of evallogcond 449 virtual vec evallogcond_m ( const Array<vec> &Yt, const vec &cond ) {449 virtual vec evallogcond_mat ( const Array<vec> &Yt, const vec &cond ) { 450 450 bdm_error ( "Not implemented" ); 451 451 return vec(); … … 534 534 535 535 //! Returns N samples, \f$ [x_1 , x_2 , \ldots \ \f$ from density \f$ f_x(rv)\f$ 536 virtual mat sample_m ( int N ) const;536 virtual mat sample_mat ( int N ) const; 537 537 538 538 //! Compute log-probability of argument \c val … … 544 544 545 545 //! Compute log-probability of multiple values argument \c val 546 virtual vec evallog_m ( const mat &Val ) const;546 virtual vec evallog_mat ( const mat &Val ) const; 547 547 548 548 //! Compute log-probability of multiple values argument \c val 549 virtual vec evallog_m ( const Array<vec> &Avec ) const;549 virtual vec evallog_mat ( const Array<vec> &Avec ) const; 550 550 551 551 //! Return conditional density on the given RV, the remaining rvs will be in conditioning … … 669 669 double evallogcond ( const vec &val, const vec &cond ); 670 670 //! Efficient version of evallogcond for matrices 671 virtual vec evallogcond_m ( const mat &Dt, const vec &cond );671 virtual vec evallogcond_mat ( const mat &Dt, const vec &cond ); 672 672 //! Efficient version of evallogcond for Array<vec> 673 virtual vec evallogcond_m ( const Array<vec> &Dt, const vec &cond );673 virtual vec evallogcond_mat ( const Array<vec> &Dt, const vec &cond ); 674 674 //! Efficient version of samplecond 675 virtual mat samplecond_m ( const vec &cond, int N );675 virtual mat samplecond_mat ( const vec &cond, int N ); 676 676 677 677 void validate() { … … 1117 1117 1118 1118 //! Matrix version of logpred 1119 vec logpred_m ( const mat &Yt ) const {1119 vec logpred_mat ( const mat &Yt ) const { 1120 1120 vec tmp ( Yt.cols() ); 1121 1121 for ( int i = 0; i < Yt.cols(); i++ ) { … … 1253 1253 1254 1254 template<class EPDF> 1255 mat pdf_internal<EPDF>::samplecond_m ( const vec &cond, int N ) {1255 mat pdf_internal<EPDF>::samplecond_mat ( const vec &cond, int N ) { 1256 1256 condition ( cond ); 1257 1257 mat temp ( dimension(), N ); … … 1274 1274 1275 1275 template<class EPDF> 1276 vec pdf_internal<EPDF>::evallogcond_m ( const mat &Yt, const vec &cond ) {1276 vec pdf_internal<EPDF>::evallogcond_mat ( const mat &Yt, const vec &cond ) { 1277 1277 condition ( cond ); 1278 return iepdf.evallog_m ( Yt );1278 return iepdf.evallog_mat ( Yt ); 1279 1279 } 1280 1280 1281 1281 template<class EPDF> 1282 vec pdf_internal<EPDF>::evallogcond_m ( const Array<vec> &Yt, const vec &cond ) {1282 vec pdf_internal<EPDF>::evallogcond_mat ( const Array<vec> &Yt, const vec &cond ) { 1283 1283 condition ( cond ); 1284 return iepdf.evallog_m ( Yt );1284 return iepdf.evallog_mat ( Yt ); 1285 1285 } 1286 1286 -
library/bdm/stat/emix.h
r711 r713 159 159 return tmp; 160 160 }; 161 vec evallog_m ( const mat &Val ) const {161 vec evallog_mat ( const mat &Val ) const { 162 162 vec x = zeros ( Val.cols() ); 163 163 for ( int i = 0; i < w.length(); i++ ) { 164 x += w ( i ) * exp ( Coms ( i )->evallog_m ( Val ) );164 x += w ( i ) * exp ( Coms ( i )->evallog_mat ( Val ) ); 165 165 } 166 166 return log ( x ); 167 167 }; 168 /* 168 169 //! Auxiliary function that returns pdflog for each component 169 mat evallog_ M( const mat &Val ) const {170 mat evallog_mat ( const mat &Val ) const { 170 171 mat X ( w.length(), Val.cols() ); 171 172 for ( int i = 0; i < w.length(); i++ ) { 172 X.set_row ( i, w ( i ) *exp ( Coms ( i )->evallog_m ( Val ) ) );173 X.set_row ( i, w ( i ) *exp ( Coms ( i )->evallog_mat ( Val ) ) ); 173 174 } 174 175 return X; 175 176 }; 177 */ 176 178 177 179 shared_ptr<epdf> marginal ( const RV &rv ) const; … … 180 182 shared_ptr<pdf> condition ( const RV &rv ) const; 181 183 182 //Access methods184 //Access methods 183 185 //! returns a pointer to the internal mean value. Use with Care! 184 186 vec& _w() { … … 197 199 } 198 200 } 201 202 //! Load from structure with elements: 203 //! \code 204 //! { class='emix'; 205 //! pdfs = (..., ...); // list of pdfs in the mixture 206 //! weights = ( 0.5, 0.5 ); // weights of pdfs in the mixture 207 //! } 208 //! \endcode 209 //!@} 210 void from_setting ( const Setting &set ) { 211 UI::get ( Coms, set, "pdfs", UI::compulsory ); 212 213 if( !UI::get( w, set, "weights", UI::optional ) ) 214 { 215 int len = Coms.length(); 216 w.set_length( len ); 217 double default_weight = 1.0 / len; 218 for( int i=0; i < len; i++) 219 w(i) = default_weight; 220 } 221 } 199 222 }; 200 223 SHAREDPTR( emix ); 224 UIREGISTER ( emix ); 201 225 202 226 /*! … … 322 346 return res; 323 347 } 324 vec evallogcond_m ( const mat &Dt, const vec &cond ) {348 vec evallogcond_mat ( const mat &Dt, const vec &cond ) { 325 349 vec tmp ( Dt.cols() ); 326 350 for ( int i = 0; i < Dt.cols(); i++ ) { … … 329 353 return tmp; 330 354 }; 331 vec evallogcond_m ( const Array<vec> &Dt, const vec &cond ) {355 vec evallogcond_mat ( const Array<vec> &Dt, const vec &cond ) { 332 356 vec tmp ( Dt.length() ); 333 357 for ( int i = 0; i < Dt.length(); i++ ) { -
library/bdm/stat/exp_family.h
r693 r713 58 58 } 59 59 //!Evaluate normalized log-probability for many samples 60 virtual vec evallog_m (const mat &Val) const {60 virtual vec evallog_mat (const mat &Val) const { 61 61 vec x (Val.cols()); 62 62 for (int i = 0;i < Val.cols();i++) {x (i) = evallog_nn (Val.get_col (i)) ;} … … 64 64 } 65 65 //!Evaluate normalized log-probability for many samples 66 virtual vec evallog_m (const Array<vec> &Val) const {66 virtual vec evallog_mat (const Array<vec> &Val) const { 67 67 vec x (Val.length()); 68 68 for (int i = 0;i < Val.length();i++) {x (i) = evallog_nn (Val (i)) ;} -
library/bdm/stat/merger.cpp
r693 r713 151 151 if ( pdfs ( i )->dimension() == dim ) { 152 152 // no need for conditioning or marginalization 153 lw_src = pdfs ( i )->evallogcond_m ( Smp , vec(0));153 lw_src = pdfs ( i )->evallogcond_mat ( Smp , vec(0)); 154 154 } else { 155 155 // compute likelihood of marginal on the conditional variable -
library/tests/CMakeLists.txt
r700 r713 41 41 # using UnitTest++ 42 42 43 SET(unit_test_configurations egiw.cfg mlnorm.cfg edirich.cfg mprod.cfg generator.cfg epdfds.cfg pdfds.cfg test_user_info_input.cfg merger.cfg erroneous.cfg egamma.cfg test_user_info_external.cfg merger_error.cfg mgamma.cfg enorm.cfg )43 SET(unit_test_configurations egiw.cfg mlnorm.cfg edirich.cfg mprod.cfg generator.cfg epdfds.cfg pdfds.cfg test_user_info_input.cfg merger.cfg erroneous.cfg egamma.cfg test_user_info_external.cfg merger_error.cfg mgamma.cfg enorm.cfg mmix.cfg emix.cfg) 44 44 45 45 add_executable(testsuite arx_straux_test.cpp datalink_test.cpp datasource_test.cpp egiw_test.cpp emix_test.cpp epdf_test.cpp logger_test.cpp LQG_test.cpp merger_test.cpp -
library/tests/arx_elem_test.cpp
r682 r713 38 38 39 39 mlstudent* Ap = Ar.predictor_student(); 40 vec Ap_x = Ap->evallogcond_m ( X, empty_vec );41 vec ll_x = Ar.logpred_m ( X2 );40 vec Ap_x = Ap->evallogcond_mat ( X, empty_vec ); 41 vec ll_x = Ar.logpred_mat ( X2 ); 42 42 43 43 cout << "normalize : " << xstep*sum ( exp ( Ap_x ) ) << endl; -
library/tests/emix_test.cpp
r693 r713 68 68 69 69 int N = 3; 70 mat Smp = M2.sample_m ( N );70 mat Smp = M2.sample_mat ( N ); 71 71 72 72 vec exp_ll ( "-5.0 -2.53563 -2.62171" ); 73 vec ll = M2.evallog_m ( Smp );73 vec ll = M2.evallog_mat ( Smp ); 74 74 CHECK_CLOSE ( exp_ll, ll, 5.0 ); 75 75 … … 115 115 Array<vec> actual(CurrentContext::max_trial_count); 116 116 do { 117 mat smp = distrib_obj.sample_m ( nsamples );117 mat smp = distrib_obj.sample_mat ( nsamples ); 118 118 vec emu = sum ( smp, 2 ) / nsamples; 119 119 actual( tc ) = emu; … … 135 135 Array<mat> actual(CurrentContext::max_trial_count); 136 136 do { 137 mat smp = distrib_obj.sample_m ( nsamples );137 mat smp = distrib_obj.sample_mat ( nsamples ); 138 138 vec emu = sum ( smp, 2 ) / nsamples; 139 139 mat er = ( smp * smp.T() ) / nsamples - outer_product ( emu, emu ); -
library/tests/epdf_harness.cpp
r706 r713 95 95 } 96 96 97 vec lpzv_act = hepdf->evallog_m ( zero1n );97 vec lpzv_act = hepdf->evallog_mat ( zero1n ); 98 98 CHECK_CLOSE_EX ( lpzv, lpzv_act, tolerance ); 99 99 … … 105 105 } 106 106 107 lpzv_act = hepdf->evallog_m ( zeroa );107 lpzv_act = hepdf->evallog_mat ( zeroa ); 108 108 CHECK_CLOSE_EX ( lpzv, lpzv_act, tolerance ); 109 109 } … … 162 162 Array<vec> actual(CurrentContext::max_trial_count); 163 163 do { 164 mat smp = hepdf->sample_m ( nsamples );164 mat smp = hepdf->sample_mat ( nsamples ); 165 165 vec emu = smp * ones ( nsamples ) / nsamples; 166 166 actual( tc ) = emu; … … 183 183 Array<mat> actual(CurrentContext::max_trial_count); 184 184 do { 185 mat smp = hepdf->sample_m ( nsamples );185 mat smp = hepdf->sample_mat ( nsamples ); 186 186 vec emu = smp * ones ( nsamples ) / nsamples; 187 187 mat er = ( smp * smp.T() ) / nsamples - outer_product ( emu, emu ); … … 208 208 Array<vec> actual(CurrentContext::max_trial_count); 209 209 do { 210 mat smp = mep.samplecond_m ( vec ( 0 ), nsamples );210 mat smp = mep.samplecond_mat ( vec ( 0 ), nsamples ); 211 211 vec emu = sum ( smp, 2 ) / nsamples; 212 212 actual( tc ) = emu; … … 229 229 Array<mat> actual(CurrentContext::max_trial_count); 230 230 do { 231 mat smp = mep.samplecond_m ( vec ( 0 ), nsamples );231 mat smp = mep.samplecond_mat ( vec ( 0 ), nsamples ); 232 232 vec emu = sum ( smp, 2 ) / nsamples; 233 233 mat er = ( smp * smp.T() ) / nsamples - outer_product ( emu, emu ); -
library/tests/merger_2d_test.cpp
r693 r713 58 58 emix* MP = MM.epredictor(); //xy 59 59 60 vec Res1 = M.evallog_m ( Grid );61 mat Res2 = ( MP )->evallog_ M( Grid );60 vec Res1 = M.evallog_mat ( Grid ); 61 mat Res2 = ( MP )->evallog_mat ( Grid ); 62 62 63 63 it_file it ( "merger_2d_test.it" ); … … 66 66 it << Name ( "Res1" ) << Res1; 67 67 it << Name ( "Res2" ) << Res2; 68 it << Name ( "S1" ) << f1->evallog_m ( Grid );69 it << Name ( "S2" ) << f2->evallog_m ( Grid );68 it << Name ( "S1" ) << f1->evallog_mat ( Grid ); 69 it << Name ( "S2" ) << f2->evallog_mat ( Grid ); 70 70 cout << ( ( enorm<ldmat>* ) ( MP->_Coms ( 0 ).get() ) )->_R().to_mat() << endl; 71 71 } -
library/tests/merger_iter_test.cpp
r693 r713 60 60 epdf* MP = MM.epredictor();//xy 61 61 62 vec Res1 = M.evallog_m ( Grid );63 mat Res2 = ( ( emix* ) MP )->evallog_ M( Grid );62 vec Res1 = M.evallog_mat ( Grid ); 63 mat Res2 = ( ( emix* ) MP )->evallog_mat ( Grid ); 64 64 65 65 it_file it ( "merger_iter_test.it" ); -
library/tests/merger_test.cpp
r693 r713 29 29 x_grid.set_row ( 0, linspace ( -10.0, 10.0 ) ); 30 30 31 vec l_f1 = f1->evallog_m ( x_grid );32 vec l_f2 = f2->evallog_m ( x_grid );31 vec l_f1 = f1->evallog_mat ( x_grid ); 32 vec l_f2 = f2->evallog_mat ( x_grid ); 33 33 mat lW ( 2, Npoints ); 34 34 lW.set_row ( 0, l_f1 ); -
library/tests/mixtures_test.cpp
r679 r713 69 69 // Sample parameters 70 70 int ndat = 100; 71 mat Smp = Simul.sample_m ( ndat );71 mat Smp = Simul.sample_mat ( ndat ); 72 72 73 73 cout << "Simulated means: " << m1 << " and " << m2 << endl; -
library/tests/pdf_harness.cpp
r706 r713 50 50 Array<vec> actual(CurrentContext::max_trial_count); 51 51 do { 52 mat smp = hpdf->samplecond_m ( cond, nsamples );52 mat smp = hpdf->samplecond_mat ( cond, nsamples ); 53 53 vec emu = smp * ones ( nsamples ) / nsamples; 54 54 actual( tc ) = emu; … … 71 71 Array<mat> actual(CurrentContext::max_trial_count); 72 72 do { 73 mat smp = hpdf->samplecond_m ( cond, nsamples );73 mat smp = hpdf->samplecond_mat ( cond, nsamples ); 74 74 vec emu = smp * ones ( nsamples ) / nsamples; 75 75 mat er = ( smp * smp.T() ) / nsamples - outer_product ( emu, emu ); -
library/tests/pdf_test.cpp
r706 r713 13 13 static void check_covariance(mmix &distrib_obj, const vec &mu0, int nsamples, const mat &R, double tolerance); 14 14 15 TEST ( mepdf_test ) {16 pdf_harness::test_config ( "mepdf.cfg" );17 }18 19 15 TEST ( mgamma_test ) { 20 16 pdf_harness::test_config ( "mgamma.cfg" ); … … 29 25 } 30 26 31 // not using pdf_harness because mmix isn't configurable (yet?)32 27 TEST ( mmix_test ) { 28 pdf_harness::test_config ( "mmix.cfg" ); 29 //vec tmu = 0.5 * eN->mean() + 0.5 * mu0; 30 31 /* 33 32 RV x ( "{mmixx }", "2" ); 34 33 RV y ( "{mmixy }", "2" ); … … 63 62 mat observedR ( "1.27572 0.778247; 0.778247 3.33129" ); 64 63 check_covariance( mMix, mu0, N, observedR, 0.2 ); 64 */ 65 65 } 66 66 67 67 // not using pdf_harness because emix isn't configurable (yet?) 68 TEST ( mepdf_emix_test ) { 68 TEST ( emix_test ) { 69 pdf_harness::test_config ( "emix.cfg" ); 70 /* 69 71 int N = 10000; //number of samples 70 72 vec mu0 ( "1.5 1.7" ); … … 87 89 eMix->set_parameters ( vec_2 ( 0.5, 0.5 ), Coms ); 88 90 check_mean ( *eMix, mu0, N, eMix->mean(), 0.1 ); 91 */ 89 92 } 90 93 … … 93 96 Array<vec> actual(CurrentContext::max_trial_count); 94 97 do { 95 mat smp = distrib_obj.samplecond_m ( mu0, nsamples );98 mat smp = distrib_obj.samplecond_mat ( mu0, nsamples ); 96 99 vec emu = smp * ones ( nsamples ) / nsamples ; 97 100 actual( tc ) = emu; … … 113 116 Array<mat> actual(CurrentContext::max_trial_count); 114 117 do { 115 mat smp = distrib_obj.samplecond_m ( mu0, nsamples );118 mat smp = distrib_obj.samplecond_mat ( mu0, nsamples ); 116 119 vec emu = smp * ones ( nsamples ) / nsamples ; 117 120 mat er = ( smp * smp.T() ) / nsamples - outer_product ( emu, emu );