📚 সমস্ত অধ্যায় দেখুন
অধ্যায়/ফেজ 2 · Phase 2 · Algorithms
2.1১৮ মিনিট পড়া11 / 68

Linear Regression — সরলরেখার জাদু

Linear Regression

Best fit line, MSE, gradient descent — শূন্য থেকে।

Hook — বাজারে আম কিনতে গিয়ে

তুমি বাজারে গেলে দেখো — ১ কেজি আম ৮০ টাকা, ২ কেজি ১৬০ টাকা, ৩ কেজি ২৪০ টাকা। তুমি সাথে সাথে বলতে পারো ৫ কেজি ৪০০ টাকা। কেন? কারণ তুমি অজান্তেই একটি সরলরেখার সম্পর্ক ধরে ফেলেছ — এটাই Linear Regression।

Concept — সরলরেখার গাণিতিক রূপ

Linear Regression এমন একটি algorithm যা input (X) আর output (y) এর মধ্যে সরলরৈখিক সম্পর্ক খোঁজে।

y = w·x + b

এখানে w হলো slope (line টা কতটা ঢালু), আর b হলো intercept (y-axis এর সাথে যেখানে কাটে)। আমাদের কাজ — এমন w আর b খুঁজে বের করা যাতে line টা সব data point এর কাছে সবচেয়ে কাছে থাকে।

Math — Loss এবং Gradient Descent

Mean Squared Error (MSE)

MSE = (1/n) Σ (y_actual − y_predicted)²

প্রত্যেক prediction এর ভুলকে square করে গড় নিচ্ছি। Square করার দুটি কারণ — negative বাদ যায়, এবং বড় ভুল বেশি penalty পায়।

Gradient Descent — পাহাড় থেকে নামা

Loss এর landscape কে কল্পনা করো একটি বাটির মত। আমরা চাই বাটির সবচেয়ে নিচু জায়গায় পৌঁছাতে। প্রত্যেক step এ derivative দেখে কোন দিকে নামলে loss কমবে — সেদিকে একটু এগিয়ে যাই।

w := w − η · ∂L/∂w

এখানে η (eta) হলো learning rate — কত বড় step নেব। বেশি বড় হলে বাটি miss করব, বেশি ছোট হলে অনেক সময় লাগবে।

Real-world Importance

  • House price prediction — area, room থেকে দাম।
  • Sales forecasting — গত বছরের trend থেকে ভবিষ্যৎ sale।
  • Salary prediction — experience থেকে salary estimate।
  • Medical — dosage থেকে blood pressure এর change।

Step-by-step Pipeline

  • Data load এবং explore করা।
  • Feature ও target আলাদা করা।
  • Train/test split করা।
  • Model fit করা।
  • Test set এ evaluate করা (R², MSE)।
  • নতুন data এ predict করা।

Python Code — Scratch + Scikit-learn

linear_regression_scratch.py
import numpy as np

# Sample data: hours of study (X) vs marks (y)
X = np.array([1, 2, 3, 4, 5, 6, 7, 8], dtype=float)
y = np.array([35, 50, 60, 72, 78, 85, 92, 98], dtype=float)

# Initialize parameters
w, b = 0.0, 0.0
lr = 0.01
epochs = 1000
n = len(X)

for epoch in range(epochs):
    y_pred = w * X + b
    error = y_pred - y

    # Gradients of MSE w.r.t. w and b
    dw = (2 / n) * np.sum(error * X)
    db = (2 / n) * np.sum(error)

    # Update
    w -= lr * dw
    b -= lr * db

print(f"Learned: y = {w:.3f} * x + {b:.3f}")
print(f"Predict 9 hours -> {w * 9 + b:.2f} marks")

Scikit-learn দিয়ে এক লাইনে

linear_regression_sklearn.py
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np

X = np.array([[1],[2],[3],[4],[5],[6],[7],[8]])
y = np.array([35,50,60,72,78,85,92,98])

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42
)

model = LinearRegression().fit(X_train, y_train)
y_hat = model.predict(X_test)

print("slope:", model.coef_[0], "intercept:", model.intercept_)
print("MSE:", mean_squared_error(y_test, y_hat))
print("R^2:", r2_score(y_test, y_hat))

লাইন-বাই-লাইন ব্যাখ্যা (scratch version)

  • Line 4–5: X (study hours) আর y (marks) — আমাদের ছোট্ট dataset।
  • Line 8: w আর b শুরুতে 0 ধরে নিচ্ছি — model এখনো কিছু জানে না।
  • Line 9: learning rate 0.01 — মাঝারি step size।
  • Line 13: prediction = wx + b।
  • Line 17–18: MSE এর derivative — এটাই gradient descent এর মূল।
  • Line 21–22: parameter update — gradient এর বিপরীত দিকে step।
  • Line 24–25: শেখা সমীকরণ ও prediction দেখা।

Common Mistakes

সাবধান

Linear Regression সবসময় linear সম্পর্ক ধরে — non-linear data এ এটা ভালো কাজ করবে না।

  • Feature scaling না করা — learning rate ঠিকমত কাজ না করতে পারে।
  • Outlier handle না করা — single outlier পুরো line ঘুরিয়ে দিতে পারে।
  • অনেক বড় learning rate দেওয়া — loss diverge করে infinity তে চলে যায়।
  • Test data দিয়ে train করা — accuracy 100% দেখাবে কিন্তু real world এ ব্যর্থ হবে।

Practice Tasks

  • Task 1: learning rate ০.০০১, ০.০১, ০.১ দিয়ে চালিয়ে দেখো কীভাবে converge করে।
  • Task 2: y data তে noise যোগ করে দেখো — model কি এখনো ভালো শেখে?
  • Task 3: scratch ও sklearn version এর coefficient মিলিয়ে দেখো।

Mini Project — Salary Predictor

Kaggle এর “Years of Experience vs Salary” dataset নাও। Train/test split করো (80/20)। Model train করো এবং নিজের experience দিয়ে predict করো। R² score 0.9 এর উপরে রাখার চেষ্টা করো।

Pro tip

Result সুন্দর করে matplotlib দিয়ে plot করো — line, actual points এবং predicted points এক graph এ।

Summary

এক নজরে

Linear Regression = সবচেয়ে fit সরলরেখা খোঁজা = MSE minimize = Gradient Descent।

  • y = wx + b — মূল সমীকরণ।
  • MSE = loss function।
  • Gradient Descent = optimization।
  • Outlier আর non-linearity এর প্রতি সংবেদনশীল।
  • R² 1 এর কাছে = ভালো fit।