pmml介绍
pmml全称predictive model markup language,是一种基于xml的标记语言,用于描述模型,pmml语言不能描述所有的模型,pmml中可以描述预处理和后处理(取得模型预测值后进行变换,如转换为评分等),pmml是用于模型跨平台(如python环境到java环境)快速自动部署,要实现快速和自动,python和java两边都需要【翻译程序】,首先要把离线训练好的模型,存成pmml,也可以把一个类sklearn pipeline存成pmml,这样的python库有多个(nyoka、sklearn2pmml等),也有java的jar可以直接把lgb的save_model TXT转换成pmml,但是这样的【翻译程序】都有特定的支持,仅支持某些算法和标准的预处理函数,不支持ad-hoc的预处理方法,pipeline不能实现后处理,【翻译程序】当然也没有对后处理的支持,如果对pmml很了解,理论上可以直接写pmml实现后处理,pmml及其【翻译程序】对于预处理和后处理的支持都有限,建议pmml只含模型,有了pmml后,java方面也需要一个【翻译程序】把pmml翻译成java,相应的库叫jpmml,当然能理解的pmml也是有限的(包含对预处理、模型、后处理的理解),两边的【翻译程序】能支持的大多数是一些很标准化和常用的预处理函数或模型算法,但资深建模人员往往有很多ad-hoc的东西。
PMML部署方式的缺点:
1、算法库自己的api得到的模型文件比pmml小很多,载入比java载入pmml快
2、pmml预测结果会存在一定偏差
3、大规模集成学习模型,pmml太大,载入非常慢
4、不灵活,不支持ad-hoc的东西
5、pmml最好是只含模型部分,那么预处理和后处理都只能在外部实现,外部实现有时候需要给其它部门提需求,部署速度慢
留言
張貼留言