2017-09-10 2 views
0

J'essaie d'implémenter un algorithme de forêt aléatoire simple dans R juste pour savoir comment fonctionne R et Random Forest, et tester la précision dans un ensemble de test.R - Forêt aléatoire - Erreur lors de l'application de la matrice de confusion sur les données de test

Mes données d'échantillon (cinq lignes de 561 lignes au total) est:

bulbasaur[1:5,] 
    Appt_date count no_of_reps PerReCount 
1 2016-01-01  2   1 2.000000 
2 2016-01-04 174   58 3.000000 
3 2016-01-05 206   59 3.491525 
4 2016-01-06 203   61 3.327869 
5 2016-01-07 236   64 3.687500 

Le code que je l'ai écrit est:

install.packages("caret") 
library(caret) 

leaf <- bulbasaur 
ctrl = trainControl(method="repeatedcv", number=100, repeats=50, selectionFunction = "oneSE") 
in_train = createDataPartition(leaf$PerReCount, p=.75, list=FALSE) 

#random forest 
trf = train(PerReCount ~ ., data=leaf, method="rf", metric="RMSE",trControl=ctrl, subset = in_train) 


#boosting 
tgbm = train(PerReCount ~ ., data=leaf, method="gbm", metric="RMSE", 
      trControl=ctrl, subset = in_train, verbose=FALSE) 

resampls = resamples(list(RF = trf, GBM = tgbm)) 
difValues = diff(resampls) 
summary(difValues) 



######Using it on test matrix 
test = leaf[-in_train,] 
test$pred.leaf.rf = predict(trf, test, "raw") 
confusionMatrix(test$pred.leaf.rf, test$PerReCount) 

Cependant, je reçois l'erreur suivante:

Error in confusionMatrix.default(test$pred.leaf.rf, test$PerReCount) : 
    the data cannot have more levels than the reference 

J'ai essayé quelques changements, comme prendre leaf$PerReCount <- as.factors(leaf$PerReCount), et en ajoutant type = "class", mais l'exactitude qui est venue était abyssale, et je ne veux pas la changer de la régression à la classification. Comment puis-je le résoudre sans convertir en facteurs, ou de toute autre manière telle que le problème peut être résolu, ou obtenir un compte de précision sans utiliser de matrice de confusion peut-être. Merci

+1

Une matrice de confusion est destinée aux ** classificateurs ** et n'a aucun sens si votre variable cible est numérique. Maintenant, la variable 'PerReCount' est évidemment une variable numérique continue. Votre problème n'est pas avec le code, mais avec la compréhension de vos données. –

Répondre

0

Le problème que @Damiano a suggéré est correct et le modèle de régression ne donnera pas de matrice de confusion car ce n'est pas oui ou non. Le problème que j'ai résolu est en utilisant RMSE:

piko.chu = predict(trf, test) 
RMSE.forest <- sqrt(mean((piko.chu-test$PerReCount)^2))