Skip to content

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

License

Notifications You must be signed in to change notification settings

iamDecode/sklearn-pmml-model

Folders and files

NameName
Last commit message
Last commit date
May 21, 2021
Apr 15, 2024
Nov 1, 2023
Nov 1, 2023
Apr 15, 2024
Nov 22, 2023
Dec 9, 2022
Jun 16, 2021
Jun 25, 2022
Jul 20, 2021
Jul 20, 2021
Jun 13, 2018
Sep 24, 2024
Sep 24, 2024
Nov 1, 2023
Feb 2, 2025
Nov 1, 2023

sklearn-pmml-model

PyPI version codecov 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.

Installation

The easiest way is to use pip:

$ pip install sklearn-pmml-model

Status

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.

Example

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
from sklearn_pmml_model.auto_detect import auto_detect_estimator

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

# Specify the model type for the least overhead...
#clf = PMMLForestClassifier(pmml="models/randomForest.pmml")

# ...or simply let the library auto-detect the model type
clf = auto_detect_estimator(pmml="models/randomForest.pmml")

# Use the model as any other scikit-learn model
clf.predict(Xte)
clf.score(Xte, yte)

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

Benchmark

Depending on the data set and model, sklearn-pmml-model is between 1 and 10 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.013038 0.005674 0.005587 0.032734 0.034649
sklearn-pmml-model 0.00404 0.004059 0.000964 0.030008 0.032949
Breast cancer PyPMML 0.009838 0.01153 0.009367 0.058941 0.031196
sklearn-pmml-model 0.010749 0.008481 0.001106 0.044021 0.013411

Improvement

Linear model Naive Bayes Decision tree Random Forest Gradient boosting
Wine Improvement 3.23× 1.40× 5.80× 1.09× 1.05×
Breast cancer Improvement 0.91× 1.36× 8.47× 1.34× 2.33×

Benchmark ran on: 24 september 2024 17:19

Development

Prerequisites

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

$ git clone http://github.com/iamDecode/sklearn-pmml-model
$ 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 setup.py build_ext --inplace

Testing

You can execute tests with py.test by running:

$ python setup.py pytest

Contributing

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

License

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