2017-11-08 3 views
0

나는 SAP 세계에서 아주 새로운 그리고 난 SAP HANA 스튜디오 내에 설치 R 서버 작업을 시도하고있다 : 내 작업은SAP HANA Studio에서 R randomForest 개체를 저장하는 방법은 무엇입니까?

(HANA 스튜디오 버전 R 서버 3.4.0의 2.3.8 & 버전) :

  • 기차 HANA의 새로운 데이터에 대한
  • 저장 HANA에서 PAL 모델 객체와 랜덤 포레스트 모델
  • 만들기 예측 (HANA에 RLANG 절차의 도움으로) HANA Studio 내 R 서버에서 랜덤 포레스트 모델 사용 이 모델
  • 나는 모델 훈련을 위해 내 입력 데이터를 사용하지 않는 것을,
    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; 
    

    이 (혼동하지 마십시오 : (210)

여기 HANA에 저장 모델을 훈련에 대한 RLANG 절차의 작은 예입니다 이 시험에서

model on SAP HANA

이 진짜 예)

다음

는 SAP의 HANA에 모델로 테이블을 같이하는 방법입니다하지 않습니다 교육을 받고 있지만 SAP HANA 데이터베이스에 randomForest-Object를 저장하는 방법이나 randomForest-Object를 그림에서 비슷한 것으로 변환하는 방법을 모르겠습니다. 당신이 당신의 예측을위한 R 서버를 사용하려는 경우

당신은 SAP의 HANA의 BLOB 객체로 임의 숲 모델을 저장할 수 있습니다, 어떤 도움 :)

답변

0

감사하겠습니다.

SAP HANA R Integration Guide 다음에해야합니다.

  1. 테이블에 BLOB 속성을 포함하십시오 ("PA"."TRAIN_MODEL).
  2. 모델을 테이블에 쓰 기 전에 serialize 함수를 사용하여 이진 파일로 저장하십시오.
  3. 로드 및 예측 절차를 호출 할 때 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, 고맙습니다. 제게 많은 도움이되었습니다. 하지만 하나의 문제가 있습니다 : generateRobjColumn 함수를 적용 할 때 내 R 세션이 종료 됨 – KayEd

+0

로컬 R 세션에서 또는 R 서버에서 직접 스크립트를 실행 해 보았습니까? 두 경우 모두 스크립트가 잘 작동했습니다. – AshOfFire

+0

로컬 R 세션을 시도했습니다 : 홍채 데이터와 같은 작은 임의의 포리스트와는 잘 작동하지만 RF 데이터에는 항상 옵션 (java.parameters = "-Xmx14g") – KayEd

관련 문제