首页 > 编程语言 >JAVA加载PMML算法模型

JAVA加载PMML算法模型

时间:2023-02-27 17:57:38浏览次数:41  
标签:map JAVA PMML pmml value log put evaluator 加载

注:加载失败时尝试修改pmml文件版本为4.3

依赖

<dependency>
    <groupId>org.jpmml</groupId>
    <artifactId>pmml-evaluator</artifactId>
    <version>1.4.1</version>
</dependency>
<dependency>
    <groupId>org.jpmml</groupId>
    <artifactId>pmml-evaluator-extension</artifactId>
    <version>1.4.1</version>
</dependency>

------------resources添加--------------
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>application.yml</include>
            <include>application-${activatedProperties}.yml</include>
            <include>**/**.pmml</include>
        </includes>
    </resource>
</resources>

 

加载模型
@Bean
@Qualifier("evaluator")
public Evaluator load() {
    PMML pmml = null;
    try {
        ClassPathResource classPathResource = new ClassPathResource("META-INF/xxx.pmml");
        InputStream is = classPathResource.getInputStream();
        pmml = PMMLUtil.unmarshal(is);
    } catch (IOException e) {
        log.error("Get resource:xxx.pmml failed! error msg:{}", e.getMessage());
    } catch (JAXBException | SAXException e) {
        log.error(e.getMessage());
    }
    ModelEvaluatorFactory modelEvaluatorFactory = ModelEvaluatorFactory.newInstance();
    modelEvaluator = (Evaluator) modelEvaluatorFactory.newModelEvaluator(pmml);
    modelEvaluator.verify();
    log.info("load model successful!");
    return modelEvaluator;
}

 

调用模型
@Autowired
@Qualifier("evaluator")
private Evaluator evaluator;


@Test
    public void moduleTest() {
        List<InputField> inputFields = evaluator.getInputFields();
        Map<String, Object> map = new LinkedHashMap<>();
        map.put("x1", 50);
        map.put("x2", 50);
        map.put("x3", 7);
        map.put("x4", 60);
        map.put("x5", 250);
        map.put("x6", 6);
        map.put("x7", 80);
        map.put("x8", 260);
        map.put("x9", 48);
        map.put("x10", 1);
        map.put("x11", 5);
        map.put("x12", 1);
        map.put("x13", 0);
        Map<FieldName, FieldValue> args = new HashMap<>();
        for (InputField inputField : inputFields) {
            FieldName name = inputField.getName();
            Object value = map.get(name.getValue());
            FieldValue inputFieldValue = inputField.prepare(value);
            args.put(name, inputFieldValue);
        }
        Map<FieldName, ?> evaluate = evaluator.evaluate(args);
        Object value = evaluate.get(evaluator.getTargetFields().get(0).getName());
        BigDecimal predictValue = JSON.parseObject(JSON.toJSONString(value)).getJSONObject("values").getJSONObject("1.0").getBigDecimal("value");
        log.info("result:{}", predictValue);
    }

 

 

标签:map,JAVA,PMML,pmml,value,log,put,evaluator,加载
From: https://www.cnblogs.com/lockyluo/p/17160839.html

相关文章

  • java用JwtUtils生成token
    importio.jsonwebtoken.*;importjavax.crypto.spec.SecretKeySpec;importjava.security.Key;importjava.util.Date;importjava.util.Map;importjava.util.UUID......
  • java新增注解映射字段
    1.注解样例:新建注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public@interfaceMyName{publicStringvalue()default"";}Retenti......
  • java netty socket实例:报文长度+报文内容,springboot
    前言说实话,javanetty方面的资料不算多,尤其是自定义报文格式的,少之又少自己写了个简单的收发:报文长度+报文内容发送的话,没有写自动组装格式,自己看需求吧,需要的话,自己完......
  • CouldNotLoadArgumentException[ 无法加载指定的文件/URL: C:\Users\獆礬AppData\L
    异常错误CouldNotLoadArgumentException[无法加载指定的文件/URL:C:\Users\6鳿AppData\Local\Temp\javaws20]atcom.sun.javaws.Main.launchApp(UnknownSource)atcom.s......
  • Java方法:方法的重载、命令行传参、递归
    Java方法:方法的重载、命令行传参、递归方法的重载重载就是在一个类中,有相同的函数名称,但是形参不同的函数。方法重载的规则:方法名称必须相同;参数列表必须不同(个......
  • java第二天关键字
        第一个关键字class ......
  • iframe页面加载完成为什么还是获取不到里面的dom
    iframe页面加载完成为什么还是获取不到里面的dom?因为Iframe是跨域,跨域的情况下是无法获取到iframe里面的DOM的,即使iframe加载完成,也无法获取到里面的DOM。有什么方法获取......
  • javascript尾递归优化
    JS中的递归我们来看一个阶乘的代码functionfoo(n){if(n<=1){return1;}returnn*foo(n-1);}foo(5);//120下面分析一下,代码运行过程中,......
  • javascript 高级编程 之 Array 用法总结
    引用类型是一种数据结构,用于将数据和功能联系起来。创建对象的方式:1.new操作符vararray=newArray();2.字面量表示法创建vararray=[];Array检测数组:检测数组......
  • Java方法的定义
    前言经过前面两篇关于面向对象、类和对象的文章,壹哥相信你现在对面向对象已经有了基本的了解。我们知道,在一个类中,包括属性和行为两大核心要素。我们之前已经给大家讲解了......