예제 #1
0
 def measure(self, target: Labelling, predicted) -> float:
     avg_prec = 0.0
     npos = target.positives()
     if (npos == 0):
         return 1.0
     pos_idxs = target.where_positive()
     for i in pos_idxs:
         yi_rank = predicted[i]
         s = sum([1 for j in pos_idxs if predicted[j] <= yi_rank])
         avg_prec += s / yi_rank
     return avg_prec / npos
예제 #2
0
 def risk(self, prediction: Labelling,
          Pdist: ProbabilityDistribution) -> float:
     n = Pdist.getNumberOfLabels()
     k = prediction.positives()
     if (k == 0):
         return 1 - Pdist.fulljoint([0] * n)
     p = 0.0
     for i in range(n):
         if (prediction[i] == 1):
             p += sum([
                 Pdist.getProbSize(i, j) / (k + j) for j in range(1, n + 1)
             ])
     return 1 - 2 * p
예제 #3
0
 def measure(self, target: Labelling, predicted) -> float:
     s = 0
     for ri, yi in zip(predicted, target):
         if (yi == 0):
             continue
         for rj, yj in zip(predicted, target):
             if (yj == 1):
                 continue
             if (ri > rj):
                 s += 1
     num_pos = target.positives()
     n = len(target)
     if (self.normalized == 2):
         return s / (num_pos * (n - num_pos))
     if (self.normalized == 1):
         return 4 * s / (n * n)
     return s
예제 #4
0
 def measure(self, target: Labelling, predicted) -> float:
     positives_idxs = target.where_positive()
     return sum([1 / predicted[pi] for pi in positives_idxs]) / sum(
         1 / np.arange(1,
                       target.positives() + 1))