2015-11-10 1 views
1

Je veux faire une classification binaire et un niveau est "top", l'autre est "bottom". J'ai utilisé gbm dans les paquets h2o et j'ai "bottom" comme classe positive et "top" comme classe négative. Voici mon code:Comment R juge-t-il les variables factorielles positives et négatives?

fit <- h2o.gbm(x = regr.var, y = max.var, 
      training_frame = ddd, 
      nfolds = 10, 
      distribution = 'multinomial', 
      balance_classes = TRUE) 
pred <- as.data.frame(h2o.predict(fit, newdata = eee)) 
threshold <- 0.5 
pred1 <- factor(ifelse(pred[, 'top'] > threshold, 'top', 'bottom')) 
err.res<-confusionMatrix(pred1 , hh$score_class) 
err.res 

Voici le résultat:

Confusion Matrix and Statistics 
      Reference 
Prediction bottom top 
bottom  420 123 
top   1  6 
Accuracy : 0.7745   
95% CI : (0.7373, 0.8088) 
No Information Rate : 0.7655   
P-Value [Acc > NIR] : 0.3279   

Kappa : 0.0657   
Mcnemar's Test P-Value : <2e-16   

Sensitivity : 0.99762   
Specificity : 0.04651   
Pos Pred Value : 0.77348   
Neg Pred Value : 0.85714   
Prevalence : 0.76545   
Detection Rate : 0.76364   
Detection Prevalence : 0.98727   
Balanced Accuracy : 0.52207   

'Positive' Class : bottom   

Mais je veux prédire correctement plus "top". J'ai essayé de changer le seuil à 0.3, et il fonctionne mieux. Cependant, devrais-je changer dans le processus d'ajustement pour faire plus de prédiction à «top» comme métrique «ROC»? Devrais-je retourner le «haut» à la classe positive et le «bas» à la classe négative et comment puis-je le changer?

+0

Vous avez un cas de déséquilibre de classe. Si vous voulez prédire correctement la classe la plus petite (c'est-à-dire "top" dans votre exemple), vous devrez modifier votre méthode pour que la classification correcte de la classe la plus petite ait plus de poids. Ce n'est pas une question de programmation - vous pourriez trouver de meilleures réponses sur un site différent comme les sites [stats] (http://stats.stackexchange.com/) ou [cs] (http://cs.stackexchange.com/) . – ialm

+0

R n'a pas de concept de variable facteur positif et négatif. Ceci est entièrement géré par le paquet h2o donc vous devriez demander à ces personnes. Généralement 0 et 1 sont correctement compris par la plupart des outils tiers. – Calimo

Répondre

0

Je recommande d'utiliser h2o.confustionMatrix et de l'utiliser pour créer des matrices à différentes valeurs de seuil.

Ex. h2o.confusionMatrix(object = fit, threshold = 0.3)

Merci,

Avni

1

Je pense que vous voulez ajouter l'argument 'positif' à votre fonction:

err.res <- confusionMatrix(pred1, hh$score_class, positive="top")