xgboost导出为pmml模型包

机器学习模型使用时需要导出后部署在线使用,有些项目需要pmml格式,两种方法,第二种成本更低。

一、什么是PMML

PMML(Predictive Model Markup Language):预测模型标记语言,它用XML格式来描述生成的机器学习模型,是目前表示机器学习模型的实际标准。

若要将在Python中训练好的模型部署到生产上时,可以使用目标环境解析PMML文件的库来加载模型,并做预测。

二、如何导出为PMML

1. sklearn2pmml

这个方法需要安装java

import xgboost as xgb
from sklearn2pmml import sklearn2pmml, make_pmml_pipeline
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split# 加载数据集,这里以Iris为例
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 使用XGBoost的Scikit-Learn接口训练模型
model = xgb.XGBClassifier(objective='multi:softmax', num_class=3)
model.fit(X_train, y_train)# 创建PMML兼容的pipeline
pipeline = make_pmml_pipeline(model)# 导出模型到PMML文件
sklearn2pmml(pipeline, "XGBoost.pmml", with_repr = True)

报错:RuntimeError: Java is not installed, or the Java executable is not on system path

解决办法

遇到这个错误是因为sklearn2pmml库在转换模型到PMML格式时依赖于Java,因为它内部使用了JPMML(Java PMML)库来执行转换过程。如果你没有安装Java或者Java的路径没有被正确配置到系统环境变量中,就会导致这个错误。

解决办法:
1.安装Java: 首先,确保你的系统中安装了Java。你可以从Oracle官网下载适合你操作系统的Java Development Kit (JDK)。对于大多数开发用途,选择最新的长期支持(LTS)版本即可。
2.配置Java环境变量: 安装Java后,需要确保Java的可执行文件(通常是java和javac)所在的目录被添加到了系统的PATH环境变量中。这样,你就可以在任何命令行窗口中直接运行Java命令。

  • 对于Windows:

    • 右键点击“此电脑”或“我的电脑”,选择“属性”。 点击“高级系统设置”。
    • 在“系统属性”对话框中点击“环境变量”按钮。
    • 在“系统变量”区域找到并选择“Path”,然后点击“编辑”。
    • 添加JDK的bin目录路径(例如,C:\Program Files\Java\jdk-版本号\bin)
    • 到变量值中,使用分号;与其他路径分隔。
  • 对于Linux或macOS:

    • 打开终端。
    • 编辑.bashrc或.bash_profile(对于macOS Catalina及以上版本,可能需要编辑.zshrc),使用文本编辑器如nano或vim。
    • 在文件末尾添加以下行(替换/path/to/jdk为实际的JDK安装路径):
            export JAVA_HOME=/path/to/jdkexport PATH=$JAVA_HOME/bin:$PATH
    
    • 保存文件并关闭编辑器,然后运行source ~/.bashrc或source ~/.bash_profile(或.zshrc)使更改生效。
    • 验证Java安装: 重新打开命令行窗口,运行命令java -version,如果看到Java版本信息输出,则说明Java已正确安装并且环境变量配置成功。

完成以上步骤后,你应该能够使用sklearn2pmml成功地将XGBoost模型转换为、PMML格式了。如果问题仍然存在,可能需要检查是否有其他依赖问题或考虑使用nyoka作为替代方案。

2. nyoka

这个方法不需要安装java

import xgboost as xgb
from sklearn2pmml import make_pmml_pipeline
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from nyoka import xgboost_to_pmml# 加载数据集,这里以Iris为例
data = load_iris()
X = data.data
y = data.target# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 使用XGBoost的Scikit-Learn接口训练模型
model = xgb.XGBClassifier(objective='multi:softmax', num_class=3)
model.fit(X_train, y_train)# 创建PMML兼容的pipeline
pipeline = make_pmml_pipeline(model)# 假设model是之前训练好的xgboost.Booster对象
xgboost_to_pmml(pipeline=pipeline, col_names=data.feature_names, target_name='species', pmml_f_name="XGBoost.pmml")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/23575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python的df.describe()函数

一、初识describe()函数 在数据分析和处理的过程中,我们经常需要了解数据的基本统计信息,如均值、标准差、最小值、最大值等。pandas库中的describe()函数为我们提供了这样的功能,它可以快速生成数据集的描述性统计信息。 二、describe()函数的基本用法 describe()函数是pan…

探索Python装饰器:优雅地增强函数功能

Python 装饰器是一种高级功能,允许你在不修改原始函数代码的情况下,动态地修改或扩展函数的行为。 基本语法 装饰器是一种特殊的函数,其基本语法如下: def decorator_function(func):def wrapper(*args, **kwargs):# 在调用原始…

【WP|9】深入解析WordPress [add_shortcode]函数

add_shortcode 是 WordPress 中一个非常强大的函数,用于创建自定义的短代码(shortcodes)。短代码是一种简洁的方式,允许用户在内容中插入动态的、可重用的功能。通过 add_shortcode,开发者可以定义自己的短代码&#x…

【MMU】——MMU 相关的 CP15 寄存器

文章目录 MMU 相关的 CP15 寄存器C1(System Control Register)C2(Translation Table Base Control Register)C3(Domain Access Control Register)C5(Data Fault Status Register)C6(Data Fault Address Register)C9C10MMU 相关的 CP15 寄存器 寄存器作用寄存器 C1 中…

前端开发环境:Vue、Element Plus、Axios

目录 1. Vue简介 2. Element Plus简介 3. Axios简介 4. 创建Vue项目 4.1 Node.js安装 4.2 创建Vue项目 4.3 Vue项目的结构 4.4 安装Element-Plus 4.5 安装Axios 4.6 解决跨域问题 5. 应用实例 5.1 创建Vue组件 5.2 配置路由 5.3 配置根组件 5.4 启动前端应用服…

Vue 爷孙组件通讯之:Provide / Inject 详细介绍

背景 在父子组件传递数据时,通常使用的是 props 和 emit,父传子时,使用的是 props,如果是父组件传孙组件时,层层传递非常麻烦。 对于这种情况,我们可以使用一对 provide 和 inject。无论组件层次结构有多深…

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0)

在不受支持的 Mac 上安装 macOS Sonoma (OpenCore Legacy Patcher v1.5.0) Install macOS on unsupported Macs 请访问原文链接:https://sysin.org/blog/install-macos-on-unsupported-mac/,查看最新版。原创作品,转载请保留出处。 作者主…

【leetcode--30.串联所有单词的子串】

有没有一样喜欢看示例的,,看题目就觉得很难懂。大致就是words要进行排列组合,返回s中所有包含这个排列组合的首标。 顺完逻辑蛮好懂的,应该不算困难题,只是不知道用什么模块实现。 class Solution:def findSubstring…

如何利用Varjo混合现实技术改变飞机维修训练方式

自2017年以来,总部位于休斯顿的HTX实验室一直在推进混合现实技术,与美国空军密切合作,通过其EMPACT平台提供可扩展的沉浸式飞机维护虚拟现实培训。 虚拟和混合现实对维修训练的好处: l 实践技能:提供一个非常接近真实场…

【C++题解】1074 - 小青蛙回来了

问题:1074 - 小青蛙回来了 类型:需要找规律的循环 题目描述: 关于小青蛙爬井的故事,你应该早就听过了:井深10 尺,小青蛙从井底向上爬,每个白天向上爬 3 尺,每个晚上又滑下来 2 尺&…

Java | Leetcode Java题解之第136题只出现一次的数字

题目: 题解: class Solution {public int singleNumber(int[] nums) {int single 0;for (int num : nums) {single ^ num;}return single;} }

App UI 风格,尽显魅力

精妙无比的App UI 风格

Eclipse添加C和C++编译成汇编文件的选项

在miscellaneous中添加assemble listing选项就可以生成汇编文件了

[自学记录09*]Unity Shader:在Unity里渲染一个黑洞

一、前言 记得很久很久以前,在ShaderToy上看过一个黑洞的效果,当时感觉太*8帅了,于是这几天就尝试自己弄了一个。 Gargantua With HDR Bloom (shadertoy.com) 下面是我自己实现的黑洞 可以看到还是略逊一筹(感觉略逊百筹&#x…

什么是容器技术

容器虚拟化技术是一种有效的将单个操作系统的资源划分到独立的组中的技术,以便更好地在独立的组之间平衡有冲突的资源使用需求。这种技术通过“伪造”操作系统的接口,将函数库层以上的功能置于操作系统上,从而实现应用程序级别的虚拟化。容…

07-指针的概念与引用,索引

指针的概念与引用,索引 一、内存地址 字节: 定义: 字节(byte)是内存容量的一个单位,一个字节包含8个位(bit)。 地址: 定义: 内存地址是系统为了方便区分…

Java 主键生成策略之雪花算法

概述 项目中为了缓解数据库服务器压力和提高并发量进行分库分表,在新增数据时,如果此时按照传统方式使用数据库主键自增,那么在并发下ID可能会冲突; 使用UUID的话又因其无序会产生页分裂导致磁盘IO过大使得系统性能降低; 经过了解雪花算法根据其特点可以解决分布式系统中生成…

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)

场景 DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑: DockerJenkinsGiteeMaven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑_jenkins的安装以及集成jdkgitmaven 提示警告-CSDN博客 Windows10(家庭版…

AI学习指南机器学习篇-逻辑回归正则化技术

AI学习指南机器学习篇-逻辑回归正则化技术 在机器学习领域,逻辑回归是一种常见的分类算法,它常用于处理二分类问题。在实际的应用中,为了提高模型的泛化能力和降低过拟合风险,逻辑回归算法通常会使用正则化技术。本文将介绍逻辑回…

待定待定待定

BindingNavigator C# 属性&#xff08;Property&#xff09; get set StringBuilder https://www.bilibili.com/video/BV15u4y1F72C/ C# 高级数据结构有哪些 List - 动态数组&#xff0c;可以动态增长和缩减&#xff0c;提供快速访问、添加和删除元素的功能。Dictionary<TK…