1
$\begingroup$

I want to predict a variable with Naive Bayes. I tried it with another one from the same dataset and it worked perfect but not with the desired. The variable to predict contains values like "OL","DL" etc.

train_control <- trainControl(method="cv")
naiveModel <- train(as.factor(position)~groesse+koerpergewicht+bankdruecken+kniebeuge+maximalkraft_bb+maximalkraft_l+maximalkraft_r+schnellkraft_l+schnellkraft_r+sprint_10m+sprint_20m,data, trControl=train_control, method="nb")

 Something is wrong; all the Accuracy metric values are missing:
    Accuracy       Kappa    
 Min.   : NA   Min.   : NA  
 1st Qu.: NA   1st Qu.: NA  
 Median : NA   Median : NA  
 Mean   :NaN   Mean   :NaN  
 3rd Qu.: NA   3rd Qu.: NA  
 Max.   : NA   Max.   : NA  
 NA's   :2     NA's   :2  

I uploaded my data dput: http://wikisend.com/download/745072/data_dput.txt

$\endgroup$
  • $\begingroup$ Of course. Please see my edited question. $\endgroup$ – Kewitschka Feb 3 '16 at 7:20
2
$\begingroup$

The problem lies in the fact that your data is highly imbalanced. If you look at the distribution of position, you will notice that FS and TE only appear once in your dataset. Since this is a factor the cross validation encounters no value for these 2 values, but expects them, because they are present in the factor level. Hence you will see in your warnings stop("Zero variances for at least one class in variables:", : missing value where TRUE/FALSE needed

If you remove these 2 values from your data you will see that the model will be created (with some warning messages).

data <- subset(data, !position %in% c("FS", "TE"))
data$position <- droplevels(data$position)

train_control <- trainControl(method="cv")
naiveModel <- train(position~groesse+koerpergewicht+bankdruecken+kniebeuge+maximalkraft_bb+maximalkraft_l+maximalkraft_r+schnellkraft_l+schnellkraft_r+sprint_10m+sprint_20m, data, trControl=train_control, method="nb")

To solve the imbalance you could use trainControl with sampling = "up" like this: train_control <- trainControl(method="cv", sampling = "up")

But better is to see if you can increase the number of records with position values TS Fand TE

| cite | improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.