Skip to main content

Command Palette

Search for a command to run...

Building Linear Regression from Scratch in Python: A Step-by-Step Guide

Published
5 min readView as Markdown
N

Nomidl provides a free learning platform and best preparation material to all job seekers who wants to start their career into Data Science, Machine Learning and Artificial Intelligence or wants to switch in from any other field. We will give you correct guidance by which you will be able to start you career immediately so be with us. With our best learning material you can learn and understand easily all the concepts in easy way. https://www.nomidl.com/generative-ai/generative-ai-interview-2025/

Linear Regression is often the first machine learning algorithm people learn — and for good reason. It’s simple, powerful, and forms the foundation for many advanced models.

But here’s the catch:
Most tutorials jump straight to using libraries. While that’s practical, it often leaves beginners wondering what’s actually happening under the hood.

In this article, we’ll implement Linear Regression from scratch using Python, without relying on machine learning libraries. We’ll break down the math, logic, and code in a way that feels intuitive — like learning from a friend, not a textbook.

If you’re learning data science, machine learning, or Python for AI, this guide will give you real confidence.


Why Implement Linear Regression from Scratch?

Before writing any code, let’s address the obvious question: Why not just use existing libraries?

Implementing Linear Regression manually helps you:

  • Truly understand how the algorithm works

  • Build strong fundamentals in machine learning

  • Debug models more effectively later

  • Perform better in interviews and assessments

Once the core logic is clear, using libraries becomes a choice — not a dependency.


What Is Linear Regression (In Simple Terms)?

Linear Regression models the relationship between:

  • Input (X) → independent variable

  • Output (Y) → dependent variable

It tries to draw the best possible straight line that predicts Y from X.

The equation looks like this:

y = m * x + b

Where:

  • m is the slope (weight)

  • b is the intercept (bias)

Our goal is to find values of m and b that minimize prediction error.


Understanding the Core Idea: Error and Optimization

Every prediction our model makes has some error.

Error = Actual Value − Predicted Value

To measure overall performance, we use Mean Squared Error (MSE):

MSE = (1/n) * Σ(actual − predicted)²

Why squared?

  • Penalizes larger errors more

  • Smooths optimization

Our mission: minimize this error by adjusting m and b.


The Role of Gradient Descent

Gradient Descent is the engine that drives Linear Regression learning.

In simple terms:

  • Start with random values for m and b

  • Calculate error

  • Adjust parameters slightly

  • Repeat until error is minimized

Think of it like walking downhill blindfolded — you feel the slope and step downward until you reach the lowest point.


Step 1: Import Required Libraries

We’ll keep things minimal.

import numpy as np

We’re using NumPy only for numerical operations, not machine learning.


Step 2: Create a Sample Dataset

Let’s start with a simple dataset.

X = np.array([1, 2, 3, 4, 5])
Y = np.array([2, 4, 6, 8, 10])

This represents a perfect linear relationship:

  • When X increases, Y doubles

Real-world data is messier, but this helps us understand the process clearly.


Step 3: Initialize Parameters

We’ll start with random or zero values.

m = 0
b = 0

These values will be updated during training.


Step 4: Define the Prediction Function

This function calculates predicted values using the linear equation.

def predict(X, m, b):
    return m * X + b

Simple, readable, and reusable.


Step 5: Define the Cost Function (MSE)

This tells us how wrong our model is.

def compute_cost(X, Y, m, b):
    n = len(X)
    predictions = predict(X, m, b)
    cost = (1 / n) * np.sum((Y - predictions) ** 2)
    return cost

Lower cost = better model.


Step 6: Implement Gradient Descent

This is the heart of Linear Regression.

def gradient_descent(X, Y, m, b, learning_rate, iterations):
    n = len(X)

    for _ in range(iterations):
        predictions = predict(X, m, b)

        dm = (-2 / n) * np.sum(X * (Y - predictions))
        db = (-2 / n) * np.sum(Y - predictions)

        m = m - learning_rate * dm
        b = b - learning_rate * db

    return m, b

What’s happening here?

  • dm and db are gradients (directions of steepest increase)

  • We subtract them to move toward minimum error

  • Learning rate controls step size


Step 7: Train the Model

Now let’s run everything.

learning_rate = 0.01
iterations = 1000

m, b = gradient_descent(X, Y, m, b, learning_rate, iterations)

After training, m and b should be close to:

  • m ≈ 2

  • b ≈ 0

Which matches our dataset.


Step 8: Make Predictions

Let’s test our trained model.

predictions = predict(X, m, b)
print(predictions)

You’ll see values very close to [2, 4, 6, 8, 10].

That’s Linear Regression working as expected.


How This Applies to Real-World Problems

Linear Regression is widely used in:

  • House price prediction

  • Sales forecasting

  • Salary estimation

  • Trend analysis

  • Risk assessment

Even when more complex models are used, Linear Regression is often the baseline.

Understanding it deeply gives you a strong mental model for:

  • Loss functions

  • Optimization

  • Model evaluation


Common Mistakes Beginners Make

When implementing Linear Regression from scratch, watch out for:

  • Learning rate too high (model diverges)

  • Learning rate too low (slow convergence)

  • Forgetting feature scaling

  • Using too few iterations

  • Misinterpreting error metrics

These mistakes are normal — and fixing them is part of learning.


Improving This Implementation Further

Once you’re comfortable, try extending the project:

  • Add feature scaling

  • Support multiple features

  • Plot loss over iterations

  • Add early stopping

  • Compare with library-based implementation

Each improvement builds confidence and practical skill.


Why This Exercise Matters for Your ML Journey

Implementing Linear Regression manually teaches you:

  • How optimization actually works

  • Why cost functions matter

  • How models learn from data

  • What libraries abstract away

This knowledge pays dividends when you move to:

  • Logistic Regression

  • Neural Networks

  • Deep Learning

Strong foundations make advanced topics feel less intimidating.


Final Thoughts: Learn the Fundamentals, Then Scale

Linear Regression may seem simple, but it’s one of the most important algorithms in machine learning.

By implementing it from scratch in Python, you’re not just learning syntax — you’re learning how machines learn.

Once this concept clicks, everything else in ML starts to feel more logical.

If you’re serious about Python, data science, or machine learning, take the time to build fundamentals like this. It’s one of the best investments you can make.

Happy learning and happy coding 🚀

More from this blog

N

Nomidl

46 posts