Ошибка при попытке сделать прогноз с помощью пакета bnlearn — байесовская сеть

Я пытаюсь создать модель прогнозирования с помощью пакета bnlearn, но получаю сообщение об ошибке: "Ошибка в check.data(data): данные отсутствуют". Вот мой пример набора данных и строки кода, которые я использовал для предварительного формирования модели прогнозирования:

dat <- read.table(text = " category birds    wolfs     snakes
                    yes        3        9         7
                    no         3        8         4
                   no         1        2         8
                   yes        1        2         3
                   yes        1        8         3
                   no         6        1         2
                   yes        6        7         1
                   no         6        1         5
                   yes        5        9         7
                   no         3        8         7
                   no         4        2         7
                   notsure    1        2         3
                   notsure    7        6         3
                   no         6        1         1
                   notsure    6        3         9
                   no         6        1         1   ",header = TRUE)

Вот строки кода, которые я использовал для получения прогноза:

dat$birds<-as.numeric(dat$birds)
dat$wolfs<-as.numeric(dat$wolfs)
dat$snakes<-as.numeric(dat$snakes)
training.set = dat[1:8,2:4 ]
demo.set = dat[8:16,2:4 ]
res <- hc(training.set)
fitted = bn.fit(res, training.set)

pred = predict(fitted, demo.set) # I get an error: "Error in check.data(data) : the data are missing."

Любая идея, как ее решить?


person migdal menora    schedule 18.09.2014    source источник
comment
Вам нужно указать узел, на котором будут делаться прогнозы. то есть predict(fitted, node="snakes", data=demo.set). Чтобы прогнозировать по всем узлам, вы можете использовать sapply(names(fitted), function(i) predict(fitted, node=i, demo.set)). Взгляните на ?bnlearn:::predict.bn.fit, чтобы узнать, как указывать аргументы. [Я думаю, вы уже решили это (учитывая ваш последующий, теперь удаленный вопрос) - если да, не могли бы вы написать ответ и принять его (чтобы он казался решенным на SO).   -  person user20650    schedule 18.09.2014
comment
Спасибо user20650 за вашу помощь. Я получил то, что искал, с помощью этой строки кода: прогноз (установлено, узел = змеи, данные = demo.set, метод = байес-lw). Метод здесь имеет решающее значение, без него я получил одинаковое прогнозируемое значение для всех наблюдений. Пожалуйста, напишите свой комментарий в качестве ответа, и я проголосую за него.   -  person migdal menora    schedule 21.09.2014


Ответы (2)


predict(fittedbn, node="имя столбца для прогнозирования", data=testdata) сработало для меня

person Kamaldeep Singh    schedule 04.01.2018

У меня не установлен bnlearn, но из вашего кода я предполагаю, что проблема в том, что вы не предоставили вывод (который является столбцом категории) в тренировочный набор. Изменять:

   training.set = dat[1:8,]

и посмотрите, работает ли он.

person nicola    schedule 18.09.2014