本帖最后由 喵十八 于 2018-7-12 08:20 编辑
问题导读
1.R语言训练的模型如何导出为PMML?
2.现有的rds格式的模型文件如何转化为PMML?
综述R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
许多数据工程师或者数据分析师都习惯使用R进行数据挖掘和建模分析。
本文介绍了如何将R中的模型导出为PMML文件,方便后续的工程上线操作,内容包括涉及环境的搭建和中间遇到的坑。
本文介绍的三种方式,各自支持的机器学习模型种类不完全一致,文中附有官方文档链接,模型支持程度请查阅官方文档。
前置知识- R 基本操作
- Maven 基本操作
- Java 命令基本操作
R2PMML
软件版本
安装使用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)中,增加了支持模型的数量。
软件版本
安装过程需要用到的包有: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 的方式安装。
软件版本
安装在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
|