Skip to main content

A library to parse PMML models into Scikit-learn estimators.

Project description


PyPI version codecov Language grade: Python CircleCI ReadTheDocs

A library to effortlessly import models trained on different platforms and with programming languages into scikit-learn in Python. First export your model to PMML (widely supported). Next, load the exported PMML file with this library, and use the class as any other scikit-learn estimator.


The easiest way is to use pip:

$ pip install sklearn-pmml-model


The library currently supports the following models:

Model Classification Regression Categorical features
Decision Trees 1
Random Forests 1
Gradient Boosting 1
Linear Regression 3
Ridge 2 3
Lasso 2 3
ElasticNet 2 3
Gaussian Naive Bayes 3
Support Vector Machines 3
Nearest Neighbors
Neural Networks

1 Categorical feature support using slightly modified internals, based on scikit-learn#12866.

2 These models differ only in training characteristics, the resulting model is of the same form. Classification is supported using PMMLLogisticRegression for regression models and PMMLRidgeClassifier for general regression models.

3 By one-hot encoding categorical features automatically.


A minimal working example (using this PMML file) is shown below:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
from sklearn_pmml_model.ensemble import PMMLForestClassifier

# Prepare data
iris = load_iris()
X = pd.DataFrame(
X.columns = np.array(iris.feature_names)
y = pd.Series(np.array(iris.target_names)[]) = "Class"
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.33, random_state=123)

clf = PMMLForestClassifier(pmml="models/randomForest.pmml")
clf.score(Xte, yte)

More examples can be found in the subsequent packages: tree, ensemble, linear_model, naive_bayes, svm, neighbors and neural_network.


Depending on the data set and model, sklearn-pmml-model is between 5 and a 1000 times faster than competing libraries, by leveraging the optimization and industry-tested robustness of sklearn. Source code for this benchmark can be found in the corresponding jupyter notebook.

Running times (load + predict, in seconds)

Linear model Naive Bayes Decision tree Random Forest Gradient boosting
Wine PyPMML 0.773291 0.77384 0.777425 0.895204 0.902355
sklearn-pmml-model 0.005813 0.006357 0.002693 0.108882 0.121823
Breast cancer PyPMML 3.849855 3.878448 3.83623 4.16358 4.13766
sklearn-pmml-model 0.015723 0.011278 0.002807 0.146234 0.044016


Linear model Naive Bayes Decision tree Random Forest Gradient boosting
Wine Improvement 133× 122× 289×
Breast cancer Improvement 245× 344× 1,367× 28× 94×



Tests can be run using Py.test. Grab a local copy of the source:

$ git clone
$ cd sklearn-pmml-model

create a virtual environment and activating it:

$ python3 -m venv venv
$ source venv/bin/activate

and install the dependencies:

$ pip install -r requirements.txt

The final step is to build the Cython extensions:

$ python build_ext --inplace


You can execute tests with py.test by running:

$ python pytest


Feel free to make a contribution. Please read for more details.


This project is licensed under the BSD 2-Clause License - see the LICENSE file for details.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sklearn-pmml-model-1.0.0.tar.gz (693.4 kB view hashes)

Uploaded source

Built Distributions

sklearn_pmml_model-1.0.0-cp39-cp39-win32.whl (357.9 kB view hashes)

Uploaded cp39

sklearn_pmml_model-1.0.0-cp38-cp38-win32.whl (358.2 kB view hashes)

Uploaded cp38

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page