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:
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Problème: dans mon ensemble de test, j'ai plus d'un million d'observations ... et mon code prend trop de temps.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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 !![]()
Partager