Я использую Naive Bayes из библиотеки e1071. У меня есть следующий игрушечный набор данных с именем nb0.csv
N_INQUIRIES_BIN,TARGET
1,0
2,1
2,0
1,0
1,0
1,0
1,1
Затем я использую следующие строки кода
library(e1071)
data = read.csv('d:/nb0.csv')
model <- naiveBayes(as.factor(data[, 'N_INQUIRIES_BIN']), data[, 'TARGET'])
Когда я набираю model
, я вижу, что модель каким-то образом обучалась
> model
Naive Bayes Classifier for Discrete Predictors
Call:
naiveBayes.default(x = as.factor(data[, "N_INQUIRIES_BIN"]),
y = data[, "TARGET"])
A-priori probabilities:
data[, "TARGET"]
0 1
0.7142857 0.2857143
Conditional probabilities:
x
data[, "TARGET"] 1 2
0 0.8 0.2
1 0.5 0.5
Однако, когда я делаю прогнозы по обучающим данным, я получаю априорные вероятности как прогнозы для всех записей.
> predict(model, as.factor(data[, 'N_INQUIRIES_BIN']), type='raw')
0 1
[1,] 0.7142857 0.2857143
[2,] 0.7142857 0.2857143
[3,] 0.7142857 0.2857143
[4,] 0.7142857 0.2857143
[5,] 0.7142857 0.2857143
[6,] 0.7142857 0.2857143
[7,] 0.7142857 0.2857143
Это ошибка реализации или я упускаю что-то очевидное?
P.S. все отлично работает с примером
Правильный ответ
Код
library(e1071)
data = read.csv('d:/nb0.csv')
data$N_INQUIRIES_BIN <- as.factor(data$N_INQUIRIES_BIN)
model <- naiveBayes(TARGET ~ ., data)
predict(model, data, type='raw')
приводит именно к тому, что я хотел
naiveBayes
может быть неправильной. Обратите внимание, что в связанных примерах всегда есть формула (а в вашем нет), а naiveBayes принимает только data.frames или массивы (поэтомуdata[,'TARGET']
, вероятно, не должно работать) - person erasmortg   schedule 25.09.2015iris
примера. В том же примере показано использованиеiris[, 5]
, поэтомуdata[, 'TARGET']
должно работать таким же образом. Чтобы быть в безопасности, я проверил, чтоmodel <- naiveBayes(as.factor(data[, 1]), data[, 2])
приводит к такому же поведению - person mskoryk   schedule 25.09.2015