Я хочу использовать свою байесовскую сеть в качестве классификатора, сначала для полных доказательных данных (predict
), но также для неполных данных (bnlearn::cpquery
). Но, похоже, что даже работая с одним и тем же свидетельством, функции дают разные результаты (не только из-за небольшого отклонения из-за выборки).
С полными данными можно легко использовать функцию R's predict
:
predict(object = BN,
node = "TargetVar",
data = FullEvidence ,
method = "bayes-lw",
prob = TRUE)
Анализируя атрибут prob
, я понял, что функция predict
просто выбирает уровень фактора с наивысшей присвоенной вероятностью.
Когда дело доходит до неполных доказательств (известны только результаты некоторых узлов), predict
больше не работает:
Error in check.fit.vs.data(fitted = fitted,
data = data,
subset = setdiff(names(fitted), :
required variables [.....] are not present in the data.`
Итак, я хочу использовать bnlearn::cpquery
со списком известных доказательств:
cpquery(fitted = BN,
event = TargetVar == "TRUE",
evidence = evidenceList,
method = "lw",
n = 100000)
Опять же, я просто хочу использовать фактор с наибольшей вероятностью в качестве прогноза. Поэтому, если результат cpquery
выше 0,5, я устанавливаю прогноз TRUE, в противном случае - FALSE.
Я пытался отслеживать процесс, предоставляя одинаковые (полные) данные для обеих функций, но они не возвращали мне одинаковые результаты. Есть большие различия, например Атрибут «prob» predict
дает мне p (false) = 27%, тогда как cpquery
дает мне p (false) = 2,2%.
Каков «правильный» способ сделать это? Использование только cpquery, а также для полных данных? Почему существуют большие различия?
Спасибо за вашу помощь!