gt22 icon

Untitled

gt22 | PRO | 09/27/19 08:24:37 PM UTC | 0 ⭐ | 829 👁️ | Never ⏰ | []
Python |

1.21 KB

|

None

|

0 👍

/

0 👎

target_mapping = {'like': 1, 'view': 0.5, 'skip': -0.5, 'dislike': -1}
reverse_mapping = {y: x for x, y in target_mapping.items()}
label_weight = {'like': 0.5, 'view': 0.1, 'skip': -0.1, 'dislike': -10}
if len(target_mapping) != len(reverse_mapping):
    raise ValueError("Invalid mapping")
    
class CustomCbLoss:
    
    def calc_ders_range(self, approxes, targets, weights):
        assert len(approxes) == len(targets)
        if weights is not None:
            assert len(weights) == len(approxes)
        results = []
        for t, p in zip(targets, approxes):
            results.append((label_weight[reverse_mapping[t]], 0))
        return results
    
 
def vc_metric(y_label, y_pred, weights=None):
    return sum(label_weight[reverse_mapping[l]] * p * (weights[i] if weights is not None else 1)
               for i, (l, p) in enumerate(zip(y_label, y_pred)))
 
class VCCBMetric:
    
    def get_final_error(self, error, weight):
        return error / (weight + 1e-38)
 
    def is_max_optimal(self):
        return True
    
    def evaluate(self, approxes, targets, weights):
        return vc_metric(targets, approxes[0], weights), sum(weights) if weights is not None else len(approxes)

Comments