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

Я хочу использовать свою байесовскую сеть в качестве классификатора, сначала на полных данных доказательства (predict), но также и по неполным данным (bnlearn::cpquery). Но, похоже, что даже работая с одним и тем же свидетельством, функции дают разные результаты (не только из-за небольшого отклонения из-за выборки).

С полными данными, можно легко использовать R 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, я установил прогноз на ИСТИНА, иначе на ЛОЖЬ.

Я пытался отслеживать процесс, предоставляя одинаковые (полные) данные для обеих функций, но они не возвращали мне одинаковые результаты. Есть большие различия, например predictАтрибут "prob" дает мне a p(false) = 27%, тогда как cpquery дает мне р (ложь) = 2,2%.

Каков "правильный" способ сделать это? Использование только cpquery, а также для полных данных? Почему есть большие различия?

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

1 ответ

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

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

Другие вопросы по тегам