首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Studio中保存R randomForest对象?

如何在Studio中保存R randomForest对象?
EN

Stack Overflow用户
提问于 2017-11-08 15:15:39
回答 1查看 308关注 0票数 0

我在SAP世界中很新,我正在尝试使用安装在Studio中的R服务器( HANA的版本: 2.3.8 &RServer3.4.0的版本)

我的任务是:

  • HANA中R服务器上的randomForest模型训练(借助HANA上的RLANG过程)
  • 将randomForest模型保存为HANA中的PAL模型对象
  • 利用该模型对HANA中的新数据进行预测。

下面是一个用于在HANA上对模型进行保存的RLANG过程的一个小例子:

代码语言:javascript
复制
    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;

(请不要感到困惑,我没有使用我的输入数据进行模型培训,这不是一个真正的例子)

下面是在SAP上使用模型的表应该是什么样的:

SAP HANA模型

在本例中,培训是有效的,但我不知道如何在SAP数据库中保存随机森林对象,或者如何将随机森林对象转换为图片中的类似对象。

如有任何帮助,将不胜感激:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 17:04:25

如果计划使用R服务器进行预测,可以将随机森林模型存储为SAP中的BLOB对象。

遵循SAP HANA R集成指南,您需要。

  1. BLOB属性包含到表"PA"."TRAIN_MODEL中。
  2. 在将模型写入表之前,使用函数serialize将模型存储为二进制。
  3. 在调用预测过程时加载和Unserialize您的模型。

在你的R剧本里。

代码语言:javascript
复制
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

在另一个过程中,您需要调用此表并取消模型的序列化以进行预测。

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47183274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档