Changeset 1389 for applications

Show
Ignore:
Timestamp:
09/13/11 19:44:06 (13 years ago)
Author:
sindj
Message:

Odstraneni chyby v samplingu. JS

Location:
applications/robust
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • applications/robust/main.cpp

    r1384 r1389  
    2828 
    2929const int max_model_order = 2; 
    30 const double apriorno     = 0.001; 
     30const double apriorno     = 0.01; 
    3131 
    3232/* 
     
    9999                        if(has_constant) 
    100100                        { 
    101                                 my_rarx = new RARX(ar_components.size()+1,window_size,true,apriorno*sqrt(2.0),apriorno*sqrt(2.0),ar_components.size()+4); 
     101                                my_rarx = new RARX(ar_components.size()+1,window_size,true,sqrt(2*apriorno),sqrt(2*apriorno),ar_components.size()+4); 
    102102                                my_arx  = NULL; 
    103103                        } 
    104104                else 
    105105                        { 
    106                                 my_rarx = new RARX(ar_components.size(),window_size,false,apriorno*sqrt(2.0),apriorno*sqrt(2.0),ar_components.size()+3); 
     106                                my_rarx = new RARX(ar_components.size(),window_size,false,sqrt(2*apriorno),sqrt(2*apriorno),ar_components.size()+3); 
    107107                                my_arx  = NULL; 
    108108                        } 
     
    274274        vector<vector<string>> strings; 
    275275 
    276         char* file_string =  "C:\\Users\\Hontik\\Desktop\\Bayes\\dataADClosePercDiff"; // "C:\\Users\\Hontik\\Desktop\\Bayes\\ar_normal_single"; //  
     276        char* file_string =  "C:\\ar_student_single"; //"C:\\Users\\Hontik\\Desktop\\Bayes\\dataADClosePercDiff"; //  
    277277 
    278278        char dfstring[80]; 
     
    332332        char fstring[80];                                        
    333333        strcpy(fstring,file_string); 
    334         strcat(fstring,"lognc.txt"); 
    335         //strcat(fstring,"preds.txt"); 
     334        //strcat(fstring,"lognc.txt"); 
     335        strcat(fstring,"preds.txt"); 
    336336 
    337337        for(int time = max_model_order;time<data_matrix.cols();time++) //time<data_matrix.cols()  
     
    356356                        } 
    357357 
    358                         pair<vec,vec> predictions = (*model_ref)->predict(20,time,&LapRNG); 
     358                        pair<vec,vec> predictions = (*model_ref)->predict(500,time,&LapRNG); 
    359359 
    360360                        cout << predictions.first << endl << predictions.second << endl; 
     
    364364                        (*model_ref)->predictions.ins((*model_ref)->predictions.size(),avg_prediction); 
    365365                         
    366                         /* 
     366                         
    367367                        myfilew.open(fstring,ios::app); 
    368368                        myfilew << avg_prediction << ","; 
    369369                        myfilew.close(); 
    370                         */ 
     370                         
    371371 
    372372                        //preds.ins(0,data_matrix.get(0,time+1)); 
    373373                } 
    374374 
    375                 /* 
     375                 
    376376                myfilew.open(fstring,ios::app); 
    377377                myfilew << data_matrix.get(0,time+1) << endl; 
    378378                myfilew.close(); 
    379                 */ 
     379                 
    380380 
    381381                result_lognc.ins_col(result_lognc.cols(),cur_res_lognc); 
     
    424424                } 
    425425                 
     426                /* 
    426427                for(int i = 0;i<cur_res_lognc.size();i++) 
    427428                { 
    428429                        myfilew << cur_res_lognc[i] << ' ';//zmenil som ciarku ze medzeru 
    429430                } 
     431                */ 
    430432 
    431433                myfilew << endl;                                 
  • applications/robust/robustlib.h

    r1384 r1389  
    2121using namespace std; 
    2222using namespace itpp; 
     23 
     24static Exponential_RNG ExpRNG; 
    2325 
    2426const double max_range = 5;//numeric_limits<double>::max()/10e-10; 
     
    13721374                { 
    13731375                        condition_to_add = new condition(toadd);                         
    1374                         conditions.push_back(new_condition);                     
     1376                        conditions.push_back(condition_to_add);                  
    13751377                }                
    13761378                 
     
    26182620                        pair<double,double> probability_and_sigma = choose_sigma(condition_and_simplex.second); 
    26192621 
    2620                         int dimension = condition_and_simplex.second->vertices.size()-1; 
    2621  
    2622                         mat jacobian(dimension,dimension); 
    2623                         vec gradient = condition_and_simplex.first.right(dimension); 
    2624  
    2625                         vertex* base_vert = *condition_and_simplex.second->vertices.begin(); 
    2626  
    2627                         //// cout << "Base vertex coords(should be close to est. param.): " << base_vert->get_coordinates() << endl; 
     2622                        int dimension = condition_and_simplex.second->vertices.size(); 
     2623 
     2624                        mat jacobian(dimension,dimension-1); 
     2625                        vec gradient = condition_and_simplex.first; 
    26282626                                 
    26292627                        int row_count = 0; 
    26302628 
    2631                         for(set<vertex*>::iterator vert_ref = ++condition_and_simplex.second->vertices.begin();vert_ref!=condition_and_simplex.second->vertices.end();vert_ref++) 
    2632                         { 
    2633                                 vec current_coords = (*vert_ref)->get_coordinates(); 
    2634  
    2635                                 //// cout << "Coords of vertex[" << row_count << "]: " << current_coords << endl;  
    2636                                          
    2637                                 vec relative_coords = current_coords-base_vert->get_coordinates();                               
    2638  
    2639                                 jacobian.set_row(row_count,relative_coords); 
    2640  
     2629                        for(set<vertex*>::iterator vert_ref = condition_and_simplex.second->vertices.begin();vert_ref!=condition_and_simplex.second->vertices.end();vert_ref++) 
     2630                        { 
     2631                                jacobian.set_row(row_count,(*vert_ref)->get_coordinates()); 
    26412632                                row_count++; 
    2642                         }                                
    2643                                  
    2644                         //// cout << "Jacobian: " << jacobian << endl;                   
    2645  
    2646                         /// \todo Is this correct? Are the random coordinates really jointly uniform? I don't know. 
     2633                        }                
     2634                         
     2635                        ExpRNG.setup(1); 
     2636 
    26472637                        vec sample_coords; 
    2648                         double sampling_diff = 1; 
    2649                         for(int j = 0;j<number_of_parameters;j++) 
    2650                         { 
    2651                                 double rnumber = randu()*sampling_diff; 
    2652  
    2653                                 sample_coords.ins(0,rnumber); 
    2654  
    2655                                 sampling_diff -= rnumber; 
     2638                        double sample_sum = 0; 
     2639                        for(int j = 0;j<dimension;j++) 
     2640                        { 
     2641                                double rnumber = ExpRNG(); 
     2642 
     2643                                sample_sum += rnumber; 
     2644 
     2645                                sample_coords.ins(0,rnumber);                            
    26562646                        } 
    26572647 
    2658                         sample_coords = jacobian.T()*sample_coords+(*base_vert).get_coordinates(); 
     2648                        sample_coords /= sample_sum; 
     2649 
     2650                        sample_coords = jacobian.T()*sample_coords; 
    26592651 
    26602652                        vec extended_coords = sample_coords; 
     
    26622654 
    26632655                        double exponent = extended_coords*condition_and_simplex.first; 
    2664                         double sample_prob = 1/condition_and_simplex.second->probability/pow(probability_and_sigma.second,(int)conditions.size()-number_of_parameters+3)*exp((-1)/probability_and_sigma.second*exponent); 
     2656                        double sample_prob = 1/pow(probability_and_sigma.second,(int)conditions.size()-number_of_parameters+3)*exp((-1)/probability_and_sigma.second*exponent); 
    26652657                        sample_prob *= probability_and_sigma.first; 
    26662658