如何在 SAP HANA Studio 中保存 R randomForest 对象?
How to save an R randomForest object within SAP HANA Studio?
我是 SAP World 的新手,我正在尝试使用 SAP HANA Studio 中安装的 R Server(HANA Studio 版本:2.3.8 和 R Server 3.4.0 版本)
我的任务是:
- 在 HANA Studio 中的 R Server 上训练随机森林模型(借助 HANA 上的 RLANG 程序)
- 在 HANA 中将 randomForest 模型保存为 PAL 模型对象
- 使用此模型对 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;
(请不要混淆,我没有使用我的输入数据进行模型训练,这不是真实的例子)
SAP HANA 上的模型 table 应如下所示:
model on SAP HANA
在这个例子中训练是有效的,但我不确定如何将随机森林对象保存在 SAP HANA 数据库中或如何将随机森林对象转换为图片中的类似对象。
非常感谢任何帮助:)
如果您计划使用 R 服务器进行预测,您可以将随机森林模型存储为 SAP HANA 中的 BLOB
对象。
在 SAP HANA R Integration Guide 之后,您需要。
- 为您的 table
"PA"."TRAIN_MODEL
添加一个 BLOB
属性。
- 在将模型写入 table.
之前,使用函数 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
。
在另一个过程中,您将需要调用此 table 并反序列化您的模型以进行预测。
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;
我是 SAP World 的新手,我正在尝试使用 SAP HANA Studio 中安装的 R Server(HANA Studio 版本:2.3.8 和 R Server 3.4.0 版本)
我的任务是:
- 在 HANA Studio 中的 R Server 上训练随机森林模型(借助 HANA 上的 RLANG 程序)
- 在 HANA 中将 randomForest 模型保存为 PAL 模型对象
- 使用此模型对 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;
(请不要混淆,我没有使用我的输入数据进行模型训练,这不是真实的例子)
SAP HANA 上的模型 table 应如下所示:
model on SAP HANA
在这个例子中训练是有效的,但我不确定如何将随机森林对象保存在 SAP HANA 数据库中或如何将随机森林对象转换为图片中的类似对象。
非常感谢任何帮助:)
如果您计划使用 R 服务器进行预测,您可以将随机森林模型存储为 SAP HANA 中的 BLOB
对象。
在 SAP HANA R Integration Guide 之后,您需要。
- 为您的 table
"PA"."TRAIN_MODEL
添加一个BLOB
属性。 - 在将模型写入 table. 之前,使用函数
- 在调用预测过程时加载并
Unserialize
您的模型。
serialize
将模型存储为二进制文件
这会在你的 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
。
在另一个过程中,您将需要调用此 table 并反序列化您的模型以进行预测。
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;