2021-05-20

机器学习模型java调用demo

 

机器学习算法线上部署方法

做算法部分用的是python的sklearn库,因此考虑用sklearn2pmml出一个pmml文件,文件里保存的是模型文件的详情,再交给Java用,实现跨平台使用,下面是使用跑通的方法:

预备工作,首先需要了解一下 what 模型预测标记语言(Predictive Model Markup Language)PMML   https://www.biaodianfu.com/pmml.html

 

一、总结来说,大体会区分这三种场景,请大家对号入座,酌情使用

 

如果是实时的、小数据量的预测应用,则采用的SOA调用Rserve或者python-httpserve来进行应用;这种应用方式有个缺点是需要启用服务来进行预测,也就是需要跨环境,从Java跨到R或者Python环境。对于性能,基本上我们用Rserver方式,针对一次1000条或者更少请求的预测,可以控制95%的结果在100ms内返回结果,100ms可以满足工程上的实践要求。更大的数据量,比如10000/次,100000/次的预测,我们目前评估下来满足不了100ms的要求,建议分批进行调用或者采用多线程请求的方式来实现。

如果是实时、大数据量的预测应用,则会采用SOA,训练好的模型转换成PMML(关于如何转换,我在下面会详细描述),然后把模型封装成一个类,用Java调用这个类来预测。用这种方式的好处是SOA不依赖于任何环境,任何计算和开销都是在Java内部里面消耗掉了,所以这种工程级别应用速度很快、很稳定。用此种方法也是要提供两个东西,模型文件和预测主类;

如果是Offline(离线)预测的,D+1天的预测,则可以不用考虑第1、2中方式,可以简单的使用Rscript x.R或者python x.py的方式来进行预测。使用这种方式需要一个调度工具,如果公司没有统一的调度工具,你用shell的crontab做定时调用就可以了。

以上三种做法,都会用SOA里面进行数据处理和变换,只有部分变换会在提供的Function或者类进行处理,一般性都建议在SOA里面处理好,否则性能会变慢。

本文重点介绍第二种方式(训练好的模型转换成PMML)

准备工作  (python 3.7  java  jdk.18 或以上)

python需要用到的库

github官方文档 jpmml https://github.com/jpmml  

sklearn2pmml 下载地址 https://pypi.org/project/sklearn2pmml/#files

下载的是一个压缩包将文件解压  cmd到解压缩目录  在命令行输入  python setup.py build  python setup.py install   查看是否安装成功 python show sklearn2pmml 出现版本号等信息表示成功

sklearn_pandas 下载地址 https://pypi.org/project/sklearn-pandas/

在cmd里,cd到python的script文件夹下 输入命令:pip install sklearn_pandas-1.7.0-py2.py3-none-any.whl  出现successed证明成功安装。

java需要用到的包

 

github官方文档 jpmml https://github.com/jpmml  

 

maven 地址
<dependency>
	<groupId>org.jpmml</groupId>
	<artifactId>pmml-evaluator</artifactId>
	<version>1.5.15</version>
</dependency>

总结 

          安装各种环境时遇到的问题

          1 python包版本不兼容相互依赖等。根据提示升级相应的包。

#列出所有安装的库
pip list

# 列出所有的旧版本包
pip list --outdated
# 升级指定的包
pip install --upgrade somepackge

然而 pip install --upgrade somepackge 只能升级一个包,无法批量操作

pip 批量升级包
可以借助 pip-review 进行包的批量升级操作
pip install pip-review
pip-review --local --interactive

pip查看是否已安装
# pip show --files 安装包名

pip卸载包
# pip uninstall 要卸载的包名

 

 

 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值