2017-11-08 3 views
0

私はSAPの世界ではかなり新しいだと私はSAP HANA Studioの内に設置されたRのサーバーで動作するようにしようとしている:私の仕事であるSAP HANA StudioでR randomForestオブジェクトを保存する方法は?

(HANA StudioのバージョンRサーバー3.4.0の2.3.8 &版) :HANAでPALモデルオブジェクトとして

  • トレイン(HANA上RLANG手順の助けを借りて)HANA Studio内Rサーバー上のランダムフォレストモデル
  • 保存ランダムフォレストモデル
  • は使用HANAの新しいデータで予測を行いますこのモデル

ここでは、HANA上でモデルを保存訓練するためRLANG手順の小さな例です。

PROCEDURE "PA"."RF_TRAIN" ( 
    IN data "PA"."IRIS", 
    OUT modelOut "PA"."TRAIN_MODEL" 
) 
    LANGUAGE RLANG 
SQL SECURITY INVOKER 
DEFAULT SCHEMA "PA" 
AS 
BEGIN 

require(randomForest) 
require(dplyr) 
require(pmml) 
# iris <- as.data.frame(data) 
data(iris) 
iris <- iris %>% mutate(y = factor(ifelse(Species == "setosa", 1, 0))) 
model <- randomForest(y~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, iris, 
     importance = TRUE, 
     ntree = 500) 
modelOut <- as.data.frame(pmml(model)) 

END; 

(私はモデルのトレーニングのための私の入力データを使用していないことを、混同しないでください、この試験では

model on SAP HANA

:これは本当の例)

ここ

は、SAP HANA上のモデルとテーブルは以下のようになりますどのようにではありません私はどのようにSAP HANAデータベース上のrandomForest-Objectを保存するか、またはrandomForest-Objectを絵の中の同様のものに変換する方法がわかりません。

は、任意の助けいただければ幸いです:)

答えて

0

あなたの予測のためのR・サーバを使用する場合は、SAPのHANAでBLOBオブジェクトとしてごランダムフォレストモデルを保存することができます。

SAP HANA R Integration Guideに続いて、あなたはする必要があります。

  1. BLOBの属性をテーブル"PA"."TRAIN_MODELに含めます。
  2. モデルを関数serializeでバイナリとして保存してからテーブルに書き込みます。予測手順を呼び出すときは、
  3. LoadとUnserializeモデル。

これは、あなたのRスクリプトに与えるでしょう。

require(randomForest) 
require(dplyr) 
require(pmml) 
generateRobjColumn <- function(...){ 
     result <- as.data.frame(cbind(
      lapply(
       list(...), 
       function(x) if (is.null(x)) NULL else serialize(x, NULL) 
      ) 
     )) 
     names(result) <- NULL 
     names(result[[1]]) <- NULL 
     result 
    } 
# iris <- as.data.frame(data) 
data(iris) 
iris <- iris %>% mutate(y = factor(ifelse(Species == "setosa", 1, 0))) 
model <- randomForest(y~Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, iris, 
     importance = TRUE, 
     ntree = 500) 
modelOut <- data.frame(ID = 1, MODEL = generateRobjColumn(pmml(model))) 

あなたが実際にあなたが再利用モデルを計画している場合であるとしてpmmlを使用する必要はありません。

別の手順では、このテーブルを呼び出してモデルのシリアル化を解除して予測する必要があります。

CREATE PROCEDURE "PA"."RF_PREDICT" (IN data "PA"."IRIS", IN modelOut "PA"."TRAIN_MODEL", OUT result "PA"."PRED") 
LANGUAGE RLANG AS 
BEGIN 
    rfModel <- unserialize(modelOut$MODEL[[1]]) 
    result <- predict(rfModel, newdata = data) # or whatever steps you need for prediction 
END; 
+0

ありがとうございました@AshOfFire、それは私を助けました。しかし、私は1つの問題があります:generateRobjColumn関数を適用しているときにRセッションが終了する – KayEd

+0

ローカルRセッションまたは直接Rサーバーでスクリプトを実行しようとしましたか?どちらの場合も、スクリプトは私のためにうまくいった。 – AshOfFire

+0

私はローカルのRセッションを試みました。虹彩データのような小さなランダムなフォレストでうまくいきましたが、RFのデータでは、毎回 'options(java。パラメータ= "-Xmx14g") – KayEd

関連する問題