Path: blob/master/cpd4.0/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-watson-machine-learning
This notebook contains steps and code to train a Scikit-Learn model that uses a custom defined transformer and use it with Watson Machine Learning service. Once the model is trained, this notebook contains steps to persist the model and custom defined transformer to Watson Machine Learning Repository, deploy and score it using Watson Machine Learning 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.8 and 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 Watson Machine Learning repository.
Deploy the model using Watson Machine Learning Service
Perform predictions using the deployed model
Contents
Connection to WML
Authenticate the Watson Machine Learning service on IBM Cloud Pack for Data. You need to provide platform url
, your username
and api_key
.
Alternatively you can use username
and password
to authenticate WML services.
Install and import the ibm-watson-machine-learning
package
Note: ibm-watson-machine-learning
documentation can be found here.
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 {PLATFORM_URL}/ml-runtime/spaces?context=icp4data
to create one.
Click New Deployment Space
Create an empty space
Go to space
Settings
tabCopy
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 Watson Machine Learning, 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
Processing ./linalgnorm-0.1.zip
Building wheels for collected packages: linalgnorm
Building wheel for linalgnorm (setup.py) ... done
Created wheel for linalgnorm: filename=linalgnorm-0.1-py3-none-any.whl size=1670 sha256=5416b34c623f8502515a75d8f9de1f6fce41fe55cd31ab9ab87863e6f7f9df23
Stored in directory: /Users/jansoltysik/Library/Caches/pip/wheels/78/00/7b/c263b6176f7c38c807f442edaa5f11a3e7a2cbcc5fa07b2673
Successfully built linalgnorm
Installing collected packages: linalgnorm
Attempting uninstall: linalgnorm
Found existing installation: linalgnorm 0.1
Uninstalling linalgnorm-0.1:
Successfully uninstalled linalgnorm-0.1
Successfully installed linalgnorm-0.1
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-watson_machine_learning
SDK, you will ...
save the library
linalgnorm-0.1.zip
in WML 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 WML 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 WML.
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 WML Repository along with the information about the software spec resource required for the model.
The client.repository.ModelMetaNames.SOFTWARE_SPEC_UID
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 WML Repository and display its saved metadata.
Deploy the model
Note: Here we use deployment uid
saved in published_model object. In next section, we show how to retrive deployment url from Watson Machine Learning instance.
Now you can print an online scoring endpoint.
Prepare the payload for prediction. The payload contains the input records for which predictions has to be performed.
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 Watson Machine Learning 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.
Copyright © 2020-2025 IBM. This notebook and its source code are released under the terms of the MIT License.