Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static vector<double>
- calculateGradient(vector<FeatureVector> sorted_feature_vectors, vector<double> new_parameters) {
- vector<double> gradient(sorted_feature_vectors[0].get_fcount()-1,0);//need to be optimized,how to get the length of the features
- int list_length = sorted_feature_vectors.size();
- vector<double> exponents;
- double expsum = 0.0;
- for(int i = 0; i < list_length; i++){
- double temp = exp(calculateInnerProduct(new_parameters,sorted_feature_vectors[i].get_fvals()));
- exponents.push_back(temp);
- expsum += temp;
- }
- 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
- map<int,double> feature_sets = sorted_feature_vectors[i].get_fvals();
- //for each feature in special feature vector
- for (map<int,double>::iterator iter = feature_sets.begin(); iter != feature_sets.end(); ++iter){
- gradient[iter->first-1] += iter->second * exponents[i]/ expsum;
- }
- }
- map<int,double> first_place_in_ground_truth_feature_sets = sorted_feature_vectors[0].get_fvals();
- for (map<int,double>::iterator iter = first_place_in_ground_truth_feature_sets.begin(); iter != first_place_in_ground_truth_feature_sets.end(); ++iter){
- gradient[iter->first-1] -= iter->second;
- }
- return gradient;
- }
Add Comment
Please, Sign In to add comment