otter-stream-pmml

XML Standard

PMML (Predictive Model Markup Language) support via JPMML for portable model deployment.

Module Overview

The PMML module provides XML-based model format support via JPMML evaluator, enabling portable model deployment across different platforms. It supports various ML algorithms including regression, decision trees, neural networks, and ensemble models.

📋

PMML Engine

XML Standard

XML-based model format supporting various ML algorithms via JPMML evaluator.

  • Regression, decision trees, neural networks
  • Ensemble models and voting classifiers
  • Automatic data type conversion
  • Missing value handling
🔄

Data Preparation

Preprocessing

PMML's built-in data preparation and transformation capabilities.

  • Automatic field preparation via InputField
  • Value transformations from PMML definitions
  • Discretization and normalization
  • Outlier treatment

Implementing PMML Inference

Deploy portable PMML models across different platforms.

  1. Add Maven Dependencies
    <dependency>
        <groupId>com.codedstreams</groupId>
        <artifactId>otter-stream-pmml</artifactId>
        <version>1.0.16</version>
    </dependency>
    <dependency>
        <groupId>org.jpmml</groupId>
        <artifactId>pmml-evaluator</artifactId>
        <version>1.6.3</version>
    </dependency>
  2. Export Model to PMML
    # From scikit-learn using sklearn2pmml
    from sklearn2pmml import sklearn2pmml
    from sklearn2pmml.pipeline import PMMLPipeline
    
    pipeline = PMMLPipeline([...])
    pipeline.fit(X_train, y_train)
    sklearn2pmml(pipeline, "model.pmml")
    
    # From R using pmml package
    library(pmml)
    model <- lm(formula, data)
    saveXML(pmml(model), "model.pmml")
  3. Configure and Use Engine
    ModelConfig config = ModelConfig.builder()
        .modelPath("model.pmml")
        .modelId("credit-scoring")
        .format(ModelFormat.PMML)
        .build();
    
    PmmlInferenceEngine engine = new PmmlInferenceEngine();
    engine.initialize(config);
    
    Map<String, Object> inputs = Map.of(
        "age", 35,
        "income", 75000.0,
        "credit_score", 720
    );
    
    InferenceResult result = engine.infer(inputs);
    double score = (double) result.getOutput("risk_score");

Maven Dependencies

<dependency>
    <groupId>com.codedstreams</groupId>
    <artifactId>otter-stream-pmml</artifactId>
    <version>1.0.16</version>
</dependency>
<dependency>
    <groupId>org.jpmml</groupId>
    <artifactId>pmml-evaluator</artifactId>
    <version>1.6.3</version>
</dependency>