Hook — বাজারে আম কিনতে গিয়ে
তুমি বাজারে গেলে দেখো — ১ কেজি আম ৮০ টাকা, ২ কেজি ১৬০ টাকা, ৩ কেজি ২৪০ টাকা। তুমি সাথে সাথে বলতে পারো ৫ কেজি ৪০০ টাকা। কেন? কারণ তুমি অজান্তেই একটি সরলরেখার সম্পর্ক ধরে ফেলেছ — এটাই Linear Regression।
Concept — সরলরেখার গাণিতিক রূপ
Linear Regression এমন একটি algorithm যা input (X) আর output (y) এর মধ্যে সরলরৈখিক সম্পর্ক খোঁজে।
এখানে w হলো slope (line টা কতটা ঢালু), আর b হলো intercept (y-axis এর সাথে যেখানে কাটে)। আমাদের কাজ — এমন w আর b খুঁজে বের করা যাতে line টা সব data point এর কাছে সবচেয়ে কাছে থাকে।
Math — Loss এবং Gradient Descent
Mean Squared Error (MSE)
প্রত্যেক prediction এর ভুলকে square করে গড় নিচ্ছি। Square করার দুটি কারণ — negative বাদ যায়, এবং বড় ভুল বেশি penalty পায়।
Gradient Descent — পাহাড় থেকে নামা
Loss এর landscape কে কল্পনা করো একটি বাটির মত। আমরা চাই বাটির সবচেয়ে নিচু জায়গায় পৌঁছাতে। প্রত্যেক step এ derivative দেখে কোন দিকে নামলে loss কমবে — সেদিকে একটু এগিয়ে যাই।
এখানে η (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
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 দিয়ে এক লাইনে
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 এর উপরে রাখার চেষ্টা করো।
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।