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$
1
  • $\begingroup$ Of course. Please see my edited question. $\endgroup$
    – Kewitschka
    Commented Feb 3, 2016 at 7:20

1 Answer 1

3
$\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

$\endgroup$
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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