lightgbm java_LightGBM模型java部署
近期使用了LightGBM进行了训练模型(计算违约概率),结果发现其余XGBoost模型训练得到的结果存在较高相关性。
模型训练之后,主要通过JAVA进行部署,网上搜集了https://github.com/lyg5623/lightgbm_predict4j 这个开源项目,但是针对最新的LightGBM库所输出的模型文件不可用。因此,先用python将模型输出的JSON文件进行模型读取的翻译,然后再将Python脚本翻译成JAVA代码。
1、参考资料
2、模型输出
在训练完模型后,使用如下代码将模型保存为JSON格式。
json_model = gbm.dump_model()
file_name = 'gbm_model.json'
with open(file_name,'w') as file_object:
json.dump(json_model,file_object)
使用 http://jsoneditoronline.org/ 可以查看所输出的JSON格式文件的具体形式,通过展开分析可以发现,其具体就是将模型树结构转换为JSON格式输出。
json.png
接下来,使用python将模型输出的JSON文件进行读取,并遍历每一棵树结构,得到在每一颗树上的得分,然后将分数求和,计算最终违约概率值。
import json
import numpy as np
import pandas as pd
file = open(r'gbm_model.json', "rb") # 读取模型json文件
model = json.load(file)
feature_names = model['feature_names'] # 获取模型中所用的特征变量
# 定义一个函数判断每一个leaf是走left还是right
def decison(data,threshold,default_left):
'''
:param data: 特征值
:param threshold: 分割判断值
:param default_left: 默认分支 default_left= True or False
:return: 返回结果left_child or right_child
'''
if ((np.isnan(data)) and (default_left is True)):
return 'left_child'
elif data <= threshold:
return 'left_child'
else:
return 'right_child'
# 定义预测函数
def predict_gbm(data):
score = 0
for i in range(len(model['tree_info'])): # 遍历每一个节点
num_leaves = model['tree_info'][i]['num_leaves'] # 获取每颗树的节点数
tree = model['tree_info'][i]['tree_structure'] # 获取每一颗树结构
for i in range(num_leaves): # 遍历节点数
# 到达节点leaf,进行走向判断
threshold = tree.get('threshold')
default_left = tree.get('default_left')
split_feature = feature_names[tree['split_feature']] # 获取叶子节点的分割特征变量
next_decison = decison(data[split_feature],threshold,default_left)
# 获取下一个分支leaf
tree = tree[next_decison]
if tree.get('left_child','not found') == 'not found': # 如果到达节点节点停止遍历,返回对应值
score = score + tree['leaf_value']
break
return(score)
# 进行测试
predict_df = []
for i in range(len(df)):
predict_data = predict_gbm(df.iloc[i,:]) # 分值
predict_dt = 1 / (np.exp(-predict_data) + 1) # 将预测分值转为p值
predict_df.append(predict_dt)
以上Python是将JSON文件的树结构模型翻译成了code,有了这个逻辑,再将其转换为JAVA代码非常简单了,有需要者可私信我邮箱。
lightgbm java_LightGBM模型java部署相关推荐
- 云计算中封闭式的Java部署模型 | CORE JAVA WEEK
嘉宾 | 谷歌高级软件工程师 周江丽 整理 | 华章编辑 高婧雅 在[Java核心技术大会2022 | 语言.平台和趋势专场]上,来自谷歌的高级软件工程师.OpenJDK Commiter和Revie ...
- 总结一下模型工程化部署的几种方式
今天我就来聊聊的对于模型的线上部署和工程化的问题的认识和工程实践. 在企业中,我们做模型的目的就是为了能够让它来更好的解决产品在实际生产过程中所遇到的具体的问题,而模型训练好之后,下一步要做的就是将其 ...
- 谈谈机器学习模型的部署
随着机器学习的广泛应用,如何高效的把训练好的机器学习的模型部署到生产环境,正在被越来越多的工具所支持.我们今天就来看一看不同的工具是如何解决这个问题的. 上图的过程是一个数据科学项目所要经历的典型的过 ...
- 利用模型算法部署图像识别_利用这些技巧增强您的图像识别模型
利用模型算法部署图像识别 So, you have gathered a dataset, built a neural network, and trained your model. 因此,您已经 ...
- SKIL/工作流程/Java部署客户端
Java部署客户端 SKIL部署客户端是用于处理SKIL客户端请求的Java API.与原始JSON请求相比,它直观且易于使用.它提供了构建请求对象的构建器模式.响应有自己的类对象. 添加到项目 客户 ...
- lightgbm保存模型参数
20210205 params = {'task': 'train', # 执行的任务类型'boosting_type': 'gbrt', # 基学习器'objective': 'lambdarank ...
- 【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
文章目录 一. Java 虚拟机内存模型 二. 程序计数器 ( 线程私有区 ) 三. 虚拟机栈 ( 线程私有区 ) 四. 本地方法栈 ( 线程私有区 ) 五. 方法区 ( 共享数据区 ) 1. 方法区 ...
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...
- 微软VDI动手实验之应用模型及部署攻略
http://virtual.it168.com/a2009/1215/824/000000824101_all.shtml [IT168 虚拟化频道]VDI从根本上说是将客户端进行虚拟化,数据处理更 ...
最新文章
- python默认的一个代码缩进是几个空格_python缩进长度是否统一
- python信用卡违约_Python数据分析及可视化实例之银行信用卡违约预测(24)
- python3d动态图-Python图像处理之gif动态图的解析与合成操作详解
- 爬虫数据采集技术趋势-智能化解析
- 从mysqldump整库备份文件中恢复单表
- 【6】C++语法与数据结构之STL_list学生管理系统_链表外排序_函数指针
- 如何才能在大数据中获取价值
- 【vijos】在vijos的自己的域中创建题目
- 3d相机机器视觉检测技术
- Mimikatz的18种免杀姿势及防御策略
- H.264 NAL语法语意以及字节流的语法语意
- php在线运行调试工具源码
- windows系统漏洞修复CVE-2016-2183,CVE-2013-2566,CVE-2015-2808
- 类的继承——cancas绘制五彩小球
- 【pwnable.kr】horcruxes - 伏地魔的7个魂器 gets栈溢出 截断 atoi转化
- RedisDesktopManager(Redis可视化工具)
- Java使用poi给Word加水印(目前自己了解的仅支持后缀为.docx格式的,.doc仍在研究)开源、免费。
- #章节四:input()函数
- Youtube视频推荐算法:从10页论文到4页论文的变迁
- Android 这些技术 —— 你都了解过吗