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 : 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
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
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 !