Learn linear regression with hands-on projects
How to build machine learning regression models with Python
Marvel Comics introduced a fictional character Destiny in the 1980s, with the ability to foresee future occurrences. The exciting news is that predicting future events is no longer just a fantasy! With the progress made in machine learning, a machine can help forecast future events by utilizing the past.
Exciting, right? Let’s start this journey with a simple prediction model. A regression is a mathematical function that defines the relationship between a dependent variable and one or more independent variables. Regression in machine learning analyzes how independent variables or features correlate with a dependent variable or outcome. It serves as a predictive modeling approach in machine learning, where an algorithm predicts continuous outcomes. Rather than delving into theory, the focus will be on creating different models for regression.
Understanding the input data#
Before starting to build a Python regression model, one should examine the data. For instance, if an individual owns a fish farm and needs to predict a fish’s weight based on its dimensions, they can explore the dataset by clicking the “RUN” button to display the top few rows of the DataFrame.
-
Line 2: pandas library is imported to read DataFrame.
-
Line 6: Read the data from the
Fish.txtfile with columns defined in line 5. -
Line 9: Prints the top five rows of the DataFrame. The three lengths define the vertical, diagonal, and cross lengths in cm.
Here, the fish’s length, height, and width are independent variables, with weight serving as the dependent variable. In machine learning, independent variables are often referred to as features and dependent variables as labels, and these terms will be used interchangeably throughout this blog.
Linear regression model#
Linear regression models, a fundamental concept you’ll encounter as you learn machine learning, are widely used in statistics and machine learning. These models use a straight line to describe the relationship between an independent variable and a dependent variable. For example, when analyzing the weight of fish, a linear regression model is used to describe the relationship between the weight of the fish and one of the independent variables as follows,
Where is the slope of the line that defines its steepness, and is the y-intercept, the point where line crosses the y-axis.
Selecting feature#
The dataset contains five independent variables. A simple linear regression model with only one feature can be initiated by selecting the most strongly related feature to the fish’s Weight. One approach to accomplish this is to calculate the cross-correlation between Weight and the features.
Ater examining the first column, the following is observed:
- There is a strong correlation between
Weight, and the featureX-Length. - The
Weighthas the weakest correlation withHeight.
Given this information, it is clear that if the individual is limited to using only one independent variable to predict the dependent variable, they should choose X-Length and not Height.
# Step 3: Separating the data into features and labels
X = Fish[['X-Length']]
y = Fish['Weight']
Splitting data#
With the features and labels in place, DataFrame can now be divided into training and test sets. The training dataset trains the model, while the test dataset evaluates its performance.
The train_test_split function is imported from the sklearn library to split the data.
The arguments of the train_test_split function can be examined as follows:
- Line 6: Pass the feature and the label.
- Line 7: Use
test_size=0.3to select 70% of the data for training and the remaining 30% for testing purposes. - Lines 8–9: Make the split random and use
shuffle=Trueto ensure that the model is not overfitting to a specific set of data.
As a result, the training data in variables X_train and y_train and test data in X_test and y_test is obtained.
Applying model#
At this point, the linear regression model can be created.
- Line 1: The
LinearRegressionfunction fromsklearnlibrary is imported. - Line 4: Creates and train the model using the training data
X_trainandy_train.
Model validation#
Remember, 30% of the data was set aside for testing. The Mean Absolute Error (MAE) can be calculated using this data as an indicator of the average absolute difference between the predicted and actual values, with a lower MAE value indicating more accurate predictions. Other measures for model validation exist, but they won’t be explored in this context.
Here’s a complete running example, including all of the previously mentioned steps mentioned above to perform a linear regression.
In this instance, the model.predict() function is applied to the training data on line 23, and on line 26, it is used on the test data. But what does it show?
Essentially, this approach demonstrates the model’s performance on a known dataset when compared to an unfamiliar test dataset. The two MAE values suggest that the predictions on both train and test data are similar.
Note: It is essential to recall that the
X-Lengthwas chosen as the feature because of its high correlation with the label. To verify the choice of feature, one can replace it with theHeighton line 12 and rerun the linear regression, then compare the two MAE values.
How to evaluate regression models#
Building a regression model is only half of the machine learning process. The other half is determining whether the model actually makes accurate predictions on data it has never seen before.
This is where evaluation metrics become important. Different regression metrics measure prediction quality in different ways. Some focus on average error, others penalize large mistakes, and some evaluate how much of the underlying pattern in the data the model captures. Understanding these metrics helps you choose better models and avoid misleading conclusions.
Regression metrics at a glance#
Metric | What It Measures | Lower or Higher is Better? | Common Use Case |
MAE | Average absolute error | Lower | General-purpose evaluation |
MSE | Average squared error | Lower | Penalizing large mistakes |
RMSE | Square root of MSE | Lower | Interpretable error measurement |
R² Score | Variance explained | Higher | Overall model quality |
Mean Absolute Error (MAE)#
Mean Absolute Error measures the average size of prediction errors without considering whether the model overpredicted or underpredicted.
The formula is:
[
MAE = \frac{\sum |y_{true} - y_{pred}|}{n}
]
Suppose a model predicts fish weights:
100g | 110g |
150g | 140g |
200g | 190g |
Absolute errors:
10g
10g
10g
MAE:
[
\frac{10 + 10 + 10}{3} = 10
]
The model is off by an average of 10 grams.
Why practitioners like MAE:
Easy to understand
Uses the same units as the target variable
Less sensitive to extreme outliers
Mean Squared Error (MSE)#
Mean Squared Error squares each prediction error before averaging.
[
MSE = \frac{\sum (y_{true} - y_{pred})^2}{n}
]
Using the same errors:
10² = 100
10² = 100
10² = 100
MSE:
[
\frac{100 + 100 + 100}{3} = 100
]
The key difference is that large mistakes are penalized much more heavily.
For example:
Error of 2 → 4
Error of 10 → 100
This makes MSE useful when large prediction errors are especially costly, such as:
Medical predictions
Financial forecasting
Resource planning systems
Root Mean Squared Error (RMSE)#
RMSE is simply the square root of MSE.
[
RMSE = \sqrt{MSE}
]
If MSE = 100:
[
RMSE = 10
]
RMSE combines two useful properties:
Penalizes large errors like MSE
Returns values in the same units as the target variable
For this reason, RMSE is one of the most commonly reported regression metrics in industry and research.
Many machine learning practitioners prefer RMSE because it is easier to interpret than MSE while still highlighting significant prediction mistakes.
R² Score#
R² Score (Coefficient of Determination) measures how much of the variation in the target variable is explained by the model.
Unlike MAE, MSE, and RMSE, R² does not measure error directly.
Instead, it answers the question:
How well does the model explain the data?
Typical interpretations:
0.90 | Excellent fit; explains 90% of variation |
0.50 | Moderate fit; explains 50% of variation |
0.10 | Weak fit; explains little of the variation |
1.00 | Perfect prediction |
0.00 | No better than predicting the mean |
For example:
R² = 0.90 means the model explains most of the observed variation.
R² = 0.50 suggests useful predictive power but significant unexplained variance remains.
R² = 0.10 indicates the model may be missing important features or relationships.
Comparing two regression models#
Imagine two models predicting fish weight.
MAE | 12 | 10 |
MSE | 400 | 650 |
RMSE | 20 | 25.5 |
R² | 0.82 | 0.80 |
At first glance, Model B appears better because it has a lower MAE.
However:
Model A has lower MSE
Model A has lower RMSE
Model A has slightly higher R²
This suggests that Model B performs well on average but occasionally makes very large mistakes. Model A is more consistent.
This example illustrates why relying on a single metric can be misleading.
Which metric should you use?#
Use the following decision guide:
Simple interpretation | MAE |
Strong penalty for large errors | MSE |
Real-world error units | RMSE |
Overall explanatory power | R² |
In practice:
MAE is often a good starting point.
RMSE is widely used in production systems.
R² provides useful context about overall model quality.
MSE is valuable when large mistakes are particularly undesirable.
Common evaluation mistakes#
Evaluating only on training data#
A model may perform extremely well on training data but fail on unseen examples.
Always evaluate using a separate test set or cross-validation.
Comparing models using only one metric#
A model with the best MAE may not have the best RMSE or R².
Review multiple metrics before choosing a model.
Ignoring outliers#
A few extreme values can significantly affect MSE and RMSE.
Investigate unusual observations rather than blindly trusting metric values.
Misinterpreting R²#
A high R² does not guarantee a useful model.
A model can have a high R² while still producing prediction errors that are too large for a real-world application.
Calculating regression metrics with scikit-learn#
from sklearn.metrics import (mean_absolute_error,mean_squared_error,r2_score)import numpy as npy_true = [100, 150, 200, 250]y_pred = [110, 145, 190, 260]mae = mean_absolute_error(y_true, y_pred)mse = mean_squared_error(y_true, y_pred)rmse = np.sqrt(mse)r2 = r2_score(y_true, y_pred)print("MAE:", mae)print("MSE:", mse)print("RMSE:", rmse)print("R²:", r2)
Sample output:
MAE: 8.75MSE: 93.75RMSE: 9.68R²: 0.97
Final takeaway#
No single metric tells the whole story. MAE provides an intuitive measure of average error, MSE and RMSE highlight the impact of large mistakes, and R² shows how much of the underlying variation your model explains.
Strong regression model evaluation typically combines MAE, RMSE, and R² to build a complete picture of prediction performance. Looking at multiple metrics helps you make better decisions, compare models more effectively, and avoid being misled by any single measurement.
Multiple linear regression model in Python#
So far, only one feature, X-Length has been used to train the model. However, there are features available that can be utilized to improve the predictions. These features include the vertical length, diagonal length, height, and width of the fish, and can be used to re-evaluate the linear regression model.
# Step 3: Separating the data into features and labels
X = Fish[['V-Length', 'D-Length', 'X-Length', 'Height', 'Width']]
y = Fish['Weight']
Mathematically, the multiple linear regression model can be written as follows:
where represents the weightage for feature in predicting and denotes the number of features.
Following the similar steps as earlier, the performance of the model can be calculated by utilizing all the features.
The MAE values will be similar to the results obtained when using a single feature.
Polynomial regression#
This blog explains the concept of polynomial regression, which is used when the assumption of a linear relationship between the features and label is not accurate. By allowing for a more flexible fit to the data, polynomial regression can capture more complex relationships and lead to more accurate predictions.
For example, if the relationship between the dependent variables and the independent variable is not a straight line, a polynomial regression model can be used to model it more accurately. This can lead to a better fit to the data and more accurate predictions.
Mathematically, the relationship between dependent and independent variables is described using the following equation:
The above equation looks very similar to the one used earlier to describe multiple linear regression. However, it includes the transformed features called 's which are the polynomial version of 's used in multiple linear regression.
This can be further explained using an example of two features and to create new features , , , , , , , and so on.
The new polynomial features can be created based on trial and error or techniques like cross-validation. The degree of the polynomial can also be chosen based on the complexity of the relationship between the variables.
The following example presents a polynomial regression and validates the models’ performance.
The features were transformed using PolynomialFeatures function on line 18. The PolynomialFeatures function, imported from the sklearn library on line 7, was used for this purpose.
It should be noticed that the MAE value in this case is superior to that of linear regression models, implying that the linear assumption was not entirely accurate.
This blog has provided a quick introduction to Machine learning regression models with python. Don’t stop here! Explore and practice different techniques and libraries to build more accurate and robust models. You can also check out the following courses on Educative:
A Practical Guide to Machine Learning with Python
This course teaches you how to code basic machine learning models. The content is designed for beginners with general knowledge of machine learning, including common algorithms such as linear regression, logistic regression, SVM, KNN, decision trees, and more. If you need a refresher, we have summarized key concepts from machine learning, and there are overviews of specific algorithms dispersed throughout the course.
Hands-on Machine Learning with Scikit-Learn
Scikit-Learn is a powerful library that provides a handful of supervised and unsupervised learning algorithms. If you’re serious about having a career in machine learning, then scikit-learn is a must know. In this course, you will start by learning the various built-in datasets that scikit-learn offers, such as iris and mnist. You will then learn about feature engineering and more specifically, feature selection, feature extraction, and dimension reduction. In the latter half of the course, you will dive into linear and logistic regression where you’ll work through a few challenges to test your understanding. Lastly, you will focus on unsupervised learning and deep learning where you’ll get into k-means clustering and neural networks. By the end of this course, you will have a great new skill to add to your resume, and you’ll be ready to start working on your own projects that will utilize scikit-learn.
Deploying a regression model with FastAPI#
Training a regression model is only one part of the machine learning workflow. In real-world applications, a trained model often needs to serve predictions to websites, dashboards, mobile apps, or other services.
This is where model deployment comes in. Instead of manually running predictions inside a Jupyter notebook, you can expose your model through an API. Applications send input data to the API, and the API returns predictions in real time. FastAPI has become a popular choice for this task because it is lightweight, fast, and works seamlessly with Python machine learning libraries.
Basic deployment workflow#
A typical machine learning deployment pipeline looks like this:
Train model↓Evaluate model↓Save model↓Load model in API↓Accept user input↓Return prediction
Once a model has been trained and evaluated, it can be saved to disk and reused without retraining every time the application starts.
Saving a trained regression model#
After training a scikit-learn model, you can save it using joblib.
import joblibjoblib.dump(model, "fish_weight_model.pkl")
This creates a file named fish_weight_model.pkl that contains the trained model. Later, your API can load this file and use it to generate predictions.
Creating a FastAPI prediction endpoint#
The following example demonstrates a simple FastAPI service that loads the trained model, accepts fish measurements as input, and returns a predicted fish weight.
from fastapi import FastAPIfrom pydantic import BaseModelimport joblibapp = FastAPI()model = joblib.load("fish_weight_model.pkl")class FishFeatures(BaseModel):v_length: floatd_length: floatx_length: floatheight: floatwidth: float@
This example demonstrates several useful FastAPI features:
Pydantic models validate incoming data automatically.
Type hints improve readability and reduce errors.
JSON responses make integration with other applications straightforward.
Automatic API documentation is generated without additional work.
Example API request#
A client can send a POST request containing fish measurements:
{"v_length": 25.4,"d_length": 27.3,"x_length": 30.0,"height": 11.5,"width": 4.8}
Example API response#
The API returns the model's prediction:
{"predicted_weight": 532.7}
The exact value will depend on the model and training data used.
Why FastAPI is useful for model serving#
FastAPI has become one of the most popular frameworks for deploying machine learning models because it offers a strong balance between simplicity and performance.
Some key advantages include:
Lightweight and easy to learn
Excellent performance for Python applications
Automatic OpenAPI and Swagger documentation
Native support for type hints and validation
Seamless integration with scikit-learn, pandas, NumPy, and other ML libraries
Easy deployment to cloud platforms and containerized environments
For many machine learning projects, FastAPI provides everything needed to move from experimentation to production.
Deployment best practices#
Before deploying a model, consider a few important practices:
Validate all incoming input data.
Keep feature ordering identical to the training process.
Save preprocessing logic alongside the model.
Monitor prediction quality after deployment.
Retrain models when underlying data changes.
Avoid exposing experimental or untested models directly to end users.
These practices help ensure that predictions remain reliable and consistent over time.
Keep preprocessing and prediction together#
For production systems, it is often best to save a complete scikit-learn pipeline instead of saving only the model.
For example:
from sklearn.pipeline import Pipelinepipeline = Pipeline([("scaler", scaler),("model", regression_model)])
Using a pipeline ensures that the same preprocessing steps applied during training are also applied during prediction, reducing the risk of inconsistent results.
Final takeaway#
A regression model becomes significantly more useful when it can serve predictions outside a notebook. FastAPI provides a simple and practical way to turn a trained scikit-learn model into a web API that other applications can consume.
As you continue learning machine learning, understanding how to deploy models is just as important as learning how to train them. Building APIs around your models helps bridge the gap between experimentation and real-world software systems.
Regression datasets to practice your machine learning skills#
Machine learning skills improve through experimentation. Once you understand the basics of regression, the best next step is to apply the same concepts across different datasets and compare how your models behave.
Each dataset teaches something slightly different. Some are clean and beginner-friendly, while others introduce categorical variables, missing values, nonlinear relationships, feature engineering, and overfitting risks. Practicing across multiple datasets helps you build stronger regression intuition.
Regression dataset comparison#
Dataset | Source | Target Variable | Difficulty | Concepts Practiced |
California Housing | scikit-learn | Median house value | Beginner | Multiple linear regression, train-test split, model evaluation |
Fish Market Dataset | Kaggle/UCI-style datasets | Fish weight | Beginner | Simple linear regression, feature selection, polynomial regression |
Medical Insurance Cost Dataset | Kaggle | Insurance charges | Beginner | Multiple regression, categorical encoding, feature importance |
Boston Housing | Historical reference only | House price | Beginner | Regression fundamentals, ethics discussion, legacy dataset awareness |
Bike Sharing Demand | UCI/Kaggle | Bike rental count | Intermediate | Time-based features, seasonality, feature engineering |
Automobile Price Dataset | UCI | Car price | Intermediate | Missing data, categorical encoding, feature selection |
Energy Efficiency Dataset | UCI | Heating/cooling load | Advanced | Polynomial regression, nonlinear relationships |
House Prices: Ames Housing | Kaggle | Sale price | Advanced | Feature engineering, cross-validation, model comparison |
Student Performance Dataset | UCI | Student score/performance | Intermediate | Categorical encoding, correlation analysis, multiple regression |
Beginner-friendly datasets#
California Housing#
The California Housing dataset predicts median house value using features such as income, location, population, and household information. It is available directly through scikit-learn, which makes it easy to load and use.
This dataset is beginner-friendly because it is already structured and works well for multiple linear regression. It is a good next step after simple one-feature regression because you can practice using several input variables at once.
Good techniques to practice:
Multiple linear regression
Train-test splitting
MAE, MSE, RMSE, and R² evaluation
Feature scaling
Medical Insurance Costs#
The Medical Insurance Cost dataset predicts insurance charges based on features such as age, BMI, smoking status, region, and number of children.
This dataset is useful because it introduces categorical variables. You will need to encode features like sex, smoker, and region before training a model.
Good techniques to practice:
Multiple linear regression
One-hot encoding
Feature importance
Comparing numeric and categorical predictors
Fish Market Dataset#
The Fish Market dataset predicts fish weight using measurements such as length, height, and width.
This is a great beginner dataset because the relationship between physical measurements and weight is intuitive. It also works well for comparing simple linear regression, multiple linear regression, and polynomial regression.
Good techniques to practice:
Simple linear regression
Feature selection
Polynomial regression
Visualizing predictions
Intermediate regression projects#
Bike Sharing Demand#
Bike Sharing Demand predicts the number of bike rentals based on weather, season, time, and calendar-related variables.
This dataset introduces real-world complexity because demand is affected by time, temperature, humidity, holidays, and user behavior.
You can practice:
Time-based feature engineering
Handling seasonality
Comparing linear and tree-based models
Evaluating prediction errors across different conditions
Student Performance Dataset#
The Student Performance dataset predicts student outcomes based on academic, demographic, and lifestyle-related features.
This dataset is useful for practicing categorical encoding and careful interpretation. Some features may appear correlated with performance, but correlation does not always imply causation.
You can practice:
Categorical encoding
Correlation analysis
Feature selection
Ethical interpretation of model results
Automobile Price Prediction#
The Automobile Price dataset predicts car prices using features such as engine size, horsepower, fuel type, body style, and brand.
This dataset is valuable because it often includes missing values and mixed data types. It teaches you that preprocessing is often just as important as model selection.
You can practice:
Missing value handling
Encoding categorical variables
Feature selection
Model comparison
Advanced regression projects#
Ames Housing Prices#
Ames Housing is a richer and more realistic housing dataset than many beginner examples. It includes many numeric and categorical features related to property size, location, condition, year built, and sale details.
This dataset is excellent for practicing end-to-end regression workflows.
You can practice:
Advanced feature engineering
Cross-validation
Handling many categorical features
Comparing linear models with tree-based models
Preventing overfitting
Energy Efficiency Dataset#
The Energy Efficiency dataset predicts heating and cooling loads based on building characteristics.
This dataset is useful because relationships between features and targets may be nonlinear. It is a strong fit for polynomial regression and model comparison.
You can practice:
Polynomial regression
Nonlinear feature relationships
Multi-output regression concepts
Model evaluation across different target variables
Other multi-feature datasets#
Once you are comfortable with beginner and intermediate datasets, try regression problems with many features, missing data, or domain-specific variables.
These datasets help you practice the full machine learning workflow: cleaning data, selecting features, training models, evaluating results, and explaining trade-offs.
What to practice with each dataset#
Simple Linear Regression | Fish Market |
Multiple Linear Regression | California Housing |
Polynomial Regression | Energy Efficiency |
Feature Selection | Automobile Prices |
Categorical Encoding | Student Performance |
Model Evaluation | House Prices |
Suggested learning progression#
Step 1: Fish Market Dataset#
Start here if you want to reinforce the basics. Use one feature first, then add more features and compare performance.
Step 2: California Housing#
Move to California Housing when you are ready for multiple linear regression. This dataset helps you practice working with several numerical features.
Step 3: Medical Insurance Costs#
Use this dataset to learn categorical encoding and feature interpretation. It is especially useful for understanding how one feature, such as smoking status, can strongly affect predictions.
Step 4: Bike Sharing Demand#
This dataset introduces time-based patterns and more realistic feature engineering. It helps you think beyond simple columns and rows.
Step 5: Ames Housing#
Use Ames Housing when you are ready for a larger, more realistic regression challenge. This dataset is ideal for cross-validation, feature engineering, and model comparison.
Common regression mistakes when practicing#
Using all features without analysis#
More features do not always mean a better model. Some features may be noisy, redundant, or irrelevant.
Ignoring train-test separation#
Always split your data before evaluating your model. Testing on the same data used for training gives overly optimistic results.
Overfitting polynomial models#
Polynomial regression can fit curves well, but higher-degree models can memorize training data instead of learning useful patterns.
Misinterpreting correlation#
A strong correlation does not prove that one feature causes the target variable to change. Be careful when explaining model results.
Using MAE alone for evaluation#
MAE is useful, but it does not tell the full story. Compare multiple metrics such as MAE, RMSE, and R² to better understand model performance.
Final recommendations#
If you are new to regression, do not jump directly into the largest dataset. Start with small, intuitive datasets where you can clearly understand the relationship between features and the target variable.
A strong practice path looks like this:
Fish Market↓California Housing↓Medical Insurance Costs↓Bike Sharing Demand↓Ames Housing
The fastest way to become comfortable with regression is to solve similar prediction problems across multiple datasets. Each new dataset introduces different challenges and helps you build stronger machine learning intuition over time.
Frequently Asked Questions
What are the 3 types of regression?
What are the 3 types of regression?
What are the regression models in Python?
What are the regression models in Python?