Прогноз с использованием cpdist с использованием "вероятностей" в качестве доказательства

У меня очень быстрый вопрос с простым воспроизводимым примером, связанным с моей работой по прогнозированию с помощью bnlearn

    library(bnlearn)
    Learning.set4=cbind(c("Yes","Yes","Yes","No","No","No"),c(9,10,8,3,2,1))
    Learning.set4=as.data.frame(Learning.set4)
    Learning.set4[,c(2)]=as.numeric(as.character(Learning.set4[,c(2)]))
    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)


    #Some predictions with "lw" method

    #Here is the approach I know with a SET particular modality. 
    #(So it's happening with certainty, here for example I know Cause is "Yes")
    classic_prediction=cpdist(haha,nodes="Cons",evidence=list("Cause"="Yes"),method="lw")
    print(mean(classic_prediction[,c(1)]))


    #What if I wanted to predict the value of Cons, when Cause has a 60% chance of being Yes and 40% of being no?
    #I decided to do this, according the help
    #I could also make a function that generates "Yes" or "No" with proper probabilities.
    prediction_idea=cpdist(haha,nodes="Cons",evidence=list("Cause"=c("Yes","Yes","Yes","No","No")),method="lw")
    print(mean(prediction_idea[,c(1)]))

Вот что говорит помощь:

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

Когда я прогнозирую значение переменной, используя категориальные переменные, я пока просто использовал определенную модальность указанной переменной, как в первом прогнозе в примере. (Если установить значение "Да", доводы "против" получат высокое значение)

Но если бы я хотел предсказать "Минусы", не зная точной модальности переменной "Причина", могу ли я с уверенностью использовать то, что сделал во втором прогнозе (просто зная вероятности)? Это элегантный способ или есть лучше реализованные, которые я не знаю?

1 ответ

Я связался с создателем пакета, и я вставлю его ответ, связанный с вопросом здесь:

Вызов cpquery() неправильный:

Prediction_idea=cpdist(haha,nodes="Cons",evidence=list("Cause"=c("Yes","Yes","Yes","No","No")),method="lw")
print(mean(prediction_idea[,c(1)]))

Запрос с 40%-60% мягких доказательств требует, чтобы вы сначала разместили эти новые вероятности в сети

haha$Cause = c(0.40, 0.60)

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


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

change=haha$Cause$prob
change[1]=0.4
change[2]=0.6
haha$Cause=change
new_prediction=cpdist(haha,nodes="Cons",evidence=TRUE,method="lw")
print(mean(new_prediction[,c(1)]))
Другие вопросы по тегам