Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.00 KB | None | 0 0
  1. def score(self, X: np.ndarray, Y: np.ndarray, k: int = 2, dist_type: str = 'point') \
  2. -> Tuple[np.ndarray, np.ndarray]:
  3.  
  4. d = np.tile(None, (X.shape[0], self.classes)) # init distance matrix: [nb instances, nb classes]
  5.  
  6. for c in range(self.classes):
  7. d_tmp = self.kdtrees[c].query(X, k=k)[0] # get k nearest neighbors for each class
  8. if dist_type == 'point':
  9. d[:, c] = d_tmp[:, -1]
  10. elif dist_type == 'mean':
  11. d[:, c] = np.mean(d_tmp, axis=1)
  12.  
  13. sorted_d = np.sort(d, axis=1) # sort distance each instance in batch over classes
  14. # get distance to predicted and closest other class and calculate trust score
  15. d_to_pred = d[range(d.shape[0]), Y]
  16. d_to_closest_not_pred = np.where(sorted_d[:, 0] != d_to_pred, sorted_d[:, 0], sorted_d[:, 1])
  17. trust_score = d_to_closest_not_pred / (d_to_pred + self.eps)
  18. # closest not predicted class
  19. class_closest_not_pred = np.where(d == d_to_closest_not_pred.reshape(-1, 1))[1]
  20. return trust_score, class_closest_not_pred
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement