From 81810efc9d6a149bf3110c1f8289584e72ae7c50 Mon Sep 17 00:00:00 2001 From: Lailson Bandeira Date: Mon, 27 Jun 2011 21:22:36 -0300 Subject: [PATCH] =?UTF-8?q?Fun=C3=A7=C3=A3o=20adicionada=20para=20avaliar?= =?UTF-8?q?=20cluster=20como=20matriz=20de=20confus=C3=A3o.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- avaliar_cluster_confusao.m | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 avaliar_cluster_confusao.m diff --git a/avaliar_cluster_confusao.m b/avaliar_cluster_confusao.m new file mode 100644 index 0000000..ab809b2 --- /dev/null +++ b/avaliar_cluster_confusao.m @@ -0,0 +1,44 @@ +% t_g - taxa de classificação global +% T_k - taxa de classificação por classe +% G_eq - grupos equivalentes aos clusters (G_eq(1) é o cluster equivalente ao grupo 1) +function [t_g T_k C_eq] = avaliar_cluster_confusao(C, A) + k = size(unique(C), 1); + + if k ~= size(unique(A), 1) + error 'O número de classes em C deve ser igual ao número de classes em A.' + end + + g_1 = mode(C( 1:150)); + g_2 = mode(C(151:250)); + g_3 = mode(C(251:300)); + + if g_1 == g_2 || g_2 == g_3 || g_3 == g_1 + error 'Não é possível fazer correspondência entre os grupos e os clusters.' + end + + C_eq = C; + C_eq(find(C==g_1)) = 1; + C_eq(find(C==g_2)) = 2; + C_eq(find(C==g_3)) = 3; + + A_1 = A( 1:150); + A_2 = A(151:250); + A_3 = A(251:300); + + C_eq_1 = C_eq( 1:150); + C_eq_2 = C_eq(151:250); + C_eq_3 = C_eq(251:300); + + T_k = zeros(k); + T_k(1,1) = sum(C_eq_1==1)/150; + T_k(1,2) = sum(C_eq_1==2)/150; + T_k(1,3) = sum(C_eq_1==3)/150; + T_k(2,1) = sum(C_eq_2==1)/100; + T_k(2,2) = sum(C_eq_2==2)/100; + T_k(2,3) = sum(C_eq_2==3)/100; + T_k(3,1) = sum(C_eq_3==1)/50; + T_k(3,2) = sum(C_eq_3==2)/50; + T_k(3,3) = sum(C_eq_3==3)/50; + + t_g = sum(A~=C_eq)/300; +end \ No newline at end of file