Path: blob/master/cloud/notebooks/python_sdk/deployments/custom_library/Use scikit-learn and custom library to predict temperature.ipynb
6405 views
Use scikit-learn and custom library to predict temperature with ibm-watsonx-ai
This notebook contains steps and code to train a Scikit-Learn model that uses a custom defined transformer and use it with watsonx.ai Runtime service. Once the model is trained, this notebook contains steps to persist the model and custom defined transformer to watsonx.ai Runtime Repository, deploy and score it using watsonx.ai python client.
In this notebook, we use GNFUV dataset that contains mobile sensor readings data about humidity and temperature from Unmanned Surface Vehicles in a test-bed in Athens, to train a Scikit-Learn model for predicting the temperature.
Some familiarity with Python is helpful. This notebook uses Python-3.11 & scikit-learn.
Learning goals
The learning goals of this notebook are:
Train a model with custom defined transformer
Persist the custom defined transformer and the model in watsonx.ai Runtime repository.
Deploy the model using watsonx.ai Runtime Service
Perform predictions using the deployed model
Contents
1. Set up the environment
Before you use the sample code in this notebook, you must perform the following setup tasks:
Create a watsonx.ai Runtime Service instance (a free plan is offered and information about how to create the instance can be found here).
Install and import the ibm-watsonx-ai
and dependecies
Note: ibm-watsonx-ai
documentation can be found here.
Connection to watsonx.ai Runtime
Authenticate the watsonx.ai Runtime service on IBM Cloud. You need to provide platform api_key
and instance location
.
You can use IBM Cloud CLI to retrieve platform API Key and instance location.
API Key can be generated in the following way:
In result, get the value of api_key
from the output.
Location of your watsonx.ai Runtime instance can be retrieved in the following way:
In result, get the value of location
from the output.
Tip: Your Cloud API key
can be generated by going to the Users section of the Cloud console. From that page, click your name, scroll down to the API Keys section, and click Create an IBM Cloud API key. Give your key a name and click Create, then copy the created key and paste it below. You can also get a service specific url by going to the Endpoint URLs section of the watsonx.ai Runtime docs. You can check your instance location in your watsonx.ai Runtime Service instance details.
You can also get service specific apikey by going to the Service IDs section of the Cloud Console. From that page, click Create, then copy the created key and paste it below.
Action: Enter your api_key
and location
in the following cell.
Working with spaces
First of all, you need to create a space that will be used for your work. If you do not have space already created, you can use Deployment Spaces Dashboard to create one.
Click New Deployment Space
Create an empty space
Select Cloud Object Storage
Select watsonx.ai Runtime instance and press Create
Copy
space_id
and paste it below
Tip: You can also use SDK to prepare the space for your work. More information can be found here.
Action: Assign space ID below
You can use list
method to print all existing spaces.
To be able to interact with all resources available in watsonx.ai Runtime, you need to set space which you will be using.
Library - linalgnorm-0.1
is a python distributable package that contains the implementation of a user defined Scikit-Learn transformer - LNormalizer
.
Any 3rd party libraries that are required for the custom transformer must be defined as the dependency for the corresponding library that contains implementation of the transformer.
In this section, we will create the library and install it in the current notebook environment.
Define a custom scikit transformer.
Wrap created code into Python source distribution package.
Install the downloaded library using pip
command
Download the data from UCI repository - https://archive.ics.uci.edu/ml/machine-learning-databases/00452/GNFUV USV Dataset.zip
Create pandas datafame based on the downloaded dataset
Create training and test datasets from the downloaded GNFUV-USV dataset.
Import the custom transformer
Here, import the custom transformer that has been defined in linalgnorm-0.1.zip
and create an instance of it that will inturn be used as stage in sklearn.Pipeline
Import other objects required to train a model
Now, you can create a Pipeline
with user defined transformer as one of the stages and train the model
5. Persist the model and custom library
In this section, using ibm-watsonx-ai
SDK, you will ...
save the library
linalgnorm-0.1.zip
in watsonx.ai Runtime repository by creating a package extension resourcecreate a Software Specification resource and bind the package resource to it. This Software Specification resource will be used to configure the online deployment runtime environment for a model
bind Software Specification resource to the model and save the model to watsonx.ai Runtime repository
Create package extension
Define the meta data required to create package extension resource.
The value for file_path
in client.package_extensions.LibraryMetaNames.store()
contains the library file name that must be uploaded to the watsonx.ai Runtime.
Note: You can also use conda environment configuration file yaml
as package extension input. In such case set the TYPE
to conda_yml
and file_path
to yaml file.
Display the details of the package extension resource that was created in the above cell.
Create software specification and add custom library
Define the meta data required to create software spec resource and bind the package. This software spec resource will be used to configure the online deployment runtime environment for a model.
List base software specifications
Select base software specification to extend
Define new software specification based on base one and custom library
Save the model
Define the metadata to save the trained model to watsonx.ai Runtime repository along with the information about the software spec resource required for the model.
The client.repository.ModelMetaNames.SOFTWARE_SPEC_ID
metadata property is used to specify the GUID of the software spec resource that needs to be associated with the model.
Save the model to the watsonx.ai Runtime repository and display its saved metadata.
6 Deploy and Score
In this section, you will deploy the saved model that uses the custom transformer and perform predictions. You will use watsonx.ai client to perform these tasks.
Deploy the model
Predict using the deployed model
Note: Here we use deployment id
saved in published_model object. In next section, we show how to retrive deployment url from watsonx.ai Runtime instance.
Now you can print an online scoring endpoint.
Execute the method to perform online predictions and display the prediction results
If you want to clean up all created assets:
experiments
trainings
pipelines
model definitions
models
functions
deployments
please follow up this sample notebook.
8. Summary
You successfully completed this notebook!
You learned how to use a scikit-learn model with custom transformer in watsonx.ai Runtime service to deploy and score.
Check out our Online Documentation for more samples, tutorials, documentation, how-tos, and blog posts.
Author
Krishnamurthy Arthanarisamy, is a senior technical lead in IBM Watson Machine Learning team. Krishna works on developing cloud services that caters to different stages of machine learning and deep learning modeling life cycle.
Lukasz Cmielowski, PhD, is a Software Architect and Data Scientist at IBM.
Mateusz Szewczyk, Software Engineer at watsonx.ai
Copyright © 2020-2025 IBM. This notebook and its source code are released under the terms of the MIT License.