机器学习-java调用机器学习pai的LR模型

本文介绍如何在阿里云机器学习PAI平台训练模型并导出为PMML格式,随后使用Java调用该模型进行预测。通过引入jpmml-evaluator库,实现了Java应用程序中对PMML模型的解析与预测功能。
部署运行你感兴趣的模型镜像

背景

最近在使用阿里的机器学习pai进行模型训练,训练出来的模型需要给java进行调用来使用。本博客阐述java调用pmml进行预测的过程。

实战

获取pmml模型

在机器学习pai->模板实验->心脏病预测,可以直接训练并且导出模型,具体步骤参考:https://help.aliyun.com/document_detail/34929.html?spm=a2c4g.11186623.6.676.5394607a96UDkz

java调用pmml

依赖支持库jpmml:https://github.com/jpmml/jpmml-evaluator.git

<!-- https://mvnrepository.com/artifact/org.jpmml/pmml-evaluator -->
        <dependency>
            <groupId>org.jpmml</groupId>
            <artifactId>pmml-evaluator</artifactId>
            <version>1.3.5</version>
        </dependency>

这里使用的是1.3.5,跟阿里的版本保持一致,避免出现版本兼容性的问题。

下载pmml的模型文件:https://download.youkuaiyun.com/download/wangjie5540/12101924

java源码

@Log4j2
public class PmmlPredict {

    public static Evaluator evaluator;

    public static void initModel() throws IOException, SAXException, JAXBException {
        File file = new File("/home/wang/Downloads/lr_demo.pmml");
        PMML pmml = null;
        try (InputStream is = new FileInputStream(file)) {
            pmml = org.jpmml.model.PMMLUtil.unmarshal(is);
        }
        evaluator = ModelEvaluatorFactory.newInstance().newModelEvaluator(pmml);
        evaluator.verify();
    }

    public static Integer predict(JSONObject feature) {
        // 获取模型定义的特征
        List<? extends InputField> inputFields = evaluator.getInputFields();
        log.info("模型的特征是:{}", inputFields);
        // 获取模型定义的目标名称
        List<? extends TargetField> targetFields = evaluator.getTargetFields();
        log.info("目标字段是:{}", targetFields);


        Map<FieldName, FieldValue> arguments = new LinkedHashMap<>();
        for (InputField inputField : inputFields) {
            FieldName inputName = inputField.getName();
            String name = inputName.getValue();
            Object rawValue = feature.get(name);
            FieldValue inputValue = inputField.prepare(rawValue);
            arguments.put(inputName, inputValue);
        }
        Map<FieldName, ?> results = evaluator.evaluate(arguments);
        for (Map.Entry<FieldName, ?> entry : results.entrySet()) {
            log.info(entry.getKey());
            log.info(entry.getValue());
        }
        Map resultRecord = (Map) EvaluatorUtil.decode(results);
        Object res = resultRecord.get(FieldName.create("y"));
        log.info("预测结果:");
        log.info(results);
        log.info(resultRecord);
        log.info(res);
        log.info(evaluator.getActiveFields());
        log.info(evaluator.getTargetFields());
        log.info(evaluator.getSummary());
        log.info(evaluator.getMiningFunction());
        return null;
    }

    public static void main(String[] args) throws JAXBException, SAXException, IOException {
        PmmlPredict.initModel();
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("sex", 1);
        jsonObject.put("address", 1);
        jsonObject.put("famsize", 1);
        jsonObject.put("pstatus", 0);
        jsonObject.put("medu", 0);
        jsonObject.put("fedu", 1);
        jsonObject.put("mjob", 1);
        jsonObject.put("fjob", 0);
        jsonObject.put("guardian", 1);
        jsonObject.put("traveltime", 0);
        jsonObject.put("studytime", 0.3);
        jsonObject.put("failures", 0.3);
        jsonObject.put("schoolsup", 0);
        jsonObject.put("fumsup", 1);
        jsonObject.put("paid", 0);
        jsonObject.put("activities", 0);
        jsonObject.put("higher", 0);
        jsonObject.put("internet", 1);
        jsonObject.put("famrel", 0);
        jsonObject.put("freetime", 0.7);
        jsonObject.put("goout", 0.5);
        jsonObject.put("dalc", 0.7);
        jsonObject.put("walc", 0);
        jsonObject.put("health", 0.5);
        jsonObject.put("absences", 0.8);
//        1,1,0,0,1,1,0,1,0,0.3333333333333333,0.3333333333333333,0,1,0,0,0,1,0,0.75,0.5,0.75,0,0,0.5,0.08,0
        PmmlPredict.predict(jsonObject);
    }
}

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

<think>好的,我现在要解决的问题是用户询问阿里云API与PAI之间的区别及各自的适用场景。首先,我需要明确用户的问题核心,即区分这两个阿里云服务,并说明它们各自的用途和适合的情况。 首先,我需要回忆一下阿里云的各种服务。阿里云API应该是指阿里云的API网关(API Gateway),而PAI则是Platform for Artificial Intelligence,即机器学习平台。用户可能对这两个服务的功能有混淆,需要明确两者的定位。 接下来,我需要确认阿里云API网关和PAI的具体功能。API网关主要用于API的管理、发布、维护和安全控制,帮助用户构建和管理API接口。而PAI一个机器学习平台,提供从数据处理、模型训练到模型部署的全流程服务。特别是PAI-EAS用于模型的弹性部署和推理服务。 用户之前的提问涉及到智能平台中NLP和生成式大模型的整合,现在转向询问阿里云的具体服务,可能需要结合之前的上下文,但当前问题更关注API与PAI的区别。 我需要查阅相关文档或已有的知识,确保准确理解两者的区别。例如,API网关属于中间件服务,处理API流量;而PAI是AI平台,专注于机器学习模型的开发和部署。 接下来,我需要组织回答的结构,可能分为定义、核心功能对比、适用场景、协作案例等部分。要确保用户能清晰理解两者的不同,以及何时使用哪一个。 需要注意用户提供的引用内容,虽然用户提到引用仅供参考,但可能需要确认是否有相关信息需要整合。例如,用户提到PAI-EAS用于模型部署,而API网关用于API管理,可以结合这些点进行说明。 需要检查是否有常见的混淆点,比如是否有人误将PAI的部署接口与API网关混淆,或者认为PAI包含API管理功能。这时候需要明确指出,PAI主要处理模型相关的工作流,而API网关处理的是更广泛的API管理和安全。 最后,确保回答语言符合中文要求,结构清晰,分点明确,并且包含用户可能关心的相关问题,如如何选择、协作案例等。</think>--- ### 阿里云 API 网关与 PAI 的核心区别及适用场景分析 --- #### **一、基础定义与核心功能对比** | **维度** | **阿里云 API 网关** | **阿里云 PAI(含PAI-EAS)** | |-------------------|---------------------------------------------|--------------------------------------------| | **服务类型** | API 全生命周期管理中间件 | 机器学习全流程平台(训练、部署、推理) | | **核心功能** | - API 发布与管理<br>- 流量控制与安全防护<br>- 协议转换与数据聚合 | - 数据预处理与特征工程<br>- 模型训练与调优<br>- 弹性模型部署(PAI-EAS)<br>- 在线/离线推理服务 | | **技术定位** | **连接器**:实现系统间接口标准化 | **生产力工具**:AI模型开发与落地 | --- #### **二、典型应用场景** 1. **API 网关的核心场景** - **微服务架构集成**:将后端服务(如ECS函数计算、数据库)封装为标准化API,供前端调用 - **第三方服务对接**:统一管理外部API调用(如支付接口、地图API),实现鉴权与流量控制 - **企业级API开放平台**:对外提供API服务时,管理开发者访问权限与调用频次 ```mermaid graph LR A[客户端] --> B{API网关} B --> C[函数计算] B --> D[ECS服务器] B --> E[RDS数据库] ``` 2. **PAI 的核心场景** - **模型训练与迭代**:基于PAI-Studio进行可视化建模,或使用PAI-DSW进行代码级开发 - **高并发推理服务**:通过PAI-EAS部署生成式大模型(如GPT类模型),支持自动扩缩容[^1][^2] - **行业AI解决方案**:预置零售、金融等领域的算法模板,加速模型落地 ```python # PAI-EAS 模型部署示例(Python SDK) from eas_prediction import PredictClient client = PredictClient('http://your-endpoint', 'model-name') client.set_token('your-token') resp = client.predict(data={'text': '你好'}) # 调用部署的NLP模型 ``` --- #### **三、关键差异点详解** 1. **资源管理方式** - **API网关**:以API调用次数和流量计费,关注**请求响应链路** - 例:配置每秒1000次的限流策略防止服务过载 - **PAI**:以计算资源(CPU/GPU/内存)和存储资源计费,关注**模型计算效率** - 例:PAI-EAS支持按需启动GPU实例处理图像生成任务[^2] 2. **技术栈覆盖范围** - **API网关**: - 支持RESTful、WebSocket等协议 - 集成WAF防火墙、JWT鉴权等安全组件 - **PAI**: - 提供PyTorch、TensorFlow等框架的预装环境 - 内置特征工程工具(如PAI-AutoML)和模型监控模块 3. **性能优化方向** | **指标** | **API网关优化重点** | **PAI优化重点** | |----------------|-----------------------------|-------------------------------| | 延迟 | 减少协议转换耗时 | 提升模型推理速度(如量化压缩) | | 可靠性 | 保证API可用性SLA | 确保训练任务容错与断点续训 | | 成本 | 降低无效API调用损耗 | 优化GPU资源利用率 | --- #### **四、协作案例:AI服务端到端落地** 1. **架构流程图** ``` 用户请求 → [API网关] → 鉴权/路由 → [PAI-EAS模型服务] → 返回推理结果 ↳ 流量监控 ↳ 自动扩缩容 ``` 2. **具体实施步骤** - **步骤1**:在PAI中训练CV模型并部署到PAI-EAS,生成HTTP端点 - **步骤2**:通过API网关创建API,将`/detect`路径映射到PAI-EAS端点 - **步骤3**:配置网关层缓存(如重复图片请求直接返回历史结果) - **效果**: - 客户端只需调用网关API,无需感知后端模型版本变更 - 网关层拦截非法请求,降低PAI-EAS的计算压力[^1] --- #### **五、选型决策建议** | **需求特征** | **推荐服务** | **原因说明** | |-----------------------------|--------------------|--------------------------------------------| | 需要统一管理多后端服务接口 | API网关 | 提供标准化入口与安全管控 | | 涉及大规模数据训练与调参 | PAI-Studio/DSW | 集成Notebook开发环境与分布式训练框架 | | 高并发实时推理(如AI客服) | PAI-EAS + API网关 | EAS处理计算密集型任务,网关管理访问流量 | | 低频次内部工具接口 | 直接使用函数计算 | 避免网关配置复杂度 | --- ### 总结 - **API网关**是**系统连接层**的核心组件,专注接口标准化与安全治理 - **PAI**是**AI生产力平台**,覆盖从数据到模型的全生命周期管理 - 两者常结合使用:API网关作为访问入口,PAI-EAS提供模型计算能力,形成完整的AI服务链路[^1][^2] --- ### 相关问题 1. 如何在API网关中配置针对PAI-EAS的限流策略? 2. PAI-EAS与函数计算在模型部署场景下的性能对比? 3. 如何通过API网关实现多版本PAI模型的灰度发布?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值