Show
Ignore:
Timestamp:
08/05/09 14:40:03 (15 years ago)
Author:
mido
Message:

panove, vite, jak jsem peclivej na upravu kodu.. snad se vam bude libit:) konfigurace je v souboru /system/astylerc

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • library/bdm/estim/mixtures.cpp

    r389 r477  
    22#include "mixtures.h" 
    33 
    4 namespace bdm{ 
     4namespace bdm { 
    55 
    66 
     
    88        //prepare sizes 
    99        Coms.set_size ( c ); 
    10         n=c; 
     10        n = c; 
    1111        weights.set_parameters ( ones ( c ) ); //assume at least one observation in each comp. 
    1212        //est will be done at the end 
     
    2222 
    2323        //Copy it to the rest 
    24         for ( i=1;i<n;i++ ) { 
     24        for ( i = 1; i < n; i++ ) { 
    2525                //copy Com0 and create new rvs for them 
    2626                Coms ( i ) =  Coms ( 0 )->_copy_ ( ); 
    2727        } 
    2828        //Pick some data for each component and update it 
    29         for ( i=0;i<n;i++ ) { 
     29        for ( i = 0; i < n; i++ ) { 
    3030                //pick one datum 
    31                 int ind=floor(ndat*UniRNG.sample()); 
    32                 Coms ( i )->bayes ( Data.get_col ( ind ),1.0 ); 
     31                int ind = floor ( ndat * UniRNG.sample() ); 
     32                Coms ( i )->bayes ( Data.get_col ( ind ), 1.0 ); 
    3333                //flatten back to oringinal 
    34                 Coms(i)->flatten(Com0); 
     34                Coms ( i )->flatten ( Com0 ); 
    3535        } 
    3636 
     
    4242 
    4343void MixEF::bayesB ( const mat &data , const vec &wData ) { 
    44         int ndat=data.cols(); 
    45         int t,i,niter; 
    46         bool converged=false; 
     44        int ndat = data.cols(); 
     45        int t, i, niter; 
     46        bool converged = false; 
    4747 
    4848        multiBM weights0 ( weights ); 
    4949 
    5050        Array<BMEF*> Coms0 ( n ); 
    51         for ( i=0;i<n;i++ ) {Coms0 ( i ) = ( BMEF* ) Coms ( i )->_copy_();} 
     51        for ( i = 0; i < n; i++ ) { 
     52                Coms0 ( i ) = ( BMEF* ) Coms ( i )->_copy_(); 
     53        } 
    5254 
    53         niter=0; 
    54         mat W=ones ( n,ndat ) / n; 
    55         mat Wlast=ones ( n,ndat ) / n; 
     55        niter = 0; 
     56        mat W = ones ( n, ndat ) / n; 
     57        mat Wlast = ones ( n, ndat ) / n; 
    5658        vec w ( n ); 
    5759        vec ll ( n ); 
     
    6769                // 
    6870                //#pragma omp parallel for 
    69                 for ( t=0;t<ndat;t++ ) { 
     71                for ( t = 0; t < ndat; t++ ) { 
    7072                        //#pragma omp parallel for 
    71                         for ( i=0;i<n;i++ ) { 
    72                                 ll ( i ) =Coms ( i )->logpred ( data.get_col ( t ) ); 
    73                                 wtmp =0.0; wtmp ( i ) =1.0; 
     73                        for ( i = 0; i < n; i++ ) { 
     74                                ll ( i ) = Coms ( i )->logpred ( data.get_col ( t ) ); 
     75                                wtmp = 0.0; 
     76                                wtmp ( i ) = 1.0; 
    7477                                ll ( i ) += weights.logpred ( wtmp ); 
    7578                        } 
    76                          
    77                         maxll = max(ll,maxi); 
    78                         switch (method) { 
    79                                 case QB: 
    80                                         w = exp ( ll-maxll ); 
    81                                         w/=sum(w); 
    82                                         break; 
    83                                 case EM: 
    84                                         w = 0.0; 
    85                                         w(maxi) = 1.0; 
    86                                         break; 
     79 
     80                        maxll = max ( ll, maxi ); 
     81                        switch ( method ) { 
     82                        case QB: 
     83                                w = exp ( ll - maxll ); 
     84                                w /= sum ( w ); 
     85                                break; 
     86                        case EM: 
     87                                w = 0.0; 
     88                                w ( maxi ) = 1.0; 
     89                                break; 
    8790                        } 
    88                          
     91 
    8992                        W.set_col ( t, w ); 
    9093                } 
     
    9295                // copy initial statistics 
    9396                //#pragma omp parallel for 
    94                 for ( i=0;i<n;i++ ) { 
     97                for ( i = 0; i < n; i++ ) { 
    9598                        Coms ( i )-> set_statistics ( Coms0 ( i ) ); 
    9699                } 
     
    100103                // !!!!    note  wData ==> this is extra weight of the data record 
    101104                // !!!!    For typical cases wData=1. 
    102                 for ( t=0;t<ndat;t++ ) { 
     105                for ( t = 0; t < ndat; t++ ) { 
    103106                        //#pragma omp parallel for 
    104                         for ( i=0;i<n;i++ ) { 
    105                                 Coms ( i )-> bayes ( data.get_col ( t ),W ( i,t ) * wData ( t ) ); 
     107                        for ( i = 0; i < n; i++ ) { 
     108                                Coms ( i )-> bayes ( data.get_col ( t ), W ( i, t ) * wData ( t ) ); 
    106109                        } 
    107110                        weights.bayes ( W.get_col ( t ) * wData ( t ) ); 
     
    110113                niter++; 
    111114                //TODO better convergence rule. 
    112                 converged = (niter>10);//( sumsum ( abs ( W-Wlast ) ) /n<0.1 ); 
     115                converged = ( niter > 10 );//( sumsum ( abs ( W-Wlast ) ) /n<0.1 ); 
    113116        } 
    114117 
    115118        //Clean Coms0 
    116         for ( i=0;i<n;i++ ) {delete Coms0 ( i );} 
     119        for ( i = 0; i < n; i++ ) { 
     120                delete Coms0 ( i ); 
     121        } 
    117122} 
    118123 
     
    128133double MixEF::logpred ( const vec &dt ) const { 
    129134 
    130         vec w=weights.posterior().mean(); 
    131         double exLL=0.0; 
    132         for ( int i=0;i<n;i++ ) { 
    133                 exLL+=w ( i ) *exp ( Coms ( i )->logpred ( dt ) ); 
     135        vec w = weights.posterior().mean(); 
     136        double exLL = 0.0; 
     137        for ( int i = 0; i < n; i++ ) { 
     138                exLL += w ( i ) * exp ( Coms ( i )->logpred ( dt ) ); 
    134139        } 
    135140        return log ( exLL ); 
    136141} 
    137142 
    138 emix* MixEF::epredictor (  ) const { 
     143emix* MixEF::epredictor ( ) const { 
    139144        Array<epdf*> pC ( n ); 
    140         for ( int i=0;i<n;i++ ) {pC ( i ) =Coms ( i )->epredictor ( );} 
     145        for ( int i = 0; i < n; i++ ) { 
     146                pC ( i ) = Coms ( i )->epredictor ( ); 
     147        } 
    141148        emix* tmp; 
    142         tmp = new emix(  ); 
     149        tmp = new emix( ); 
    143150        tmp->set_parameters ( weights.posterior().mean(), pC, false ); 
    144151        tmp->ownComs(); 
     
    146153} 
    147154 
    148 void MixEF::flatten(const BMEF* M2){ 
    149         const MixEF* Mix2=dynamic_cast<const MixEF*>(M2); 
    150         it_assert_debug(Mix2->n==n,"Different no of coms"); 
     155void MixEF::flatten ( const BMEF* M2 ) { 
     156        const MixEF* Mix2 = dynamic_cast<const MixEF*> ( M2 ); 
     157        it_assert_debug ( Mix2->n == n, "Different no of coms" ); 
    151158        //Flatten each component 
    152         for (int i=0; i<n;i++){ 
    153                 Coms(i)->flatten(Mix2->Coms(i)); 
     159        for ( int i = 0; i < n; i++ ) { 
     160                Coms ( i )->flatten ( Mix2->Coms ( i ) ); 
    154161        } 
    155162        //Flatten weights = make them equal!! 
    156         weights.set_statistics(&(Mix2->weights)); 
     163        weights.set_statistics ( & ( Mix2->weights ) ); 
    157164} 
    158165}