综述
R是用于统计分析、绘图的语言和操作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
许多数据工程师或者数据分析师都习惯使用R进行数据挖掘和建模分析。
本文介绍了如何将R中的模型导出为PMML文件,方便后续的工程上线操作,内容包括涉及环境的搭建和中间遇到的坑。
本文介绍的三种方式,各自支持的机器学习模型种类不完全一致,文中附有官方文档链接,模型支持程度请查阅官方文档。
前置知识
- R 基本操作
- Maven 基本操作
- Java 命令基本操作
R2PMML
这是一个R的包,用于将R中训练好的模型导出为PMML。github链接
软件版本
- Java 1.7 或者更新
- R 3.5.0
安装
使用devtools 从github的分支安装。代码如下:1
2
3install.packages("devtools")
library("devtools")
install_git("git://github.com/jpmml/r2pmml.git")
注
因为某些不可描述的原因,可能出现网站访问的问题,请灵活使用科学上网手段。
博主自己测试的时候,耗时在3min 左右。
基本用法(只有模型部分)
载入该包,然后调用保存模型即可,代码如下:1
2
3
4
5
6
7
8
9
10
11library("randomForest")
library("r2pmml")
data(iris)
# 训练模型
iris.rf = randomForest(Species ~ ., data = iris, ntree = 7)
print(iris.rf)
# 导出为 PMML
r2pmml(iris.rf, "iris_rf.pmml")
添加预处理过程
数据在进入模型前,可以先进行预处理,一线简单的预处理操作也可以定义在PMML中,R代码如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18library("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)
PMML包
R 中也支持了自带的PMML包,在最近的一次更新(2018.07.06)中,增加了支持模型的数量。
软件版本
- R 3.5.0
安装过程
需要用到的包有:XML PMML 需要提前安装,命令如下:1
2install.packages(“XML”)
install.packages('pmml')
选择镜像之后,等几分钟就行了。
使用
训练模型,和上面一致1
2
3
4library("randomForest")
data(iris)
iris.rf = randomForest(Species ~ ., data = iris, ntree = 7)
print(iris.rf)
将模型转为pmml之后,导出为pmml格式1
2
3library("pmml")
iris.rf.pmml <- pmml(iris.rf,name="Iris Random Forest",data=iris.rf)
savePMML(iris.rf.pmml,"iris.rf.pmml",version=4.3)
JPMML-R
上面两种方式,都是在R中,直接将模型导出为PMML。还可以将R的模型存为rds文件之后,调用Java 的方式安装。
软件版本
- Java 1.8 或者更新
- R 3.5.0
安装
在github 下载相关源码之后,编译1
2git clone git@github.com:jpmml/jpmml-r.git
mvn clean install
在 target 目录下会生成converter-executable-1.3-SNAPSHOT.jar 文件。
R中生成rds文件
将训练好的模型保存为rds,代码如下:1
2
3library("randomForest")
rf = randomForest(Species ~ ., data = iris)
saveRDS(rf, "rf.rds")
将rds文件转为pmml文件
1 | java -jar target/converter-executable-1.3-SNAPSHOT.jar --rds-input rf.rds --pmml-output rf.pmml |
总结
本文介绍了三种不同的方式,将R中训练好的模型导出为pmml文件。3种方式支持的模型不完全一致,比如 R2PMML 不支持glmnet,需要存glmnet的模型时,可以使用另外的方式。