R-пакет bnlearn: cpquery против прогнозирования - разные результаты?

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

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


person locom    schedule 09.05.2018    source источник
comment
Привет, чтобы ваш вопрос был воспроизводимым (и чтобы вам было легче получить помощь), не могли бы вы отредактировать свой вопрос, чтобы использовать один из примеров наборов данных bnlearn (возможно, ваши вероятности были бы ближе, если бы вы также увеличили количество выборок в прогнозе позвоните, т.е. n = 1e5)   -  person user20650    schedule 09.05.2018


Ответы (1)


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

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

person locom    schedule 15.05.2018