AyushP123

vhasu

Jul 29th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.34 KB | None | 0 0
  1. static vector<double>
  2. calculateGradient(vector<FeatureVector> sorted_feature_vectors, vector<double> new_parameters) {
  3.  
  4.     vector<double> gradient(sorted_feature_vectors[0].get_fcount()-1,0);//need to be optimized,how to get the length of the features
  5.  
  6.     int list_length = sorted_feature_vectors.size();
  7.  
  8.     vector<double> exponents;
  9.     double expsum = 0.0;
  10.    
  11.     for(int i = 0; i < list_length; i++){
  12.         double temp = exp(calculateInnerProduct(new_parameters,sorted_feature_vectors[i].get_fvals()));
  13.         exponents.push_back(temp);
  14.         expsum += temp;
  15.     }
  16.  
  17.     for(int i = 0; i < list_length; i++){//not convenient, but in order to get the feature, I have to run the ranklist loop first. need to see whether the fvals could be a vector
  18.         map<int,double> feature_sets = sorted_feature_vectors[i].get_fvals();
  19.  
  20.         //for each feature in special feature vector
  21.         for (map<int,double>::iterator iter = feature_sets.begin(); iter != feature_sets.end(); ++iter){
  22.  
  23.             gradient[iter->first-1] += iter->second * exponents[i]/ expsum;
  24.  
  25.         }
  26.        
  27.     }
  28.  
  29.     map<int,double> first_place_in_ground_truth_feature_sets = sorted_feature_vectors[0].get_fvals();
  30.  
  31.     for (map<int,double>::iterator iter = first_place_in_ground_truth_feature_sets.begin(); iter != first_place_in_ground_truth_feature_sets.end(); ++iter){
  32.  
  33.             gradient[iter->first-1] -= iter->second;
  34.  
  35.         }
  36.  
  37.     return gradient;
  38. }
Add Comment
Please, Sign In to add comment