Il existe actuellement deux ensembles de vecteurs :
prédire l'étiquette = [1,1,2,1,1,2,2,3,3,3]
véritable étiquette = [2,2,3,2,2,3,3,1,1,1]
Si vous effectuez actuellement une analyse de cluster de données catégorielles, vous pouvez utiliser la fonction de bibliothèque ACC de Python lorsque vous rencontrez la mesure de la précision, mais le résultat qu'il obtient est ACC = 0,0.
À l'œil nu, nous pouvons également savoir que « 1 » dans l'étiquette de prédiction correspond à « 2 » dans la véritable étiquette, « 2 » correspond à « 3 » et « 3 » correspond à « 1 ».
Par conséquent, correspondant à l'évaluation de la précision des données de classification, nous devons également effectuer un meilleur travail d'appariement, et l'algorithme utilisé est l' algorithme hongrois . Le lien renvoie à mon blog précédent présentant l'algorithme hongrois, qui est très détaillé !
Je n'entrerai pas dans les détails ici, allez directement au code:
def CA(labels_true, labels_pre):
from scipy.optimize import linear_sum_assignment
nData = len(labels_pre)
nC = len(np.unique(labels_true)) + 1
E = np.zeros((nC, nC), int)
for m in range(nData):
i1 = labels_pre[m]
i2 = labels_true[m]
E[i1, i2] = E[i1, i2] + 1
E = -E
cost_matrix = E.T
# 开销矩阵对应的行索引row_ind;对应行索引的最优指派列索引col_ind
row_ind, col_ind = linear_sum_assignment(cost_matrix)
nMatch = 0
for i in range(nC):
if i == 0:
continue
nMatch = nMatch - E[col_ind[i], i]
accuracy = nMatch / nData
return accuracy
Le code a été vérifié par de nombreuses expériences, vous pouvez donc l'utiliser en toute confiance ~
Paramètres entrants : étiquette réelle, résultat de la classification du cluster
Ce n'est pas facile à organiser, bienvenue sur trois liens en un clic ~