কম্পিউটার টিউটোরিয়াল

পাইথন - পলিনোমিয়াল রিগ্রেশন ইমপ্লিমেন্টেশন (scikit-learn)

পলিনোমিয়াল রিগ্রেশন (Polynomial Regression) হলো লিনিয়ার রিগ্রেশনের একটি এক্সটেনশন যেখানে ইনডিপেন্ডেন্ট ভেরিয়েবল (x) এবং ডিপেন্ডেন্ট ভেরিয়েবল (y)-এর সম্পর্ক nth-ডিগ্রি পলিনোমিয়াল দিয়ে মডেল করা হয়। এটি নন-লিনিয়ার সম্পর্ক মডেল করতে সক্ষম।

প্রয়োজনীয় লাইব্রেরি

pip install numpy pandas matplotlib scikit-learn

সম্পূর্ণ উদাহরণ

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.metrics import r2_score, mean_squared_error

# ১. ডেটা লোড (উদাহরণ CSV: Temperature vs Pressure)
# CSV ফাইল নেই তে সিনথেটিক ডেটা তৈরি
np.random.seed(42)
X = np.linspace(0, 10, 50).reshape(-1, 1)
y = 2 * X**3 - 5 * X**2 + 3 * X + 10 + np.random.randn(50, 1) * 20

# ২. লিনিয়ার রিগ্রেশন (বেসলাইন)
lin = LinearRegression()
lin.fit(X, y)
y_pred_lin = lin.predict(X)

# ৩. পলিনোমিয়াল রিগ্রেশন (ডিগ্রি ৩)
poly = PolynomialFeatures(degree=3, include_bias=False)
X_poly = poly.fit_transform(X)

lin2 = LinearRegression()
lin2.fit(X_poly, y)
y_pred_poly = lin2.predict(X_poly)

# ৪. মেট্রিক্স
print(f"Linear R²: {r2_score(y, y_pred_lin):.4f}")
print(f"Poly R²:   {r2_score(y, y_pred_poly):.4f}")
print(f"Linear MSE: {mean_squared_error(y, y_pred_lin):.2f}")
print(f"Poly MSE:   {mean_squared_error(y, y_pred_poly):.2f}")

# ৫. ভিজ্যুয়ালাইজেশন
plt.figure(figsize=(12, 5))

# লিনিয়ার
plt.subplot(1, 2, 1)
plt.scatter(X, y, color='blue', alpha=0.6, label='Data')
plt.plot(X, y_pred_lin, color='red', linewidth=2, label='Linear Fit')
plt.title('Linear Regression')
plt.xlabel('Temperature')
plt.ylabel('Pressure')
plt.legend()
plt.grid(True, alpha=0.3)

# পলিনোমিয়াল
plt.subplot(1, 2, 2)
plt.scatter(X, y, color='blue', alpha=0.6, label='Data')
# স্মুথ কার্ভের জন্য সর্ট করা X
X_sorted = np.sort(X, axis=0)
X_poly_sorted = poly.transform(X_sorted)
plt.plot(X_sorted, lin2.predict(X_poly_sorted), color='red', linewidth=2, label='Poly Fit (deg=3)')
plt.title('Polynomial Regression (degree=3)')
plt.xlabel('Temperature')
plt.ylabel('Pressure')
plt.legend()
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.show()

# ৬. নতুন প্রেডিকশন
new_temp = 110.0
print(f"Linear prediction at {new_temp}: {lin.predict([[new_temp]])[0][0]:.2f}")
print(f"Poly prediction at {new_temp}: {lin2.predict(poly.transform([[new_temp]]))[0][0]:.2f}")

মূল কনসেপ্টস

কনসেপ্টবিবরণ
PolynomialFeaturesx থেকে x², x³, ... xⁿ ফিচার তৈরি করে
degreeপলিনোমিয়ালের ডিগ্রি (অতিরিক্ত ডিগ্রি = ওভারফিটিং রিস্ক)
include_bias=Falseবায়াস টার্ম (x⁰=১) যোগ না করা, LinearRegression নিজেই হ্যান্ডেল করে
fit_transform vs transformট্রেনিং ডেটায় fit_transform, টেস্ট/নিউ ডেটায় transform

ডিগ্রি নির্বাচন: ওভারফিটিং এড়ানো

from sklearn.model_selection import cross_val_score

degrees = range(1, 8)
cv_scores = []

for d in degrees:
    poly = PolynomialFeatures(degree=d, include_bias=False)
    X_poly = poly.fit_transform(X)
    lin = LinearRegression()
    scores = cross_val_score(lin, X_poly, y, cv=5, scoring='r2')
    cv_scores.append(scores.mean())
    print(f"Degree {d}: CV R² = {scores.mean():.4f}")

# সেরা ডিগ্রি বেছে নিন (সাধারণত যেখানে CV স্কোর পিক করে)
import matplotlib.pyplot as plt
plt.plot(degrees, cv_scores, 'o-')
plt.xlabel('Polynomial Degree')
plt.ylabel('Cross-Validation R²')
plt.title('Degree Selection')
plt.show()

সেরা অনুশীলন

  • ডেটা স্কেল করুন (StandardScaler) পলিনোমিয়াল ফিচার তৈরির আগে—বড় ডিগ্রি হলে সংখ্যা খুব বড় হয়।
  • ক্রস-ভ্যালিডেশন দিয়ে অপ্টিমাল ডিগ্রি বেছে নিন।
  • রেগুলারাইজেশন (Ridge/Lasso) ব্যবহার করুন হাই-ডিগ্রি পলিনোমিয়ালে।
  • Pipeline ব্যবহার করে স্টেপস চেইন করুন: Pipeline([('poly', PolynomialFeatures()), ('scaler', StandardScaler()), ('lin', LinearRegression())])।
  1. Python-এ Matplotlib সাবপ্লটে xticks সেট করা

  2. পাইথনে কোরিলেশন এবং রিগ্রেশন

  3. পাইথনের অভ্যন্তরীণ কাজকর্ম

  4. পাইথনে লজিস্টিক রিগ্রেশন: বাইনারি আউটকাম প্রেডিকশনের গাইড