复合PMML——直接在PMML文件中组合模型的方法

一、简介

PMML(Predictive Model Markup Language)作为模型标记语言,以XML 为载体呈现数据挖掘模型,支持在不同的平台之间轻松共享。通常用各种模型开发软件直接转换的PMML文件是单个模型或者已固定的集成模型。最近在业务中碰到一个组合模型的需求,深入研究了下,发现PMML可支持直接在PMML文件中组合已有的模型,适合业务中个性化的模型需求。

二、模型说明

以下面模型(LR+决策树+线性组合)为例:

三、代码

复合模型PMML代码摘要如下:

<MiningModel functionName="regression">
  <MiningSchema>
    <MiningField name="A" usageType="active"/>
    <MiningField name="B" usageType="active"/>
    <MiningField name="C" usageType="active"/>
    <MiningField name="E" usageType="active"/>
    <MiningField name="CombinedRate" usageType="target"/>
    <MiningField name="D" usageType="active"/>
    <MiningField name="flag" usageType="target"/>
    <MiningField name="F" usageType="active"/>
    <MiningField name="G" usageType="active"/>
  </MiningSchema>
  <Segmentation multipleModelMethod="modelChain">
    <Segment id="1">
      <True/>
     <GeneralRegressionModel modelType="generalizedLinear" functionName="classification" 
      linkFunction="logit" distribution="binomial">
     <MiningSchema>
      <MiningField name="flag" usageType="target"/>
      <MiningField name="A"/>
      <MiningField name="B"/>
      <MiningField name="C"/>
      <MiningField name="D"/>
      <MiningField name="E"/>
    </MiningSchema>
    <Output>
      <OutputField name="Index" optype="continuous" dataType="double" 
     feature="probability" value="1"/>
    </Output>
  ......
  <ParamMatrix>
      <PCell targetCategory="1" parameterName="p0" beta="x0"/>
      <PCell targetCategory="1" parameterName="p1" beta="x1"/>
      <PCell targetCategory="1" parameterName="p2" beta="x2"/>
      <PCell targetCategory="1" parameterName="p3" beta="x3"/>
      <PCell targetCategory="1" parameterName="p4" beta="x4"/>
      <PCell targetCategory="1" parameterName="p5" beta="x5"/>
    </ParamMatrix>
  </GeneralRegressionModel>
   </Segment>
    <Segment id="2">
      <True/>
      <MiningModel modelName="Probability2" functionName="regression">
        <MiningSchema>
           <MiningField name="CombinedRate" usageType="target"/> 
           <MiningField name="Index" usageType="active"/>          
           <MiningField name="F" usageType="active"/>
           <MiningField name="G" usageType="active"/>
        </MiningSchema>
        <Output>
          <OutputField dataType="double" feature="predictedValue" name="CombinedRate" 
      optype="continuous"/>
        </Output>
        <Segmentation multipleModelMethod="selectFirst">
       <Segment id="2.1">
      <CompoundPredicate booleanOperator="and">
      <SimplePredicate field="F" operator="greaterOrEqual" value="2"/>
      <SimplePredicate field="G" operator="greaterOrEqual" value="10"/>
      </CompoundPredicate>
        <RegressionModel modelName="CombinedRate1" functionName="regression">
        <MiningSchema>
          <MiningField name="Index" usageType="active"/>
          <MiningField name="F" usageType="active"/>
          <MiningField name="CombinedRate" usageType="target"/>
           </MiningSchema>
        <Output>
          <OutputField dataType="double" feature="predictedValue" name="CombinedRate" optype="continuous"/>
        </Output>
        <RegressionTable targetCategory="no" intercept="1">
          <NumericPredictor coefficient="0" exponent="1" name="Index"/>
          <NumericPredictor coefficient="0" exponent="1" name="F"/>
          </RegressionTable>
      </RegressionModel>
    </Segment>
    <Segment id="2.2">
      <CompoundPredicate booleanOperator="or">
        <SimplePredicate field="F" operator="lessThan" value="2"/>
        <SimplePredicate field="G" operator="lessThan" value="10"/>
      </CompoundPredicate>
      <RegressionModel modelName="CombinedRate2" functionName="regression">
        <MiningSchema>
          <MiningField name="Index" usageType="active"/>
          <MiningField name="F" usageType="active"/>
          <MiningField name="CombinedRate" usageType="target"/>
        </MiningSchema>
        <Output>
          <OutputField dataType="double" feature="predictedValue" name="CombinedRate" optype="continuous"/>
        </Output>
        <RegressionTable targetCategory="no" intercept="0">
          <NumericPredictor coefficient="0.5" exponent="1" name="Index"/>
          <NumericPredictor coefficient="0.5" exponent="1" name="F"/>
        </RegressionTable>
      </RegressionModel>
      </Segment>
     </Segmentation>
   </MiningModel>
   </Segment>
   </Segmentation>
</MiningModel>

 

四、参考资料

  http://dmg.org/pmml

版权声明: 本文由李兴创作和发表,采用署名(BY)-非商业性使用(NC)-禁止演绎(ND)4.0国际许可协议进行许可,转载请注明作者出处,本文作者为李兴,本文标题为复合PMML——直接在PMML文件中组合模型的方法,本文链接为https://blog.youkuaiyun.com/simonlishx2017/article/details/84778739.商业用途请联系作者本人获得授权。

 

License


this paper is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. Please contact me for other usage.

### 部署SVM模型方法及工具 #### 方法概述 支持向量机(Support Vector Machine, SVM)是一种常用的监督学习算法,广泛应用于分类和回归任务。为了使训练好的SVM模型能够服务于实际应用场景,通常需要将其部署到生产环境中。模型部署的过程主要包括以下几个方面: 1. **模型保存与加载** 训练完成后,需将模型参数保存下来以便后续使用。Python中的`scikit-learn`库提供了方便的接口来保存和加载SVM模型。例如,可以通过`joblib`或`pickle`模块实现这一功能[^3]。 2. **标准化输入数据** 在训练阶段使用的特征缩放方法(如标准化或归一化),同样需要在推理阶段应用相同的预处理逻辑。这一步骤至关重要,因为它直接影响模型预测的准确性[^1]。 3. **选择合适的框架/工具** 不同的应用场景可能对应不同类型的部署需求。以下是几种常见的SVM模型部署方式及其适用工具: - **本地脚本调用** 如果目标环境允许执行Python或其他编程语言编写的脚本,则可以直接利用原始代码加载并运行已训练完毕的SVM实例。这种方式适合科研项目或者小型内部系统。 - **Web API服务形式发布** 使用Flask/Django等轻量化web框架构建RESTful APIs端点接收请求并将响应返回给客户端;也可以考虑采用专门设计用来简化机器学习工作流管理的服务平台如TensorFlow Serving、TorchServe等虽然它们主要面向深度学习领域但仍能兼容传统ML算法包括SVM在内的多种类型。 - **PMML格式转换** 将现有的sklearn-based SVM导出成符合Predictive Model Markup Language(PMML)标准定义的形式之后再借助第三方解析器完成跨平台迁移操作从而摆脱特定技术栈限制获得更大的灵活性同时降低维护成本风险[2]. 4. **持续监控与迭代改进** 即便成功上线初期版本仍需密切关注线上表现情况定期收集反馈意见据此调整策略不断优化最终达到预期效果最大化的目的. --- ### 工具推荐 针对上述提到的各种方案这里列举了一些实用性强且易于上手的相关资源供参考: - 对于希望快速搭建原型验证想法的朋友来说,"OpenCV-SVM快速训练助手"不失为一个好的起点它不仅免去了繁琐的手动编码过程而且还能兼顾效率与易用性的平衡特别适合作为入门级教学材料引导初学者逐步深入理解整个流程机制.[^3] - 当涉及到复杂业务逻辑或是大规模分布式计算场景下则建议优先考察那些经过长期实战考验成熟稳定的开源解决方案比如Scikit-Learn本身自带的功能组件配合Docker容器虚拟隔离技术共同打造稳定可靠的微服务体系架构;另外还有KNIME Analytics Platform这样的图形界面驱动型产品能够让非技术人员也轻松参与到数据分析建模过程中来进一步拓宽受众范围扩大影响力覆盖面. - 至于追求极致性能表现的专业人士而言或许可以尝试探索一下结合遗传算法(SO)/粒子群优化(PSO)等元启发式搜索技巧改良后的混合版CNN+SVM复合结构——即所谓的SO-CNN-SVM组合体其核心优势在于既能充分发挥各自特长又能有效弥补彼此短板进而取得更加理想的整体效能指标提升幅度显著优于单纯依赖任一方单独作业所能达成的结果水平线之上.[^4] ```python from sklearn import svm import joblib # 假设X_train, y_train是训练数据 model = svm.SVC() model.fit(X_train, y_train) # 保存模型 joblib.dump(model, 'svm_model.pkl') # 加载模型 loaded_model = joblib.load('svm_model.pkl') predictions = loaded_model.predict(X_test) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值