2016-10-02 82 views
0

我遇到一個錯誤使用bnlearn R中,試圖預測一個連續變量:R將無法預測一個連續變量(引發Error)

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 

我得到的錯誤讀:

Error in UseMethod("predict") : 
    no applicable method for 'predict' applied to an object of class "bn.fit.gnode" 

我找不到任何使用googling錯誤的東西。我從another thread那裏得到了這個例子,它似乎起作用了。

我錯過了什麼? 我很感激每一個提示。謝謝!

回答

0

默認情況下,大多數貝葉斯網絡算法都假定所有變量都是由1和0組成的二進制(是/否),而不是連續的。因此,可能檢查您正在使用的R軟件包的數據要求/選項。 Bayesian networks which use continuous variables通常使用核密度估計(KDE)。您可以嘗試搜索使用Epanechnikov內核的貝葉斯網絡包,該內核是用於KDE的最常見的內核之一。

我看着你的R-代碼,並調整一些依賴後,你需要使用下面的代碼做一個預測,並獲得精度:

library(bnlearn)      # Load the package in R 
    install.packages("Rcpp") 
    install.packages("forecast", dependencies = TRUE) 
    library(forecast) 
    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 
    cbind(pred, test.set[, "C"])   # compare the actual and predicted 
    accuracy(f = pred, x = test.set[, "C"]) 

      pred   
[1,] 3.5749952 3.952410 
[2,] 0.7434548 1.443177 
[3,] 5.1731669 5.924198 
[4,] 10.0840800 10.296560 
[5,] 12.3966908 12.268170 
[6,] 9.1834888 9.725431 
[7,] 6.8067145 5.625797 
[8,] 9.9246630 9.597326 
[9,] 5.9426798 6.503896 
[10,] 16.0056136 16.037176 
> accuracy(f = pred, x = test.set[, "C"]) 
       ME  RMSE  MAE  MPE  MAPE 
Test set 0.1538594 0.5804431 0.4812143 6.172352 11.26223 
+0

感謝您的答覆!包(bnlearn)確實支持連續變量。並在我鏈接完全相同的示例代碼工作的線程。我只是不明白爲什麼它不適合我。有人可能會嘗試在他們的R安裝? (我已經更新了R和所有軟件包,但沒有成功。) – aimaim

+0

也許使用「預測」而不是「預測」。如果這不起作用,那麼在學習之後可能沒有任何東西被提交給預測模塊。您是否嘗試過使用相同的命令和相同的數據完全複製一個工作的示例?發生了什麼?如果這不起作用 - 那麼它可能是你的R安裝等。 – wrtsvkrfm

+0

是的,這正是我所做的(複製一個工作示例(上面的鏈接))。而據我所知,預測模塊確實收到了「它不知道該怎麼處理的類」bn.fit.gnode「」的一個對象。 「使用'預測'而不是」預測「」是什麼意思? – aimaim