xgb生成的pkl文件转pmml文件用于跨平台部署并预测

import pandas as pd
import numpy as np
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import os
import xgboost as xgb

# step1:获取.model和.fmap模型文件
'''
fmap(feature map file):实现feature id和feature name的对应
格式为 featmap.txt: <featureid> <featurename> <q or i or int>\n
Feature id从0开始直到特征的个数为止,从小到大排列。
i表示是二分类特征
q表示数值变量,如年龄,时间等。q可以缺省
int表示特征为整数(when int is hinted, the decision boundary will be integer)
可根据以下语句通过读取pkl文件的feature_name生成,或者根据feature顺序通过别的方式生成
'''


# 若建模时仅通过pkl生成了.pkl文件,可通过下述代码转为.model(booster格式)文件
def pkl_to_model_and_fmap(model_path='xgb.txt', f_model='v.model', f_fmap='v.fmap'):
    import pickle as pkl
    clf_file = open(model_path, 'rb')
    clf = pkl.load(clf_file)
    clf_file.close()
    clf.save_model(str(f_model))

    outfile = open(f_fmap, 'w')
    for i, fea in enumerate(clf.feature_names):
        outfile.write('{0}\t{1}\tq\n'.format(i, fea))
    outfile.close()


pkl_to_model_and_fmap()

# step2:model转pmml格式文件
# 转pmml需要用java解析。
# 1、安装java1.8以上版本jdk并配置系统环境变量。注意:全部配置到系统变量或者用户变量!!重启cmd输入java -version验证是否安装:
# 安装教程:https://blog.csdn.net/qq_40279795/article/details/88957320
# 2、安装maven并配置系统环境变量(下载zip格式的无需安装添加环境变量即可)。注意:全部配置到系统变量或者用户变量!!重启cmd输入mvn -v验证是否安装:
# 下载地址: http://maven.apache.org/download.cgi
# 安装教程:https://www.jb51.net/article/194994.htm
# 3. 下载jpmml-xgboost:Java library and command-line application for converting XGBoost models to PMML.
# 下载地址:https://github.com/jpmml/jpmml-xgboost
# 4. 命令行切换到jpmml-xgboost文件夹,cmd输入代码编译:mvn clean install(安装需要一定时间)
# 该步执行完后,jpmml-xgboost的项目文件夹下会多出一个target文件夹,里面包含生成好的jar包:
# 5、jar包转换为pmml文件。切换到C:\Users\hongshaofeng\Desktop\jpmml-xgboost-master\pmml-xgboost-example\target目录启动cmd。执行以下命令其一:
# java -jar target/jpmml-xgboost-executable-1.4-SNAPSHOT.jar  --X-nan-as-missing False --X-ntree-limit 93 --model-input xgb.model --fmap-input xgb.fmap --target-name target --pmml-output xgb_pmml.pmml
# java -jar pmml-xgboost-example-executable-1.7-SNAPSHOT.jar --model-input v.model --fmap-input v.fmap --target-name target --pmml-output v.pmml
# 该步代码仅–model-input 、–fmap-input、–pmml-output为必须,其他参数根据模型要求填写。
# –X-nan-as-missing:是否将nan作为缺失值,默认True
# –X-ntree-limit:模型中包含early_stopping时,需要xgb.best_ntree_limit打印原模型早停数,并给该参数赋值


# step3:准备测试样例及预测
from pypmml import Model

model = Model.fromFile('v.pmml')

df = pd.read_csv('samples2k_20220519.csv', sep='\t')
fea = df.columns.tolist()[3:-1]  # 喂入纯fea列表,注意去除主键及label及prob。
df['prob_test'] = model.predict(df[fea])['probability(1)']  # 注意最好在linux环境中执行,windows环境可能报java相关错误。
# 结果应与prob打分一致。'probability(0)','probability(1)'分别代表预测为0,1的概率。

# 以上打分结果正常预测并保持一致即正确转化为pmml文件了。
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值