我是SAP World的新手,我正在尝试使用安装在SAP HANA Studio中的R Server(HANA Studio版本:2.3.8和R Server 3.4.0版本)
我的任务是:
以下是培训在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;
(请不要混淆,我没有使用我的输入数据进行模型训练,这不是一个真实的例子)
以下是SAP HANA上的模型表应如何显示:
在此示例中,培训正在进行,但我不确定如何在SAP HANA数据库中保存randomForest-Object,或者如何将randomForest-Object转换为图片中的类似对象。
非常感谢任何帮助:)
答案 0 :(得分:0)
如果您计划使用R服务器进行预测,则可以将随机Forest模型存储为SAP HANA中的BLOB
对象。
在SAP HANA R Integration Guide之后,你需要。
BLOB
中加入"PA"."TRAIN_MODEL
属性。serialize
的二进制文件。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;