Saya menggunakan paket bnlearn di R untuk mempelajari struktur Jaringan Bayesian saya dan parameternya. Apa yang ingin saya lakukan adalah untuk "memprediksi" nilai dari sebuah simpul yang diberi nilai dari simpul lain sebagai bukti (jelas, dengan pengecualian dari simpul yang nilainya kita prediksi).
Saya memiliki variabel kontinu.
library(bnlearn) # Load the package in R
data(gaussian.test)
training.set = gaussian.test[1:4000, ] # This is training set to learn the parameters
test.set = gaussian.test[4001:4010, ] # This is test set to give as evidence
res = hc(training.set) # learn BN structure on training set data
fitted = bn.fit(res, training.set) # learning of parameters
pred = predict(fitted$C, test.set) # predicts the value of node C given test set
table(pred, test.set[, "C"]) # compares the predicted value as original
Sekarang, kode ini berfungsi dengan baik dan memberikan tabel di mana Anda dapat melihat bahwa nilai yang diprediksi untuk simpul C persis sama dengan nilai asli simpul C dalam set uji.
Saya tidak mengerti alasannya, dapatkah seseorang menjelaskannya?
Saya tahu, saya menyediakan seluruh df set tes yang sudah memiliki nilai simpul C di dalamnya. Tetapi jika saya memberikan data kolom lain, itu memberikan kesalahan. Jadi, saya mencoba alternatif untuk meletakkan nilai lain ke 0.
test.set$C = 0 # To not give the original value of node C as evidence
pred = predict(fitted$C, test.set) # predicts the value of node C given test set
table(pred, test.set[, "C"]) # compares the predicted value as original
Apakah pendekatan ini salah? (Menggunakan "NA" tidak diperbolehkan.)
sumber
bnlearn:::predict.bn.fit
tampaknya telah berubah. Saya telah memperbarui kode saya ke akun untuk perubahan itu.Untuk kedua set prediksi yang Anda usulkan (dengan nilai asli dan nol) saya menemukan output yang sama di R.
Ini menunjukkan bahwa nilai-nilai C tidak relevan. Selanjutnya,
test.set$c
memberi Anda:yang secara inheren berbeda dari output yang diprediksi. Ini membuat saya percaya bahwa kode Anda sebenarnya benar.
sumber
Setara dengan kasus diskrit terjadi (ketidakmampuan untuk mengatur variabel target ke nol). Dalam hal ini lakukan hal berikut:
sumber