Calcule de la matrice de confusion
Bonjour,
Je travail actuellement sur un problème de classification et j'ai un tableau à deux colonnes avec les résultats. Dans le tableau, la première colonne contient les valeurs à prédire, la deuxième colonne contient les prédictions et chaque ligne du tableau représente une observation.
Voici un simple petit exemple créé artificiellement:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
> result <- cbind(Y=c(1,1,-1,-1,1,-1,1),Yhat=c(1,1,1,-1,1,-1,-1))
> result
Y Yhat
[1,] 1 1
[2,] 1 1
[3,] -1 1
[4,] -1 -1
[5,] 1 1
[6,] -1 -1
[7,] 1 -1 |
Afin de calculer la precision, le recall et le F-score de mon modèle, je voudrais calculer les nombres de TP, FP, FN et TN de la matrice de confusion. J'ai déjà fais le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
result <- cbind(Y=c(1,1,-1,-1,1,-1,1),Yhat=c(1,1,1,-1,1,-1,-1))
TP <- 0
FP <- 0
FN <- 0
TN <- 0
for(i in 1:NROW(result)){
if(result[i,1] == result[i,2]){
if(result[i,2] == 1)
TP <- TP + 1
else
TN <- TN + 1
}
else{
if(result[i,2] == 1)
FP <- FP + 1
else
FN <- FN + 1
}
}
precision <- TP/(TP+FP)
recall <- TP/(TP+FN)
F <- 2 * (precision * recall)/(precision + recall + 0.00000000000000000000000000001) |
Problème: dans mon ensemble de test, j'ai plus d'un million d'observations ... et mon code prend trop de temps.
Je n'arrive pas à vectoriser ce code.
Pourriez vous svp m'aider? Avez-vous une idées pour optimiser ce code? ou même plus simple... Existe-il déjà des fonctions en R qui réalisent ce type de calcule?
Merci ! :)