Digamos que tengo una variable que predice perfectamente una de las clases en mis datos:
set.seed(668130)
dat <- iris
dat$X <- sample(1:3, nrow(iris), replace=TRUE)
dat$X <- ifelse(dat$Species=='setosa', 1, dat$X)
> table(dat$X, dat$Species)
setosa versicolor virginica
1 50 12 15
2 0 18 15
3 0 20 20
¿Por qué el NaiveBayes algoritmo de fallar sobre este conjunto de datos?
library(klaR)
> NaiveBayes(Species ~ ., dat)
Error in NaiveBayes.default(X, Y, ...) :
Zero variances for at least one class in variables: X
A mí me parece que sería razonable para la salida de una clasificación de 'setosa' 100% del tiempo, si X=1. Otros algoritmos (como randomForest) hacer esto:
library(randomForest)
> randomForest(Species ~ ., dat)
Call:
randomForest(formula = Species ~ ., data = dat)
Type of random forest: classification
Number of trees: 500
No. of variables tried at each split: 2
OOB estimate of error rate: 4.67%
Confusion matrix:
setosa versicolor virginica class.error
setosa 50 0 0 0.00
versicolor 0 47 3 0.06
virginica 0 4 46 0.08
Es el NaiveBayes algoritmo matemático definido en este caso? Sé el conjunto específico de datos es un poco artificial, pero el problema aparece de vez en cuando cuando estoy en la validación cruzada NaiveBayes modelos.