Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def score(self, X: np.ndarray, Y: np.ndarray, k: int = 2, dist_type: str = 'point') \
- -> Tuple[np.ndarray, np.ndarray]:
- d = np.tile(None, (X.shape[0], self.classes)) # init distance matrix: [nb instances, nb classes]
- for c in range(self.classes):
- d_tmp = self.kdtrees[c].query(X, k=k)[0] # get k nearest neighbors for each class
- if dist_type == 'point':
- d[:, c] = d_tmp[:, -1]
- elif dist_type == 'mean':
- d[:, c] = np.mean(d_tmp, axis=1)
- sorted_d = np.sort(d, axis=1) # sort distance each instance in batch over classes
- # get distance to predicted and closest other class and calculate trust score
- d_to_pred = d[range(d.shape[0]), Y]
- d_to_closest_not_pred = np.where(sorted_d[:, 0] != d_to_pred, sorted_d[:, 0], sorted_d[:, 1])
- trust_score = d_to_closest_not_pred / (d_to_pred + self.eps)
- # closest not predicted class
- class_closest_not_pred = np.where(d == d_to_closest_not_pred.reshape(-1, 1))[1]
- return trust_score, class_closest_not_pred
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement