This article was published as a part of the Data Science Blogathon
The main goal of machine learning is to train models and predict outcomes that can be used by applications. In Azure Machine Learning, we use scripts to train models using machine learning frameworks like Scikit-Learn, Tensorflow, PyTorch, SparkML, and others. In this guide, we will go in-depth about Azure Machine Learning, its capabilities, the azure ecosystem that supports Machine learning activities, and the multiple ways in which we train and build models.
What is Azure Machine Learning? It’s a cloud-based, fully orchestrated module, that helps us operationalize the various machine learning tasks and the iterative processes efficiently while leveraging the enormous computing power provided by Microsoft Azure
Let’s look at some of the advantages of using Azure ML
Azure has built some useful features in its Machine learning offering that makes things easier for a wider audience. You would find these features indispensable, especially if you are not used to setting up the machine learning workflow and environment manually.
Some of these features are:
Microsoft has designed the studio as a web-based tool for managing the machine learning workspace. Studio services are graphics-based tools that enable us to automate ML as well as abstract the model development to a No-Code level using drag and drop features. In addition to building a custom model in an expert mode, I will cover these two approaches in detail in the upcoming section of this guide. How can you access the Azure Machine learning studio? You need to go to https://ml.azure.com from your browser and sign in using your Azure subscription.
Now that we have covered the key capabilities that come with Azure ML, let’s look at the ecosystem that Azure offers around machine learning
Various services work along with Azure ML to integrate the whole ecosystem around data and analytics. Here are the key ones:
As we know, machine learning is about creating predictive models by utilizing the available data. In today’s world, this data can be voluminous and we need dedicated tools to ingest this data for building our models. Azure ML offers multiple services like Azure SQL Database, Azure Cosmos DB, Azure Data lake to help us achieve this task. In addition, we can benefit from services like Apache Spark engines in Azure HDInsight and Databricks to transfer and transform big data.
Services like Azure App Services, Azure IoT Edge are designed just for this and we can leverage these from inside of Azure ML framework.
To build your machine learning models, package and deploy them, container-based deployment is the right approach. This is part of modern software deployment methodologies where we prefer a microservices approach. The idea is to deploy software in small logical units. This goes well with the DevOps approach and moves away from the traditional monolithic approach to software development. With Azure, we do this using services like Azure Kubernetes Services and Azure Container Services.
Talking about DevOps, let’s look at how Azure Machine learning enables ML Ops
As machine learning becomes mainstream, there is an increased focus on integrating the ML activities like model training, deployment, and maintenance in the larger framework of developing and delivering software. The set of activities that help us achieve this is known as MLOps. This merges with the DevOps activities of the overall software engineering.
What is DevOps? Well, DevOps is a set of practices for driving efficiency in developing software at an enterprise scale. This encompasses all the systems and processes that enhance team collaboration, leverage process automation to bring about efficiencies.
This is a paradigm shift in the way ML would integrate within the larger software development framework. Traditionally, ML experts would build models and it would be left to software developers and system administrators to integrate these models into the overall application. Using DevOps principles in Machine learning is increasingly enhancing the overall effectiveness of building an overall solution. Azure Machine Learning has capabilities to integrate with overall DevOps systems like Azure DevOps and GitHub integration.
Now that we have covered the overall architecture of Azure Machine Learning, let’s deep-dive into building machine learning models inside Azure Machine Learning.
As we know, model building is an iterative process. In this guide, I will cover three approaches we can use to build machine learning applications using data:
Approach #1: Expert mode – As Data Scientists, when we want to use our knowledge of programming in languages like Python and associated libraries like PyTorch, Scikit-Learn to train machine learning models, Azure offers this flexibility to build models in our unique, customized way. Here, we decide the model we will use, the computing power, the dependencies we want to configure.
Approach #2: Azure ML studio-based Automated Machine learning – This is useful for users where the aim is not to get into the nitty-gritty of building a model but to utilize the power of having a model in place. We use Azure’s machine learning studio to evaluate multiple models, configured by Azure, and return the best performing one. The heavy lifting around statistics and mathematics is taken care of by Azure Machine Learning studio.
Approach #3: Designer mode – This is a graphical utility and works along the lines of the No-code paradigm that is increasingly becoming popular. Users who wish to utilize machine learning as part of a larger application. We want to oversee the automated DevOps process, re-train the model and check the performance of the overall application.
The dataset for this guide
To demonstrate the model building in Approach #1 and #2, I will use the diabetes dataset. Here’s the GitHub link to the dataset. The goal of this dataset is to determine if a person would be diabetic or not.
Let’s begin with the first approach, where we determine the model to be used. Since the outcome is a prediction around the likelihood of getting diabetes, a categorical measure, I am using a Logistic regression model for this prediction
Here’s how you train your machine learning model using Python within the Azure ML framework. I have explained this approach in 8 steps:
Workspace is a centralized place to manage resources required for training a model. We can use workspaces to group resources based on projects, deployment environments like testing and production, based on organization unit, etc. Workspaces are defined within a resource group in Azure.
The assets in a workspace include computing targets, data for model training, Notebooks, Experiments, Models, Pipelines, etc.
When we create an Azure workspace it also creates the following
To access these resources in Azure Workspace, users need to authenticate using the Azure Active directory
Below are the steps to create an Azure Workspace:
Create a Machine Learning Resource from Azure Portal
2. Once the resource instance is created, provide the requested information like Workspace Name, Region, Storage account, Application Insights and create the workspace.
Compute instances are online computed resources that already have a development environment installed to write and run code in Python. We can have multiple compute instances in a workspace.
Based on our requirement we can select a compute instance with desired CPU, GPU, RAM and Storage.
Below are the steps to create a compute instance
From the left navigation, select on new compute instance
2. Provide Compute Instance Name, Select the required VM and create the compute instance
We can also create compute clusters where we can autoscale the CPU/GPU compute nodes in the cloud
1. Click on DataSet and create a new DataSet. I have uploaded the data using from local files option
2. Provide DataSet name and upload the file.
1. Go to Machine Learning Studio and click on Create New Notebook
2. Create a new Notebook
3. Import the azureml-core package, a Python package that enables us to connect and write code that uses resources in the workspace and
import azureml.core
from azureml.core import Workspace
ws = Workspace.from_config()
In this step, we will be creating a script to train the model and save the script as a .py file in our folder using the below command:
%%writefile $training_folder/diabetes_training.py
1. Let’s create a folder to save all the python scripts. We will be saving the Training scripts in a folder named diabetes-training
training_folder = 'diabetes-training'
os.makedirs(training_folder, exist_ok=True)
2. Get the path of the CSV file which we uploaded as a Dataset. Data files can be accessed using Datastores. Datastores are used to store connection information to Azure storage services.
In my case, the datastore name is ‘workspaceblobstorage’. We can go to Home> Datasets > Registered DataSets to view all the data sources registered.
datastore_name = 'workspaceblobstorage'
datastore_paths = [(datastore_name, 'diabetes.csv')]
3. Get the Run context. A run represents a single trial for an experiment. We can have multiple Runs in a single experiment.
Using Run we can monitor the trial, log metrics and store the output of the trial, and then analyze results generated.
run = Run.get_context()
4. Read the dataset using the Pandas library
diabetes = pd.read_csv(Dataset.Tabular.from_delimited_files(path=datastore_paths))
5. Create the datasets X and Y. X has the feature variables and Y has the output variable
X, y = diabetes[['Pregnancies','PlasmaGlucose','DiastolicBloodPressure','TricepsThickness','SerumInsulin','BMI','DiabetesPedigree','Age']].values, diabetes['Diabetic'].values
6. Split the dataset into train and test and use a logistic regression model as we are trying to solve a classification problem – if a person has diabetes or not.
Here we have split the train and test data in a 70:30 ratio.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30, random_state=0)
# Set regularization hyperparameter
reg = 0.01
# Train a logistic regression model
run.log('Regularization Rate', np.float(reg))
model = LogisticRegression(C=1/reg, solver="liblinear").fit(X_train, y_train)
7. Next we calculate the accuracy and AUC of the model to evaluate our model
# calculate accuracy
y_pred = model.predict(X_test)
acc = np.average(y_pred == y_test)
print('Accuracy:', acc)
run.log('Accuracy', np.float(acc))
# calculate AUC
y_score = model.predict_proba(X_test)
auc = roc_auc_score(y_test,y_score[:,1])
print('AUC: ' + str(auc))
run.log('AUC', np.float(auc))
8. Save the trained model to the desired folder. In this example, we are saving the model to the output folder
# Save the trained model in the outputs folder
os.makedirs('outputs', exist_ok=True)
joblib.dump(value=model, filename='outputs/diabetes_model.pkl')
run.complete()
In this step, we have just written a script to train the model and stored it in a folder. We have not executed the script yet.
An experiment is a collection of trials that represent multiple model runs. We can run experiments with different data, code, and settings too.
The experiment is represented by Experiment Class and each trial in an experiment is represented by Run Class
1. We create a Python environment to run the experiment.
env = Environment.from_conda_specification("experiment_env", "environment.yml")
Where environment.yml contains the environment specifications
2. Next, we create a ScriptRunConfig which packages together information to submit a run like Script, compute targets, environments etc.
script_config = ScriptRunConfig(source_directory=training_folder,
script='diabetes_training.py',
environment=env)
3. Next, we submit the Experiment run and pass the ScriptConfig details
experiment_name = 'train-diabetes'
experiment = Experiment(workspace=ws, name=experiment_name)
run = experiment.submit(config=script_config)
4. Then we run the Experiment run and wait for it to complete.
RunDetails(run).show()
run.wait_for_completion()
We can use the get_metric method of the run class to print the metrics like Regularization rate, AUC, Accuracy, etc
metrics = run.get_metrics()
for key in metrics.keys():
print(key, metrics.get(key))
In Step 5 we saved the model as a pkl file. Now we will register the model in the workspace so that we can track the model versions.
# Register the model
run.register_model(model_path='outputs/diabetes_model.pkl', model_name='diabetes_model',
tags={'Training context':'Script'},
properties={'AUC': run.get_metrics()['AUC'], 'Accuracy': run.get_metrics()['Accuracy']})
Once we have trained the model and registered it, we can see the output of each run from the Experiment in the left navigation
We can see the various runs when we click on the experiment name and their respective status
For each run, we can see associated metrics, outputs, logs etc. In this particular algorithm, the model has an accuracy of 0.774 and the area under the curve is 0.848
Given the iterative nature of building machine learning models, parallel processing of multiple models can save time and also help identify the best model for a particular use case. With the compute power that comes with Azure, optimizing algorithms for the best outcomes is remarkably easy in the Azure Machine Learning Studio environment. Studio automation takes away the need for all the manual trial and error iterations that come with building a model.
It is important to know that the Azure Machine learning studio supports only supervised machine learning models where we have training data and known labels. These models are:
How does the Azure ML studio identify the best-performing model? We can specify the metrics for the same. Here’s how we can configure the experiments in Azure ML studio:
Figure: Primary metrics for Classification model
Figure: Primary metrics for a Regression model
Figure: Primary metrics for Time series forecasting model
Everything you do in expert mode, you can also configure in this automated mode. This includes capabilities like imputing missing values, encoding categorical features, balancing data by normalizing and scaling the features, dropping high-cardinality features that do not help in prediction. You can also derive time-series features by extracting day, month, and year from the date field.
Step 1: Specify the dataset with labels to train the data. I have used the same diabetes dataset and created a new automated ML run.
Step 2: Configure the automated machine learning run – name, target label and the compute target on which to run the experiment.
Step 3: Select the algorithm and settings to apply – classification, regression, or time-series, configuration settings, and feature settings
Step 4: Review the best model generated
When we click on the experiment, we can see that there were multiple runs for different types of algorithms to identify which model would work well.
We can see that RandomForest had an accuracy level of 0.88, XGBoostClassifier had an accuracy level of 0.87.
As we discussed, Azure Machine Learning Designer provides a graphical environment for creating machine learning models. Further, we can publish the models as services that are then used by the overall software development process.
Here is how you can build a model in Machine Learning Designer
Create a Training Pipeline
We define a dataflow for training a machine learning model, using drag and drop features. This designed workflow looks like a pipeline and is called a pipeline as evident in the picture below.
What does the training pipeline consist of? We design all the steps required before we build a model like data ingestion and feature engineering. In the designer interface, we can execute each of these steps independently. The pipeline manages the flow of execution.
As you might have noticed, we have not used any lines of code to accomplish these tasks. This is the key feature of the designer mode. As you would notice from the left column of the picture below, the designer includes a wide range of pre-defined modules for data ingestion, feature selection and engineering, model training, and validation. While Azure has designed this as a no-code environment, it has left room for adding custom scripts, if you so desire. We can add custom Python, R, and SQL logic to a data flow.
Training Pipeline
Step 1: Process the data, normalize the features using drag and drop.
Step 2: Split the data.
I have split the data as 70% as train and 30% as test data.
Step 3: Train the model
Once you enter training the model in the pipeline, the model training begins.
Automated Explanation generation
A powerful feature of the ML designer is the explanation generator. You can turn this option by going into the Parameters setting, as shown in the screenshot below. So save compute resources, this is turned off by default and you would need to manually turn this on.
Once the Azure ML designer trains the model, using this feature, we generate the explanation to understand the context and better interpret the results. The below screenshot displays the explanation around the model’s performance and aggregate feature importance.
Figure: Explainer for Model performance
Figure: Explainer for Aggregate Feature Importance
In our case, the score will give us the prediction about the likelihood of a person getting diabetes.
The final step is to evaluate the model. We can evaluate the model using the following metrics
Inference pipeline: Using the model to predict
Once we train and evaluate the model using a training pipeline, we can use it to create an inference pipeline for batch prediction or a real-time inference pipeline. An inference pipeline encapsulates the trained model as a web service that predicts labels for new data.
You will get two options:
Once we create the inference pipeline, it looks like the picture below
This guide explains how Azure offers services for machine learning that suit different users and come with a strong support system. Whether you’re putting data in, using models as a service, or managing containers, Azure has everything in one place. For organizations already using Azure, Azure Machine Learning is a must-have tool for their journey into machine learning.
Azure offers multiple ways to build and train models, while seamlessly taking care of the underlying infrastructure and heavy computing requirements. Whether you are a user who wants to unleash the power of machine learning without using code or a programmer using machine learning as part of a larger software, or a data scientist, you would feel delighted by the ease with which Azure ML orchestrates everything for you while being sensitive to your expertise.
Images source: All images in this guide have been created by the author. Some images have been captured by the author while building the machine learning model.
Note: I have been certified as a Microsoft Certified Azure Data Scientist. Please connect with me on LinkedIn