Пакет R bnlearn: cpquery против предсказать - разные результаты? - PullRequest
0 голосов
/ 09 мая 2018

Я хочу использовать свою байесовскую сеть в качестве классификатора, сначала для полных доказательных данных (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, а также для полных данных? Почему существуют большие различия?

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 15 мая 2018

Как сказал пользователь20650, увеличение количества выборок в прогнозируемом вызове было решением для получения очень похожих результатов. Так что просто укажите аргумент n = ... в вызове вашей функции.

Конечно, это имеет смысл, я просто не знал об этом аргументе в функции predict(). В утилитах bn.fit об этом нет документации, а также в достаточно общей документации вести .

.
...