Я хочу использовать свою байесовскую сеть в качестве классификатора, сначала для полных данных доказательств (predict
), но также и для неполных данных (bnlearn::cpquery
). Но кажется, что даже работая с одними и теми же свидетельствами, функции дают разные результаты (не только на основе небольшого отклонения из-за выборки).
Имея полные данные, можно легко использовать predict
функцию R.
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, я устанавливаю прогноз в ИСТИНА, иначе - в ЛОЖЬ.
Я пытался контролировать процесс, передавая одни и те же (полные) данные обеим функциям, но они не дают мне одинаковых результатов. Есть большие различия, например Атрибут "prob" predict
дает мне p (false) = 27%, тогда как cpquery
дает мне p (false) = 2,2%.
Как это сделать «правильно»? Используете только cpquery и для полных данных? Почему большие различия?
Спасибо за вашу помощь!