What are Sklearn Metrics, and Why do You Need to Know About Them?
Updated on Apr 17, 2025 | 6 min read | 8.1k views
Share:
For working professionals
For fresh graduates
More
Updated on Apr 17, 2025 | 6 min read | 8.1k views
Share:
Table of Contents
Building a machine learning model is just the beginning. The real challenge is measuring how well it performs. Relying on accuracy alone can be misleading, especially with imbalanced datasets or complex classification problems. This is where Sklearn metrics come in, offering a powerful set of built-in functionalities for classification, regression, and clustering models. These metrics go beyond simple accuracy, helping you understand model behavior, identify weaknesses, and make better decisions.
Scikit-learn’s built-in metrics help assess predictions, compare models, and fine-tune algorithms for better results. Whether it’s precision and recall for classification, mean squared error for regression, or silhouette score for clustering, these metrics offer deeper insights into model behavior.
But how do you choose the right metric for your task? In this blog, we will explore key Sklearn metrics, their applications, and how they influence model evaluation and optimization.
Scikit-Learn is a comprehensive open-source machine learning library for Python. Python has numerous modules and packages in it, and one of them is Sklearn metrics, which is written as sklearn.metrics while coding. They quantify how well a model’s predictions align with actual outcomes, offering a structured approach to measuring success across different types of tasks. From assessing classification accuracy to analyzing regression errors and clustering quality, these metrics provide critical insights into model behavior.
The following are some reasons for using Scikit-learn metrics:
The Scikit-learn metrics module measures a model's performance, helping to determine whether it is effective or needs improvement.
These metrics are commonly used for various ML tasks, including:
Typically, the metrics provide numerical values that help decide whether to keep the model, explore alternative techniques, or adjust hyperparameters.
One of its main features is the ability to assign different weights to different samples. In machine learning, samples are individual data points used to train the model. The weights determine how important a particular sample (data point) is when training the model.
Through the sample weight option, each sample can use Scikit-learn metrics to weigh its contribution to the overall score. This option aims to minimize the loss function. A loss function is a mathematical function that calculates how far the model's predictions are from the actual values. It helps the model adjust and improve during training. Careful consideration is needed when choosing the right loss function for regression or classification.
The decision between Scikit-learn, TensorFlow, and PyTorch relies on the particular requirements of a project. Each of these libraries has a specialized function in the field of AI and ML. If you value ease of use and are dealing with small to medium-sized datasets using classic machine learning algorithms, go with Scikit-learn. Similarly, TensorFlow and PyTorch also have their modules for measuring model performance, but they are designed more for deep learning and work differently from Scikit-learn’s.
Scikit-Learn has a list of several performance evaluation sklearn metrics suitable for different types of machine learning tasks, which include classification, regression, and clustering. Choosing the right metric helps evaluate model performance effectively. Here are the major types of metrics in Scikit-Learn:
Classification metrics assess how well a model predicts categorical labels. They help evaluate performance in terms of correctness, class balance, and error trade-offs. These include:
Metrics Name | What It Measures | Supported Parameters |
accuracy | This represents the fraction of correct predictions out of the total predictions. | y_true, y_pred, normalize=True, sample_weight=None |
balanced_accuracy | Accuracy adjusted for class imbalance (helps when some classes appear more often than others). | y_true, y_pred, sample_weight=None |
top_k_accuracy | Checks if the correct label is among the top-k predictions. | y_true, y_score, k=1, normalize=True, sample_weight=None |
average_precision | Average precision at different thresholds to measure how well the model ranks positive examples. | y_true, y_score, pos_label=None, average='macro', sample_weight=None |
neg_brier_score | Measures how well predicted probabilities match actual outcomes (lower is better). | y_true, y_prob, pos_label=None, sample_weight=None |
f1 | A balance between precision and recall (useful for imbalanced datasets). | y_true, y_pred, pos_label=1, average='binary', sample_weight=None |
f1_micro | F1 score calculated across all samples together (good for multi-class problems). | y_true, y_pred, average='micro', sample_weight=None |
f1_macro | F1 score averaged across all classes equally (treats small and large classes the same). | y_true, y_pred, average='macro', sample_weight=None |
f1_weighted | F1 score where larger classes get more weight (better when class sizes are different). | y_true, y_pred, average='weighted', sample_weight=None |
f1_samples | Calculates the F1 score for each instance separately (used for multi-label classification). | y_true, y_pred, average='samples', sample_weight=None |
neg_log_loss | Measures how well the predicted probabilities match actual labels (lower is better). | y_true, y_pred_proba, eps=1e-15, normalize=True, sample_weight=None, labels=None |
precision | Indicates the proportion of correctly predicted positive instances among all predicted positives.
|
y_true, y_pred, pos_label=1, average='binary', sample_weight=None |
recall | Measures how many actual positive instances were correctly identified. | y_true, y_pred, pos_label=1, average='binary', sample_weight=None |
jaccard | Measures how similar the predicted and actual labels are (used for classification tasks). | y_true, y_pred, pos_label=1, average='binary', sample_weight=None |
roc_auc | Measures how well the model distinguishes between classes (higher is better). | y_true, y_score, average='macro', multi_class='raise', sample_weight=None, max_fpr=None |
roc_auc_ovr | ROC-AUC using the "one vs rest" strategy for multi-class classification. | y_true, y_score, multi_class='ovr', average='macro', sample_weight=None |
roc_auc_ovo | ROC-AUC using the "one vs one" strategy for multi-class classification. | y_true, y_score, multi_class='ovo', average='macro', sample_weight=None |
roc_auc_ovr_weighted | One-vs-rest ROC-AUC but gives more importance to larger classes. | y_true, y_score, multi_class='ovr', average='weighted', sample_weight=None |
roc_auc_ovo_weighted | One-vs-one ROC-AUC but gives more importance to larger classes. | y_true, y_score, multi_class='ovo', average='weighted', sample_weight=None |
d2_log_loss_score | Measures how well the model's predicted probabilities match actual labels (like log_loss, but in a different form). | y_true, y_pred_proba, eps=1e-15, normalize=True, sample_weight=None |
Regression metrics measure the accuracy of models that predict continuous values. They quantify errors, variance explained, and overall model fit.
Metrics Name | What It Measures | Supported Parameters |
explained_variance | How much of the variance in the data is explained by the model. Higher is better. | y_true, y_pred, sample_weight=None |
neg_max_error | The largest single prediction error (negative because lower error is better). | y_true, y_pred |
neg_mean_absolute_error | The average absolute difference between predictions and actual values. | y_true, y_pred, sample_weight=None, multioutput='uniform_average' |
neg_mean_squared_error | The average squared difference between predictions and actual values. Larger errors get more weight. | y_true, y_pred, sample_weight=None, multioutput='uniform_average', squared=True |
neg_root_mean_squared_error | The square root of the mean squared error, making it easier to interpret. | y_true, y_pred, sample_weight=None, multioutput='uniform_average', squared=False |
neg_mean_squared_log_error | Similar to MSE but works better when errors are in different scales (e.g., predicting prices). | y_true, y_pred, sample_weight=None, multioutput='uniform_average' |
neg_root_mean_squared_log_error | The square root of mean squared log error (a more interpretable version). | y_true, y_pred, sample_weight=None, multioutput='uniform_average' |
neg_median_absolute_error | The median of absolute errors, less sensitive to extreme values. | y_true, y_pred, sample_weight=None |
r2 | Measures how well the model predicts the target variable (ranges from -infinity to 1, where 1 is best). | y_true, y_pred, sample_weight=None, multioutput='uniform_average', force_finite=True |
neg_mean_poisson_deviance | Measures how well a model predicts count-based data (like number of events in a time period). | y_true, y_pred, sample_weight=None |
neg_mean_gamma_deviance | Evaluates models for skewed data (common in medical or financial predictions). | y_true, y_pred, sample_weight=None |
neg_mean_absolute_percentage_error | Measures prediction errors as percentages (useful when actual values vary widely in scale). | y_true, y_pred, sample_weight=None, multioutput='uniform_average' |
d2_absolute_error_score | A variation of R² that evaluates errors in absolute terms rather than squared differences. | y_true, y_pred, sample_weight=None, multioutput='uniform_average' |
Clustering metrics evaluate how well a model groups similar data points without predefined labels. These metrics compare predicted clusters to true groupings or assess internal consistency.
Metrics Name | What It Measures | Supported Parameters |
adjusted_mutual_info_score | Measures the mutual information between true and predicted clusters, adjusted for chance. Higher is better. | labels_true, labels_pred, average_method='arithmetic' |
adjusted_rand_score | Measures how well predicted clusters match the true clusters, adjusted for randomness. | labels_true, labels_pred |
completeness_score | Checks if all data points in the same true cluster are assigned to the same predicted cluster. | labels_true, labels_pred |
fowlkes_mallows_score | Measures the similarity between true and predicted clusters based on precision and recall. | labels_true, labels_pred, sparse=False |
homogeneity_score | Ensures that each predicted cluster contains only members of a single true cluster. | labels_true, labels_pred |
mutual_info_score | Measures the dependency between true and predicted clusters (without adjusting for chance). | labels_true, labels_pred, contingency=None |
normalized_mutual_info_score | A normalized version of mutual info score, ensuring values are between 0 and 1. | labels_true, labels_pred, average_method='arithmetic' |
rand_score | Measures the similarity between two clusterings, considering both correct and incorrect pair assignments. | labels_true, labels_pred |
v_measure_score | The harmonic mean of homogeneity and completeness, balancing both properties. | labels_true, labels_pred, beta=1.0 |
Ready to implement Scikit-learn metrics in your ML models? Start now with upGrad’s Executive Diploma in Machine Learning and AI with IIIT-B.
Classification algorithms in machine learning are a type of ML model used to classify data into pre-specified labels or classes. For example, spam vs. not spam, disease vs. no disease (medical diagnosis), and positive, neutral, or negative (sentiment analysis).
Simply training a classification model is not enough. Classification metrics allow us to evaluate model predictions and ensure that them to be reliable and accurate.
The sklearn.metrics module has various functions for calculating different classification evaluation measures. Some of the measures are suitable for binary classification (two classes), while others may be used for multiclass or multilabel classification. The measures may be based on binary classification decisions (correct or incorrect) or probability estimates (prediction confidence) based on the usage.
The most widely used metrics in sklearn.metrics for classification include the following:
Accuracy measures the number of correct predictions. For example, in a cat-and-dog detector, if the accuracy score is 90%, it means that the model correctly predicted 90 out of 100 cases.
To compute an accuracy score, you need:
In simple terms, accuracy is obtained by dividing the number of correct predictions by the total number of predictions:
Accuracy = Number of correct predictions/Total number of all your predictions
The mathematical formula for accuracy is:
Accuracy = (True Negatives + True Positive) / (True Positive + False Positive + True Negative + False Negative)
The Scikit-Learn confusion matrix evaluates a classification model by comparing actual and predicted values. It contains true positives (TP) and true negatives (TN), i.e., when the model identifies positive and negative classes, respectively. False positives (FP) are when the model misidentifies a positive class, whereas false negatives (FN) are when it fails to identify a positive case. These concepts help quantify accuracy, precision, recall, and other important performance indicators.
Accuracy becomes unreliable when one class is significantly overrepresented in the dataset. This situation, known as class imbalance, often arises in cases like spam detection, where "ham" emails vastly outnumber spam emails. Training a model on an imbalanced dataset can lead to misleading accuracy scores, as the model may favor the majority class.
Other performance measures besides accuracy include precision, recall, and the F1 score. These metrics are especially useful when working with highly imbalanced datasets.
1. Precision
Precision is the ratio of correctly predicted positive instances to the total predicted positives. It answers the question, "Of all our positive predictions, how many were actually correct?"
The mathematical formula for precision is:
Precision = True Positive / (True Positive + False Positive)
For example, if a spam filter classifies 8 emails as spam out of 12, and only 5 of them are actually spam, the model’s precision would be 5/8.
2. Recall
The ratio of correctly predicted positive instances to the total actual positives. Consider a cat-and-dog detector example, if the model achieves a recall rate of 70%, it means the model correctly identifies 70 out of every 100 animals.
A recall is also known as the true positive rate and is calculated as follows:
Recall = (True Positive)/ (True Positive + False Negative)
3. F1 Score
The F1 score is the harmonic mean of precision and recall. Since it balances the two, it is often used as a single measure of a model’s performance.
The formula for the F1 score is:
F1 Score = 2 * Recall * Precision / ( Recall + Precision)
A key characteristic of the F1 score is that if either precision or recall is zero, the score is also zero, heavily penalizing poor performance in one aspect.
A confusion matrix, also known as an error matrix, is a specific table format used in machine learning to visualize an algorithm's performance. In simple terms, the confusion matrix in machine learning is essential for achieving more reliable results with a classification model. It categorizes predictions into four groups:
Now, let's learn how to implement and generate a confusion matrix using Scikit-Learn.
Step 1: Import all necessary Python libraries
import numpy as np
from sklearn.metrics import confusion_matrix,classification_report
#import for visualization
import seaborn as sns
import matplotlib.pyplot as plt
Step 2: Generate the array of NumPy with the labels that are actually and expected values.
actual = np.array (
['Dog','Dog','Dog','Cat','Dog','Cat','Dog','Dog','Cat','Cat'])
predicted = np.array (
['Dog','Cat','Dog','Cat','Dog','Dog','Dog','Dog','Cat, 'Cat'])
Step 3: In the third step, determine the value of the confusion matrix.
cm=confusion_matrix(actual,predicted)
Step 4: Finally, one can plot the confusion matrix using the Seaborn heatmap. It helps in visualization.
Two methods used for probabilistic predictions in binary (two-class) classification are:
These techniques are also used in predictive modeling. The "area under the curve for Receiver Operating Characteristic" (AUC-ROC curve) is a commonly used metric for assessing classifier performance. It helps distinguish between two classes:
The Receiver Operating Characteristic (ROC) curve is a graphical representation of the effectiveness of a binary classification model. It plots the true positive rate (TPR) against the false positive rate (FPR) at various classification thresholds. A higher ROC-AUC score indicates a stronger ability to differentiate between positive and negative classes.
The Area Under the Curve (AUC) represents the area under the ROC curve. It quantifies the overall performance of the model in binary classification. Since TPR and FPR range between 0 and 1, the AUC typically ranges between 0 and 1, where 0.5 indicates random performance. Values below 0.5 suggest inverse classification. A higher AUC value indicates better model performance. The goal is to maximize this area to achieve the highest possible TPR with the lowest FPR at a given threshold.
A Precision-Recall (PR) curve is a graph in which the y-axis represents precision, and the x-axis represents recall.
Note:
Investigate and test various Sklearn metrics to learn more about the model's performance. With upGrad’s Executive Diploma in Machine Learning and AI, you can also try using various evaluation methods to get better results.
Regression metrics help evaluate the quality of regression models and guide decision-making regarding overall performance assessment.
Mean Absolute Error (MAE) is a widely used metric in machine learning and statistics. It measures the average absolute difference between predicted and actual values in a dataset.
Formula in Mathematics
The MAE for a dataset with n data points is calculated as:
Where:
Here is a simple example of Mean Absolute Error (MAE) calculation using sklearn metrics:
from sklearn.metrics import mean_absolute_error
y_true = [3.4, 2.1, 5.4, 6.8, 5.6]
y_pred = [3.0, 2.4, 4.7, 8.0, 5.2]
mae = mean_absolute_error(y_true, y_pred)
print("MAE = ", mae)
The output is: MAE = 0.5999999999999999
Mean Squared Error (MSE) is another widely used metric in statistics for machine learning. It calculates the average squared difference between predicted and actual values in a dataset. MSE is often used to evaluate the performance of regression models.
Formula in Mathematics
The MSE for a dataset with n data points is calculated as:
Where:
Root Mean Squared Error (RMSE) is the square root of MSE. It is commonly used in machine learning and regression analysis to assess a predictive model’s accuracy or goodness of fit, particularly when dealing with continuous numerical values.
The RMSE measures how closely a model's predicted values match the actual observed values in a dataset. Here’s how it works:
Formula in Mathematics
For a dataset with n data points, the RMSE formula is:
Where:
The table below highlights the key differences between Mean Squared Error (MSE) and Root Mean Squared Error (RMSE):
Parameters | Mean Squared Error (MSE) | Root Mean Squared Error (RMSE) |
Interpretation | Measures the average squared difference between actual and predicted values. | Measures the square root of the average squared difference, providing error in the same unit as the target variable. |
Range | [0,∞), since it squares the error values. | [0,∞), but it is in the same unit as the data, making it more interpretable. |
Sensitivity to Outliers | High sensitivity to outliers because larger errors are squared. | Also sensitive to outliers, but less so than MSE because of the square root. |
Use Case | Commonly used when large errors are particularly undesirable, and penalizing them more is beneficial. | Preferred when the error needs to be interpreted in the same unit as the target variable. |
Magnitude | Tends to be larger than RMSE due to the squaring of errors. | Tends to be smaller and more interpretable than MSE. |
The R-squared (R2) score, also known as the coefficient of determination, is a statistical measure used to evaluate a regression model’s goodness of fit. It quantifies the proportion of variance in the dependent variable that the independent variables in the model can explain. R² provides insight into a regression model’s explanatory power and overall effectiveness.
Formula in Mathematics
The following formula can be used to determine the R-squared score:
Where:
The following are some limitations of the coefficient of determination:
In applied machine learning, advanced metrics go beyond simple accuracy to provide deeper insights into model performance for classification and regression tasks. Let’s explore some of the advanced metrics supported by Scikit-Learn.
Log Loss (Logarithmic Loss) is a logarithmic adjustment of the likelihood function, primarily used to evaluate the performance of probabilistic classifiers. Unlike accuracy, Log Loss penalizes incorrect predictions more severely when the model is confident but wrong, making it a useful metric for assessing prediction uncertainty.
The formula for Log loss is as follows:
where
Note: Smaller loss is better
Here is a simple example of Log Loss Calculation using sklearn metrics:
from sklearn.metrics import log_loss
y_true = [1, 0, 1, 1, 0] # Actual class labels
y_pred_probs = [[0.1, 0.9], [0.8, 0.2], [0.3, 0.7], [0.6, 0.4], [0.9, 0.1]] # Predicted probabilities for class 0 and 1
loss = log_loss(y_true, y_pred_probs)
print("Log Loss =", loss)
The output is: Log Loss = 0.34136605168855
Hamming Loss measures the percentage of incorrectly predicted labels in classification tasks. In multiclass classification, when the normalize option is set to True, the Hamming loss is equivalent to the Hamming distance between y_true and y_pred, similar to the subset_zero_one_loss function.
However, in multilabel classification, Hamming Loss and subset zero-one loss differ:
When normalize=True, subset zero-one loss acts as an upper bound for Hamming Loss, meaning Hamming Loss measures the fraction of labels misclassified in multilabel settings. Lower values indicate better performance.
Where
n: Number of training examples
yj(i): true labels for the ith training example and the jth class
(y)j(i): predicted labels for the ith training example and the jth class
Here is a simple example of Hamming Loss Calculation using sklearn metrics:
from sklearn.metrics import hamming_loss
y_true = [[1, 0, 1], [0, 1, 1], [1, 1, 0]] # True labels for three samples
y_pred = [[1, 0, 0], [0, 1, 1], [1, 0, 0]] # Predicted labels
loss = hamming_loss(y_true, y_pred)
print("Hamming Loss =", loss)
The output is: Hamming Loss = 0.2222222222222222
The Explained Variance Score measures how well a model’s predictions account for variability in the target variable. In simpler terms, it quantifies the percentage of variance in actual data that the regression model successfully explains.
Essential Elements of the Explained Variance Score:
Range: The score falls between 0 and 1, where:
Mathematical Formula:
Where:
Higher scores indicate that the model explains more variance, but a perfect score of 1.0 is rare in real-world scenarios.
Sklearn also provides various built-in evaluation metrics such as accuracy, precision, and mean squared error. However, standard metrics may not always fully capture the requirements of a particular problem. Custom metrics allow models to be assessed based on unique criteria, such as placing greater emphasis on certain errors or aligning evaluations with business-specific goals.
Custom metrics help evaluate models in a way that fits specific data and problem needs. Standard metrics may not always give useful insights, especially when dealing with imbalanced data or real-world constraints. Creating custom metrics allows you to measure performance based on what matters most for your project.
Custom metrics can be implemented using Python functions available in Scikit-learn. You can modify machine learning models to fit particular datasets and issue specific needs by creating custom metrics in scikit-learn.
Use Cases for Custom Metrics:
Retail Forecasting: Measuring percentage error instead of absolute values to capture forecasting accuracy better.
Auto-Sklearn is an open-source toolkit for AutoML that is built on Python. For data processing and machine learning algorithms, it makes use of the popular Scikit-Learn package. Both Scikit-Learn and Auto-Sklearn offer evaluation metrics, but they differ in implementation and intended use cases.
The following table shows the differences in metric implementation of Sklearn and auto-sklearn:
Feature | Sklearn Metrics | Auto-Sklearn Metrics |
Usage | Manually called using functions like accuracy_score() | Used automatically for model selection and tuning |
Metric Availability | Wide range of metrics for classification, regression, and clustering | Limited to a subset of Sklearn metrics |
Custom Metrics | Supported via make_scorer() | Requires autosklearn.metrics.make_scorer() |
Optimization Focus | Model evaluation and comparison | Automated hyperparameter tuning and selection |
Example Metrics | Accuracy, Precision, Recall, F1-score, ROC-AUC, R²-score | Accuracy, Balanced Accuracy, Log Loss, Mean Absolute Error |
Selecting an appropriate metric depends on the dataset's characteristics and the model's objectives.
For Imbalanced Datasets:
For Regression Models:
AutoML Optimization:
Sklearn has several evaluation metrics, but correctly applying them is crucial for accurate model assessment. Avoiding common pitfalls and following best practices ensures meaningful performance evaluation.
Many users make wrong inferences about a model's performance based on their interpretation of Sklearn metrics. By understanding the pitfalls and properly exploring machine learning tutorials, one can make more knowledgeable choices about assessing a machine learning model's performance.
Accuracy can be misleading, especially for imbalanced datasets. A model predicting only the majority class may achieve high accuracy while performing poorly in practice.
Solution: Use alternative metrics like Precision, Recall, F1-score, or ROC-AUC for better evaluation.
Accuracy is not a reliable indicator when one class is underrepresented, such as in fraud detection or rare disease diagnosis.
Solution: Evaluate the Precision-Recall Curve or F1-score instead of relying on raw accuracy.
Choosing the wrong metric can lead to suboptimal decision-making. In medical diagnosis, false negatives (missed diagnoses) are more costly than false positives.
Solution: Select metrics aligned with business objectives, such as Recall for high-risk cases.
A single metric rarely captures all aspects of model performance. To improve performance, you can combine two or more metrics.
Solution: Use multiple metrics—for example, in regression models, combine RMSE and R²-score for a more comprehensive assessment.
To ensure the accuracy of ratings of a model's performance, use best practice techniques when working on Sklearn metrics. To fortify the reliability with techniques such as cross-validation while reducing the scope of biased scores, there is an integration of several evaluation metrics in sklearn.
A single train-test split can introduce bias and give misleading performance estimates. Cross-validation is important to overcome this. It ensures the correct division of training and testing data.
Solution: Implement k-fold cross-validation using cross_val_score().
Different metrics capture various performance aspects. If only one metric is used, developers may become confused. Therefore, it is essential to comprehend the meaning of accuracy and the other metrics, as well as their limitations.
Solution:
Certain metrics (e.g., Mean Squared Error) are scale-dependent, which can skew results.
Solution: Use StandardScaler() to normalize or standardize features before evaluation.
A model may perform well on training data but fail on unseen data. A common concern is overfitting; if your model performs poorly when generalizing data on fresh testing data, you know something is wrong.
Solution: Compare metrics on both training and validation sets to detect overfitting.
Confusion matrices provide deeper insights into classification performance. By examining both accurate and inaccurate predictions, they offer clear insights into crucial measures like accuracy, precision, and recall.
Solution: Identify misclassification patterns using confusion_matrix(y_true, y_pred).
Are you ready to start your model evaluation? upGrad’s module and package in Python tutorial can help you to utilize sklearn and other modules effectively.
Properly using Sklearn metrics is crucial for developing reliable and high-performing machine learning models. By avoiding common pitfalls and following best practices, you can ensure that model evaluation is accurate, meaningful, and aligned with real-world objectives. Whether optimizing for classification, regression, or AutoML, selecting the right metrics enables informed decisions that improve model performance.
Now that you have an idea of why evaluation metrics in sklearn are important, it’s time to apply this knowledge. Experiment with different Sklearn metrics, create custom scoring functions, and fine-tune models for optimal performance. Mastering these techniques will enhance your machine-learning workflows and lead to better outcomes. Contact our expert counselors to explore your options!
Learn from professionals in the field, work on real-world projects, and take your AI career to the next level. Get hands-on experience by enrolling in upGrad's AI & Machine Learning Program.
Get Free Consultation
By submitting, I accept the T&C and
Privacy Policy
Top Resources