簡體   English   中英

R H2O h2o.mojo_predict_df在函數內給出奇數返回

[英]R H2O h2o.mojo_predict_df gives odd return inside a function

我正在嘗試測試一個過程,在該過程中,我將通過R在R2O中使用H2O軟件包構建模型,下載MOJO,創建一個調用“ h2o.mojo_predict_df”的函數,然后使用plumber來創建一個寧靜的API。 據我了解plumber的實現,我獲得預測的方法需要包裝在一個函數中。

為了測試我正在使用iris數據集。

sessionInfo()的結果是:

R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 16299)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] purrr_0.2.5  h2o_3.20.0.2

loaded via a namespace (and not attached):
[1] Rcpp_0.12.18     crayon_1.3.4     dplyr_0.7.6      assertthat_0.2.0 bitops_1.0-6     R6_2.2.2         jsonlite_1.5     magrittr_1.5     pillar_1.3.0    
[10] rlang_0.2.1      bindrcpp_0.2.2   tools_3.4.3      glue_1.3.0       RCurl_1.95-4.11  compiler_3.4.3   pkgconfig_2.0.1  tidyselect_0.2.4 bindr_0.1.1     
[19] tibble_1.4.2

我的訓練/保存/下載代碼在這里:

library(RODBC)
library(caret)
library(h2o)

if(Sys.info()["nodename"]!="WINX-08947")
{
    Sys.setenv(JAVA_HOME='C:\\Program Files\\Java\\jre1.8.0_161')
}

fulldata<-iris
summary(fulldata)

fulldata_trainindex<-createDataPartition(fulldata$Species, p=0.75, list=FALSE)
train<-fulldata[fulldata_trainindex,]
test<-fulldata[-fulldata_trainindex,]

## Using H2O
h2o.shutdown(prompt=FALSE)
Sys.sleep(10)
localH2Oconn = h2o.init(ip="localhost",port=54321,startH2O=TRUE, nthreads=-1, max_mem_size = "4g")
X<-train[,c(1:4)]
target<-as.data.frame(train$Species)
colnames(target)<-"Species"

train_h2o <- as.h2o(train, destination_frame="train_h2o")
test_h2o <- as.h2o(test, destination_frame="test_h2o")

##### AutoML
aml<-h2o.automl(x=colnames(X)
                , y=colnames(target)
                , training_frame=train_h2o
                , validation_frame=test_h2o
                , leaderboard_frame=test_h2o
                , nfolds=5
                , max_runtime_secs=600
                , project_name='AML_MODEL'
                )


aml_best<-aml@leader
aml_best_MODEL_ID<-aml_best@model_id

h2o.download_mojo(aml_best, path = getwd(), get_genmodel_jar = TRUE)
preds<-h2o.mojo_predict_df(test, "C:/Users/jeng209/Documents/GBM_grid_0_AutoML_20180731_202910_model_3.zip", genmodel_jar_path = "C:/Users/jeng209/Documents/h2o-genmodel.jar", java_options = "-Xmx256m -XX:ReservedCodeCacheSize=256m" , verbose = TRUE)

test$PREDICTION<-preds$predict

以所需格式返回預測的測試用例的代碼為

library(h2o)
newdata <- data.frame(
            Sepal.Length=5
            , Sepal.Width=3
            , Petal.Length=2
            , Petal.Width=1
        )
mojo_res <- h2o.mojo_predict_df(newdata, "C:/Users/jeng209/Documents/GBM_grid_0_AutoML_20180731_202910_model_3.zip", genmodel_jar_path = "C:/Users/jeng209/Documents/h2o-genmodel.jar", java_options = "-Xmx256m -XX:ReservedCodeCacheSize=256m" , verbose = FALSE)
mojo_pred <- as.character(mojo_res$predict)
mojo_pred

與的輸出

> newdata <- data.frame(
+ Sepal.Length=5
+ , Sepal.Width=3
+ , Petal.Length=2
+ , Petal.Width=1
+ )
> mojo_res <- h2o.mojo_predict_df(newdata, "C:/Users/jeng209/Documents/GBM_grid_0_AutoML_20180731_202910_model_3.zip", genmodel_jar_path = "C:/Users/jeng209/Documents/h2o-genmodel.jar", java_options = "-Xmx256m -XX:ReservedCodeCacheSize=256m" , verbose = FALSE)
[1] "+ CMD: java -Xmx256m -XX:ReservedCodeCacheSize=256m -cp C:/Users/jeng209/Documents/h2o-genmodel.jar hex.genmodel.tools.PredictCsv --mojo C:\\Users\\jeng209\\Documents\\GBM_grid_0_AutoML_20180731_202910_model_3.zip --input C:\\Users\\jeng209\\AppData\\Local\\Temp\\RtmpSeY5TX/input.csv --output C:\\Users\\jeng209\\AppData\\Local\\Temp\\RtmpSeY5TX/prediction.csv --decimal"
[1] 0
[1] "data.frame"
Warning message:
In dir.create(tmp_dir) :
'C:\Users\jeng209\AppData\Local\Temp\RtmpSeY5TX' already exists
> mojo_pred <- as.character(mojo_res$predict)
> mojo_pred
[1] "versicolor"

注意在創建`mojo_res'對象之后的額外輸出。 將其放入函數中將導致以下結果:

> iris_pred <- function(sl, sw, pl, pw){
+ newdata <- data.frame(
+ Sepal.Length=sl
+ , Sepal.Width=sw
+ , Petal.Length=pl
+ , Petal.Width=pw
+ )
+ mojo_res <- invisible(h2o.mojo_predict_df(newdata, "C:/Users/jeng209/Documents/GBM_grid_0_AutoML_20180731_202910_model_3.zip", genmodel_jar_path = "C:/Users/jeng209/Documents/h2o-genmodel.jar", java_options = "-Xmx256m -XX:ReservedCodeCacheSize=256m" , verbose = FALSE))
+ mojo_pred <- as.character(mojo_res$predict)
+ return(mojo_pred)
+ }
> iris_pred(5,3,2,1)
[1] "+ CMD: java -Xmx256m -XX:ReservedCodeCacheSize=256m -cp C:/Users/jeng209/Documents/h2o-genmodel.jar hex.genmodel.tools.PredictCsv --mojo C:\\Users\\jeng209\\Documents\\GBM_grid_0_AutoML_20180731_202910_model_3.zip --input C:\\Users\\jeng209\\AppData\\Local\\Temp\\RtmpSeY5TX/input.csv --output C:\\Users\\jeng209\\AppData\\Local\\Temp\\RtmpSeY5TX/prediction.csv --decimal"
[1] 0
[1] "data.frame"
[1] "versicolor"
Warning message:
In dir.create(tmp_dir) :
  'C:\Users\jeng209\AppData\Local\Temp\RtmpSeY5TX' already exists

我還沒有找到一種僅從函數調用中返回versicolor值的方法。 到目前為止,我已經嘗試了sinkinvisible ,但是它們使預測無法被檢索。

他們是否有任何已知的方法來解決此問題,並且僅從h2o.mojo_predict_df檢索結果數據幀,而不會生成和存儲所有額外的輸出?

有一個jira票證可以刪除導致您麻煩的輸出,您可以在此處關注

作為一種解決方法,您可能可以在invisibleinvisible(capture.output())使用capture.output ,然后嘗試從那里進行一些字符串調試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM