Пакет bnlearn: неожиданное поведение cpdist (предсказания)

Я столкнулся с проблемой, которая выходит за рамки моего понимания. Я сделал простой воспроизводимый пример для вас, чтобы проверить это.

По сути, я создаю байесовскую сеть с двумя сильно коррелированными переменными, которые связаны между собой. Можно ожидать, что если один из них высокий, другой также должен быть (так как они напрямую связаны).

library(bnlearn)

Learning.set4 = cbind(c(1,2,1,8,9,9),c(2,0,1,10,10,10))
Learning.set4 = as.data.frame(Learning.set4)
colnames(Learning.set4) = c("Cause","Cons")
b.network = empty.graph(colnames(Learning.set4))
struct.mat = matrix(0,2,2)
colnames(struct.mat) = colnames(Learning.set4)
rownames(struct.mat) = colnames(struct.mat)
struct.mat[1,2] = 1

bnlearn::amat(b.network) = struct.mat
haha = bn.fit(b.network,Learning.set4)

# Here we get a mean that is close to 10    
seems_logic_to_me=cpdist(haha, nodes="Cons", 
                                evidence=list("Cause"=10), method="lw")

# Here I get a mean that is close to 5, so a high value 
# of Cons wouldn't mean anything for Cause?    
very_low_cause_values = cpdist(haha, nodes="Cause",  
                                 evidence=list("Cons"=10), method="lw")

Может ли кто-нибудь просветить меня здесь о причине, почему это не работает с lw метод? (Вы можете попробовать с ls и вроде работает нормально).

lw обозначает вероятность весов

ОБНОВЛЕНИЕ: Получил решение от сопровождающего. Добавление следующего в конце выведет ожидаемый прогноз:

print (sum(very_low_cause_values[, 1] * attr(very_low_cause_values, "weights")) / sum(attr(very_low_cause_values, "weights")))

0 ответов

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