Skip to main content

Example Prince PCA deployment

In this example we'll train a sklearn.linear_model.LogisticRegression on the output of a prince Principal Component Analysis that reduces the factors of the Iris sample dataset from 4 to 2.

First, import and log in to Modelbit:

import modelbit
mb = modelbit.login()

We'll reduce the four primary features (Sepal length, Sepal width, Petal length, and Petal width) of the Iris dataset to two latent features (n_components=2) using PCA:

import pandas as pd
import prince
from sklearn import datasets, linear_model

X, y = datasets.load_iris(return_X_y=True)
X = pd.DataFrame(
columns=['Sepal length', 'Sepal width', 'Petal length', 'Petal width'])

pca = prince.PCA(
pca =

Then we'll train a LogisticRegression on the Iris dataset, after it's been transformed by Prince:

lr = linear_model.LogisticRegression(), y)

Finally, we'll make a deployment function with a couple unit tests that returns the predicted name of the flower. Since we are defining label_dict outside of the deployment function Modelbit will automatically include it as a dependency in the deployment:

label_dict = {0: 'Setosa', 1: 'Versicolor', 2: 'Virginica'}

def predict_with_prince(flower_features) -> str:
This deployment uses Prince PCA and a LogisticRegression to predict flower types
>>> predict_with_prince({"Sepal length": [5.1], "Sepal width": [3.5], "Petal length": [1.4], "Petal width": [0.2]})
>>> predict_with_prince({"Sepal length": [6.7], "Sepal width": [3.0], "Petal length": [5.2], "Petal width": [2.3]})
input_df = pd.DataFrame.from_dict(flower_features)
input_pca = pca.transform(input_df)
return label_dict[lr.predict(input_pca)[0]]

mb.deploy(predict_with_prince, python_packages=["prince==0.6.3", "scikit-learn==0.23.2"], python_version="3.7")

The deployment can then be called from REST, Snowflake, and Redshift.