分享

跨平台机器学习模型交互--将R训练的模型导出为PMML

本帖最后由 喵十八 于 2018-7-12 08:20 编辑

问题导读
1.R语言训练的模型如何导出为PMML?

2.现有的rds格式的模型文件如何转化为PMML?





综述
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
许多数据工程师或者数据分析师都习惯使用R进行数据挖掘和建模分析。
本文介绍了如何将R中的模型导出为PMML文件,方便后续的工程上线操作,内容包括涉及环境的搭建和中间遇到的坑。
本文介绍的三种方式,各自支持的机器学习模型种类不完全一致,文中附有官方文档链接,模型支持程度请查阅官方文档。

前置知识
  • R 基本操作
  • Maven 基本操作
  • Java 命令基本操作

R2PMML
这是一个R的包,用于将R中训练好的模型导出为PMML。github链接

软件版本
  • Java 1.7 或者更新
  • R 3.5.0

安装
使用devtools 从github的分支安装。代码如下:
[mw_shl_code=text,true]install.packages("devtools")
library("devtools")
install_git("git://github.com/jpmml/r2pmml.git")[/mw_shl_code]


因为某些不可描述的原因,可能出现网站访问的问题,请灵活使用科学上网手段。
博主自己测试的时候,耗时在3min 左右。

基本用法
载入该包,然后调用保存模型即可,代码如下:
[mw_shl_code=text,true]library("randomForest")
library("r2pmml")

data(iris)

# 训练模型
iris.rf = randomForest(Species ~ ., data = iris, ntree = 7)
print(iris.rf)

# 导出为 PMML
r2pmml(iris.rf, "iris_rf.pmml")[/mw_shl_code]

添加预处理过程
数据在进入模型前,可以先进行预处理,一线简单的预处理操作也可以定义在PMML中,R代码如下:
[mw_shl_code=text,true]library("caret")
library("randomForest")
library("r2pmml")

data(iris)

# 创建预处理过程,0-1 标准化
iris.preProcess = preProcess(iris, method = c("range"))

# 对原始数据进行预处理
iris.transformed = predict(iris.preProcess, newdata = iris)

# 使用预处理之后的数据训练模型
iris.rf = randomForest(Species ~., data = iris.transformed, ntree = 7)
print(iris.rf)

# 导出PMML 文件
r2pmml(iris.rf, "iris_rf.pmml", preProcess = iris.preProcess)[/mw_shl_code]



PMML包
R 中也支持了自带的PMML包,在最近的一次更新(2018.07.06)中,增加了支持模型的数量。

软件版本
  • R 3.5.0

安装过程
需要用到的包有:XML PMML 需要提前安装,命令如下:
[mw_shl_code=text,true]install.packages(“XML”)
install.packages('pmml')[/mw_shl_code]

选择镜像之后,等几分钟就行了。

使用
训练模型,和上面一致
[mw_shl_code=text,true]library("randomForest")
data(iris)
iris.rf = randomForest(Species ~ ., data = iris, ntree = 7)
print(iris.rf)[/mw_shl_code]

将模型转为pmml之后,导出为pmml格式
[mw_shl_code=text,true]library("pmml")
iris.rf.pmml <- pmml(iris.rf,name="Iris Random Forest",data=iris.rf)
savePMML(iris.rf.pmml,"iris.rf.pmml",version=4.3)[/mw_shl_code]

JPMML-R
上面两种方式,都是在R中,直接将模型导出为PMML。还可以将R的模型存为rds文件之后,调用Java 的方式安装。

软件版本
  • Java 1.8 或者更新
  • R 3.5.0

安装
在github 下载相关源码之后,编译
[mw_shl_code=shell,true]git clone git@github.com:jpmml/jpmml-r.git
mvn clean install[/mw_shl_code]

在 target 目录下会生成converter-executable-1.3-SNAPSHOT.jar 文件。
R中生成rds文件
将训练好的模型保存为rds,代码如下:
[mw_shl_code=text,true]library("randomForest")
rf = randomForest(Species ~ ., data = iris)
saveRDS(rf, "rf.rds")[/mw_shl_code]

将rds文件转为pmml文件
[mw_shl_code=shell,true]java -jar target/converter-executable-1.3-SNAPSHOT.jar --rds-input rf.rds --pmml-output rf.pmml
[/mw_shl_code]

总结
本文介绍了三种不同的方式,将R中训练好的模型导出为pmml文件。3种方式支持的模型不完全一致,比如 R2PMML 不支持glmnet,需要存glmnet的模型时,可以使用另外的方式。
REF





没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条