搭建一个简易的 PMML 模型测试环境

这篇具有很好参考价值的文章主要介绍了搭建一个简易的 PMML 模型测试环境。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PMML,全称为 Predictive Model Markup Language,是一种标准化的模型描述和交换格式。它允许从不同的数据挖掘和机器学习软件中导出模型,并在其他系统中进行部署,无需重新编写代码。PMML 通过定义一套统一的规则来描述模型,包括数据预处理、模型参数以及输入输出格式等。目前PMML已支持包括逻辑回归、树模型、神经网络(目前多用ONNX 部署) 等多种常见的数据挖掘和机器学习模型。

信贷风控领域,PMML被广泛使用来部署信用评分模型,并将其集成到线下和线上的贷款申请审核流程中。本文将探讨如何利用 IntelliJ IDEA 和 Maven 搭建一个简单的 PMML 测试环境。通过这个环境,我们可以方便地加载、验证和测试各种 PMML 模型,确保它们在部署前能够正确执行并满足业务需求。

PMML 文件主要组成部分

PMML 文件包含以下几个主要部分:

  • Header:包含模型的一般信息,如版权、描述及生成模型的应用程序名称和版本。
  • Data Dictionary:定义模型使用的所有可能字段,包括字段类型(连续的、分类的、序数的)和数据类型(如字符串或双精度浮点数)。
  • Data Transformations:定义数据转换操作,包括规范化、离散化和值映射等,以适应挖掘模型的需求。
  • Model:描述数据挖掘模型的具体信息,如模型名称、函数名称、算法名称及激活函数等。
  • Mining Schema:列出模型中使用的所有字段,并包含每个字段的具体信息,如使用类型和缺失值处理策略。
  • Output:定义模型输出字段,用于后处理预测值,如转换或应用概率分布等。

在风控模型的开发与测试中,利用PMML(Predictive Model Markup Language)进行模型部署与验证是一种高效且常用的方法。今天,我们将探讨如何通过PMML来测试预测模型,同时也分享一些实用的代码片段,帮助你更好地理解与应用。

Maven 依赖配置

pom.xml​文件中配置所需的依赖,确保PMML-Evaluator能够被正确加载。下面是一个简单的示例,展示了如何配置这些依赖:

<dependencies>
    <dependency>
        <groupId>org.jpmml</groupId>
        <artifactId>pmml-evaluator</artifactId>
        <version>1.5.10</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>

模型加载与评估

通过PMML模型进行评估前,需要先加载PMML文件。

public static Evaluator loadPmmlEvaluator(String modelPath) throws Exception {
    File modelFile = new File(modelPath);
    try (InputStream modelInputStream = new FileInputStream(modelFile)) {
        PMML pmmlModel = org.jpmml.model.PMMLUtil.unmarshal(modelInputStream);
        ModelEvaluatorFactory evaluatorFactory = ModelEvaluatorFactory.newInstance();
        ModelEvaluatorBuilder evaluatorBuilder = new ModelEvaluatorBuilder(pmmlModel)
                .setModelEvaluatorFactory(evaluatorFactory);
        return evaluatorBuilder.build();
    }
}

测试数据的生成

生成合适的测试数据是模型验证的关键。以下代码片段可以直接通过加载的 PMML 文件中的字段,来生成一份测试数据,用于模型的快速验证:

public static Map<String, Double> createTestInputData(Evaluator evaluator) {
    List<InputField> inputFields = evaluator.getInputFields();
    Map<String, Double> inputData = new HashMap<>();
    Random randomGenerator = new Random();
    for (InputField field : inputFields) {
        FieldName fieldName = field.getName();
        inputData.put(fieldName.getValue(), randomGenerator.nextDouble() * 200000);
    }
    return inputData;
}

执行模型预测

最后一步是使用前面生成的测试数据来执行模型预测。

public static void executeModelPrediction(Evaluator evaluator, Map<String, Double> inputData) throws Exception {
    Map<FieldName, FieldValue> preparedInputs = new LinkedHashMap<>();
    for (InputField field : evaluator.getInputFields()) {
        FieldName fieldName = field.getName();
        Object rawValue = inputData.get(fieldName.getValue());
        FieldValue preparedValue = field.prepare(rawValue);
        preparedInputs.put(fieldName, preparedValue);
    }

    Map<FieldName, ?> predictionResults = evaluator.evaluate(preparedInputs);
    for (TargetField targetField : evaluator.getTargetFields()) {
        FieldName fieldName = targetField.getName();
        Object fieldValue = predictionResults.get(fieldName);
        System.err.println("Target: " + fieldName.getValue() + " Value: " + fieldValue);
    }
}

通过正确配置 PMML 模型文件路径,可以快速对自动生成的测试样本打分测试,输出格式如下:

​​

通过以上步骤,我们搭建了一个快速对 PMML 模型文件进行本地测试的简易环境,可以有效地加载、执行PMML模型,进行必要的测试。

参考资料

Predictive Model Markup Language

PMML文档文章来源地址https://www.toymoban.com/news/detail-855173.html

到了这里,关于搭建一个简易的 PMML 模型测试环境的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 搭建一个简易框架 3秒创建一个WebApi接口

    前端ajax请求数据,传递的参数都是一个json字符串,经过多次解析发现其实都是一个DataSet {\\\"selectA1\\\":[{\\\"Name\\\":\\\"156324\\\"}]} {\\\"selectA1\\\":[{\\\"Name\\\":\\\"156324\\\"}],\\\"selectA2\\\":[{\\\"IdA\\\":\\\"11\\\",\\\"IdB\\\":\\\"12\\\"},{\\\"IdA\\\":\\\"13\\\",\\\"IdB\\\":\\\"14\\\"}]} 既然如此那么数据库设计一张表 . . 前端请求数据时传递一个字符串JsonParm,里面放json格式

    2024年02月03日
    浏览(36)
  • Django搭建一个简易AI网站

    处理完项目的环境后,让我们现在创建主项目,在端中运行此命令: 根据Django 文档,django-admin它是一个用于管理任务的命令行实用程序。切换到项目的文件夹,使用命令如下 并创建应用程序assistant,运行命令: 到目前为止,现在应该有一个如下所示的文件夹结构: 让我们

    2024年02月12日
    浏览(33)
  • Django搭建一个简易GPT网站

    处理完项目的环境后,让我们现在创建主项目,在端中运行此命令: 根据Django 文档,django-admin它是一个用于管理任务的命令行实用程序。切换到项目的文件夹,使用命令如下 并创建应用程序assistant,运行命令: 到目前为止,现在应该有一个如下所示的文件夹结构: 让我们

    2024年02月02日
    浏览(45)
  • AI 与控制:神经网络模型用于模型预测控制(Model Predictive Control)

    最优控制理论处理的问题通常是找到一个满足容许控制的 u*,把它作用于系统(被控对象)ẋ(t)=f(x(t),u(t),t) 从而可以得到系统的状态轨迹 x(t),使得目标函数最优。对于轨迹跟踪问题,那目标函数就是使得这个轨迹在一定的时间范围[t0tf]内与我们期望的轨迹(目标)x*(t) 越近

    2024年02月04日
    浏览(51)
  • 机器人模型预测控制MPC(model predictive control)

    当前控制动作是在每一个采样瞬间通过求解一个有限时域开环最优控制问题而获得。过程的当前状态作为最优控制问题的初始状态,解得的最优控制序列只实施第一个控制作用。这是它与那些使用预先计算控制律的算法的最大不同。本质上模型预测控制求解一个开环最优控制

    2024年02月07日
    浏览(47)
  • 认识环境变量和进程替换,实现一个简易的shell

    首先,在百度百科中,环境变量的解释是这样的: 环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将

    2024年02月08日
    浏览(53)
  • RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132733901 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中… 上一篇:《RK3568开发笔记(六):

    2024年02月07日
    浏览(63)
  • 【Socket】Unix环境下搭建简易本地时间获取服务

    本文搭建一个Unix环境下的、局域网内的、简易的本地时间获取服务。 主要用于验证: 当TCP连接成功后,可以在两个线程中分别进行读操作、写操作动作 当客户端自行终止连接后,服务端会在写操作时收到 SIGPIPE 信号 当客户端执行shutdown写操作后,客户端会在写操作时收到

    2024年02月04日
    浏览(37)
  • Python+django+selenium搭建简易自动化测试

    该平台会集成UI自动化及api自动化,里面也会涉及到一些简单的HTML等前端,当然都是很基础的东西。在以后的博客里,我会一点点的尽量写详细,帮助一些测试小白一起成长,当然我也是个小菜鸡。 第一章 django 搭建平台。 1.1搭建环境 Django 官方网站:The web framework for perfe

    2024年02月02日
    浏览(39)
  • Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】

    未优化做简单的判断: 优化:返回的是json的格式 GlobalExceptionHandler 这里为啥要写这两个类: 理解:编写 GlobalExceptionHandler 类可以集中处理应用程序中的各种异常,提高代码的可维护性,同时简化了代码 实体:使用注解 抛一个异常: 报错信息: 这个是时候错误已经该变:

    2024年01月22日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包