forked from tkkxgh/DVIMC-mindspore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathevaluate.py
40 lines (32 loc) · 1.37 KB
/
evaluate.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from sklearn.metrics import v_measure_score, accuracy_score, adjusted_rand_score
from scipy.optimize import linear_sum_assignment
import numpy as np
def cluster_acc(y_true, y_pred):
y_true = y_true.astype(np.int64)
assert y_pred.size == y_true.size
D = max(y_pred.max(), y_true.max()) + 1
w = np.zeros((D, D), dtype=np.int64)
for i in range(y_pred.size):
w[y_pred[i], y_true[i]] += 1
u = linear_sum_assignment(w.max() - w)
ind = np.concatenate([u[0].reshape(u[0].shape[0], 1), u[1].reshape([u[0].shape[0], 1])], axis=1)
return sum([w[i, j] for i, j in ind]) * 1.0 / y_pred.size
def purity(y_true, y_pred):
y_voted_labels = np.zeros(y_true.shape)
labels = np.unique(y_true)
ordered_labels = np.arange(labels.shape[0])
for k in range(labels.shape[0]):
y_true[y_true == labels[k]] = ordered_labels[k]
labels = np.unique(y_true)
bins = np.concatenate((labels, [np.max(labels) + 1]), axis=0)
for cluster in np.unique(y_pred):
hist, _ = np.histogram(y_true[y_pred == cluster], bins=bins)
winner = np.argmax(hist)
y_voted_labels[y_pred == cluster] = winner
return accuracy_score(y_true, y_voted_labels)
def evaluate(true, pred):
nmi = v_measure_score(true, pred)
acc = cluster_acc(true, pred)
ari = adjusted_rand_score(true, pred)
pur = purity(true, pred)
return acc, nmi, ari, pur