Advertisement
Dimaush

Untitled

May 14th, 2023
665
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.49 KB | None | 0 0
  1. import numpy as np
  2.  
  3. import sklearn
  4. import sklearn.metrics
  5.  
  6.  
  7. def silhouette_score(x, labels):
  8.     if np.unique(labels).shape[0] == 1:
  9.         return 0
  10.  
  11.     s = np.zeros(x.shape[0])
  12.     clusters = []
  13.  
  14.     for label in np.unique(labels):
  15.         if (labels == label).shape[0] == 1:
  16.             s[(labels == label)] = 0
  17.         else:
  18.             values = np.sum(sklearn.metrics.pairwise_distances(x, x)[:, (labels == label)], axis=1)
  19.             s[(labels == label) * (np.sum(labels == label) > 1)] = values[(labels == label) * (np.sum(labels == label) > 1)] / (np.sum(labels == label) - 1)
  20.             avg = values / np.sum(labels == label)
  21.             avg[(labels == label)] = np.max(sklearn.metrics.pairwise_distances(x, x)) + 1
  22.             clusters.append(avg)
  23.  
  24.     p = np.min(np.stack(clusters), axis=0)
  25.     m = (p != 0) * (s != 0)
  26.  
  27.     sil = np.zeros(x.shape[0])
  28.     sil[m] = (p - s)[m] / np.maximum(p, s)[m]
  29.     sil_score = np.mean(sil, axis=0)
  30.     return sil_score
  31.  
  32.  
  33. def bcubed_score(true_labels, predicted_labels):
  34.     n_objects = true_labels.shape[0]
  35.     precision = 0
  36.     recall = 0
  37.     for i in range(n_objects):
  38.         p = true_labels[(predicted_labels == predicted_labels[i])]
  39.         precision += np.mean(p == true_labels[i])
  40.         r = predicted_labels[(true_labels == true_labels[i])]
  41.         recall += np.mean(r == predicted_labels[i])
  42.     precision /= n_objects
  43.     recall /= n_objects
  44.     score = 2 * (precision * recall) / (precision + recall)
  45.     return score
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement