gt22

Untitled

Sep 27th, 2019
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.21 KB | None | 0 0
  1. target_mapping = {'like': 1, 'view': 0.5, 'skip': -0.5, 'dislike': -1}
  2. reverse_mapping = {y: x for x, y in target_mapping.items()}
  3. label_weight = {'like': 0.5, 'view': 0.1, 'skip': -0.1, 'dislike': -10}
  4. if len(target_mapping) != len(reverse_mapping):
  5.     raise ValueError("Invalid mapping")
  6.    
  7. class CustomCbLoss:
  8.    
  9.     def calc_ders_range(self, approxes, targets, weights):
  10.         assert len(approxes) == len(targets)
  11.         if weights is not None:
  12.             assert len(weights) == len(approxes)
  13.         results = []
  14.         for t, p in zip(targets, approxes):
  15.             results.append((label_weight[reverse_mapping[t]], 0))
  16.         return results
  17.    
  18.  
  19. def vc_metric(y_label, y_pred, weights=None):
  20.     return sum(label_weight[reverse_mapping[l]] * p * (weights[i] if weights is not None else 1)
  21.                for i, (l, p) in enumerate(zip(y_label, y_pred)))
  22.  
  23. class VCCBMetric:
  24.    
  25.     def get_final_error(self, error, weight):
  26.         return error / (weight + 1e-38)
  27.  
  28.     def is_max_optimal(self):
  29.         return True
  30.    
  31.     def evaluate(self, approxes, targets, weights):
  32.         return vc_metric(targets, approxes[0], weights), sum(weights) if weights is not None else len(approxes)
Advertisement
Add Comment
Please, Sign In to add comment