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

Logistic Regression — Probability দিয়ে decision

Logistic Regression

Sigmoid, log-loss, decision boundary।

Hook — পরীক্ষায় pass করব কি?

তুমি ৪ ঘন্টা পড়েছ — pass করবে কি? শিক্ষক বলবেন “মনে হয় ৭০% chance এ pass”। এই “সম্ভাবনা” বলার ক্ষমতাই Logistic Regression এর মূল কাজ — সংখ্যা না, বরং একটি probability return করা।

Concept — Linear থেকে Logistic

Linear Regression continuous সংখ্যা দেয় (−∞ থেকে +∞)। কিন্তু probability ০ থেকে ১ এর মধ্যে। তাই linear output কে Sigmoid function এর মধ্যে দিয়ে চেপে দেই।

z = w·x + b, ŷ = σ(z) = 1 / (1 + e^(−z))
মনে রাখো

Logistic Regression নাম এ regression হলেও কাজে এটা Classification algorithm।

Math — Log Loss / Cross Entropy

MSE এখানে কাজ করে না — non-convex হয়ে যায়। তাই আমরা Cross-Entropy Loss ব্যবহার করি।

L = −(1/n) Σ [ y·log(ŷ) + (1−y)·log(1−ŷ) ]

Gradient descent দিয়ে এই loss minimize করি — gradient form linear regression এর মতই সরল: ∂L/∂w = (1/n) Σ (ŷ − y)·x।

Real-world Use

  • Disease diagnosis — symptom থেকে positive/negative।
  • Credit default — loan return করবে কি না।
  • Click prediction — ad এ click হবে কি না।
  • Churn prediction — customer চলে যাবে কি না।

Code — Scratch + Sklearn

logistic_scratch.py
import numpy as np

X = np.array([1,2,3,4,5,6,7,8], dtype=float)
y = np.array([0,0,0,0,1,1,1,1], dtype=float)

w, b, lr, n = 0.0, 0.0, 0.1, len(X)

def sigmoid(z): return 1 / (1 + np.exp(-z))

for _ in range(5000):
    z = w * X + b
    p = sigmoid(z)
    dw = (1/n) * np.sum((p - y) * X)
    db = (1/n) * np.sum(p - y)
    w -= lr * dw
    b -= lr * db

print(f"w={w:.3f}, b={b:.3f}")
print("P(pass | 4.5 hours):", sigmoid(w*4.5 + b))
logistic_sklearn.py
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

X, y = load_breast_cancer(return_X_y=True)
Xtr, Xte, ytr, yte = train_test_split(X, y, test_size=0.2, random_state=42)

model = LogisticRegression(max_iter=5000).fit(Xtr, ytr)
print(classification_report(yte, model.predict(Xte)))

Common Mistakes

  • Feature scale না করা — convergence slow।
  • Multi-collinear feature — unstable coefficient।
  • Imbalanced data এ Accuracy এর উপর নির্ভর করা।
  • Non-linear decision boundary এ চাপিয়ে দেওয়া — polynomial feature বা kernel লাগে।

Practice Tasks

  • Task 1: Decision boundary plot করো (2D dataset)।
  • Task 2: L1 vs L2 regularization এর effect তুলনা করো।
  • Task 3: threshold বদলে precision/recall এর trade-off দেখো।

Mini Project — Heart Disease Predictor

UCI Heart Disease dataset দিয়ে Logistic Regression train করো। Confusion matrix, ROC-AUC report করো। কোন feature এর coefficient সবচেয়ে বেশি প্রভাব ফেলে — interpret করো।

Summary

এক নজরে

Logistic Regression = Linear + Sigmoid = Probability-based Classifier।