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

পাইথনে লিনিয়ার রিগ্রেশন: মেশিন লার্নিংয়ের শুরুতে একটি গাইড

লিনিয়ার রিগ্রেশন মেশিন লার্নিং-এ সবচেয়ে সহজ স্ট্যান্ডার্ড টুল যা দুটি ভেরিয়েবলের মধ্যে পজিটিভ বা নেগেটিভ রিলেশনশিপ নির্দেশ করে। এটি কুইক প্রিডিক্টিভ অ্যানালিসিসের জন্য দারুণ একটি টুল। এই সেকশনে পাইথনের pandas প্যাকেজ ব্যবহার করে ডেটা লোড করব, তারপর লিনিয়ার রিগ্রেশন মডেল অনুমান, ইন্টারপ্রেট এবং ভিজ্যুয়ালাইজ করব।

রিগ্রেশন কী?

রিগ্রেশন হলো একটি প্রিডিক্টিভ মডেলিং টেকনিক যা ডিপেনডেন্ট এবং ইনডিপেনডেন্ট ভেরিয়েবলের মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে।

রিগ্রেশন প্রকারভেদ

  • লিনিয়ার রিগ্রেশন
  • লজিস্টিক রিগ্রেশন
  • পলিনোমিয়াল রিগ্রেশন
  • স্টেপওয়াইজ রিগ্রেশন

লিনিয়ার রিগ্রেশন কোথায় ব্যবহৃত হয়?

  • ট্রেন্ড ও সেলস এস্টিমেশন মূল্যায়ন
  • প্রাইস চেঞ্জের প্রভাব বিশ্লেষণ
  • ঝুঁকি आँকা

লিনিয়ার রিগ্রেশন মডেল বিল্ড করার ধাপসমূহ

  1. সেটআপ তৈরি এবং ডেটাসেট ও জুপিটার নোটবুক ডাউনলোড করা।
  2. প্রয়োজনীয় প্যাকেজ ও ডেটাসেট ইম্পোর্ট করা।
  3. লোড করা ডেটাসেট এক্সপ্লোর করা।
  4. ডেটাসেট দিয়ে লিনিয়ার রিগ্রেশন করা।
  5. ভেরিয়েবল এবং টাইম অফ ডে এর সম্পর্ক এক্সপ্লোর করা।
  6. সারসংক্ষেপ।

সেটআপ

ডেটাসেট ডাউনলোড লিংক: building1retail.csv

এই CSV ফাইলটি আমরা আউটডোর এয়ার টেম্পারেচার (OAT) ব্যবহার করে একটি বিল্ডিংয়ের পাওয়ার মডেল করতে ব্যবহার করব। CSV ফাইলটি জুপিটার বা IDE ইনস্টল করা ফোল্ডারে সেভ করুন।

প্রয়োজনীয় লাইব্রেরি ও ডেটাসেট ইম্পোর্ট

# Importing Necessary Libraries
import pandas as pd
import numpy as np
from scipy import stats
from datetime import datetime
from sklearn import preprocessing
from sklearn.model_selection import KFold
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
%matplotlib inline

# Reading Data
df = pd.read_csv('building1retail.csv', index_col=[0], date_parser=lambda x: datetime.strptime(x, "%m/%d/%Y %H:%M"))
df.head()

আউটপুট

(ডেটাফ্রেমের হেড দেখানো হয়েছে)

ডেটাসেট এক্সপ্লোর করা

পан্ডাস দিয়ে ডেটাসেট ভিজ্যুয়ালাইজ করি।

df.plot(figsize=(22,6))

আউটপুট

(প্লট দেখানো হয়েছে: x-axis Jan 2010 – Jan 2011)

প্লটে দুটি অস্বাভাবিক বিষয় লক্ষ্য করা যায়:

  • কোনো মিসিং ডেটা নেই। চেক করতে: df.isnull().values.any() → False।
  • ডেটায় কিছু অ্যানোমালি (লং ডাউনওয়ার্ড স্পাইক) আছে।

এই আউটলায়ারগুলো সাধারণত এক্সপেরিমেন্টাল এরর বা আসল ভ্যালু হতে পারে। যাহোক, এগুলো রিগ্রেশন লাইনর স্লোপ বাধা দেয়, তাই এগুলো ড্রপ করব।

প্রথমে চেক করি ডেটার ডিস্ট্রিবিউশন:

df.hist()

হিস্টোগ্রাম দেখে ডেটা রফলি নর্মাল ডিস্ট্রিবিউশন ফলো করছে বোঝা যায়।

এখন ৩ স্ট্যান্ডার্ড ডেভিয়েশন চেয়ে বড় মানগুলো ড্রপ করি এবং নতুন ডেটাফ্রেম প্লট করি:

std_dev = 3
df = df[(np.abs(stats.zscore(df)) < float(std_dev)).all(axis=1)]
df.plot(figsize=(22, 6))

স্পাইকগুলো দূর হয়েছে এবং ডেটা ক্লিন হয়েছে।

লিনিয়ার রিলেশনশিপ ভ্যালিডেট করা

OAT এবং Power-এর মধ্যে লিনিয়ার রিলেশন আছে কিনা চেক করতে স্ক্যাটার প্লট:

plt.scatter(df['OAT (F)'], df['Power (kW)'])

লিনিয়ার রিগ্রেশন মডেল

scikit-learn মডিউল এবং k-ফোল্ড ক্রস ভ্যালিডেশন (k=3) ব্যবহার করে মডেল অसेস করব।

X = pd.DataFrame(df['OAT (F)'])
y = pd.DataFrame(df['Power (kW)'])
model = LinearRegression()
scores = []
kfold = KFold(n_splits=3, shuffle=True, random_state=42)

for i, (train, test) in enumerate(kfold.split(X, y)):
    model.fit(X.iloc[train,:], y.iloc[train,:])
    score = model.score(X.iloc[test,:], y.iloc[test,:])
    scores.append(score)

print(scores)

আউটপুট

[0.38768927735902703, 0.3852220878090444, 0.38451654781487116]

ফলাফল ভালো নয়, পারফরম্যান্স উন্নত করা যাবে।

টাইম অফ ডে (Time of Day) ফ্যাক্টর যোগ করা

পাওয়ার ভেরিয়েবল টাইম অফ ডে-র ওপর ভরি ডিপেনডেন্ট। এই ইনফোরমেশন এক-হট এনকোডিং দিয়ে মডেলে ইনকর্পোরেট করি।

model = LinearRegression()
scores = []
kfold = KFold(n_splits=3, shuffle=True, random_state=42)

for i, (train, test) in enumerate(kfold.split(X, y)):
    model.fit(X.iloc[train,:], y.iloc[train,:])
    scores.append(model.score(X.iloc[test,:], y.iloc[test,:]))

print(scores)

আউটপুট

[0.8074246958895391, 0.8139449185141592, 0.8111379602960773]

মডেল পারফরম্যান্স অনেক উন্নত হয়েছে!

সারসংক্ষেপ

এই সেকশনে ডেটাসেট এক্সপ্লোর, প্রিপারেশন, রিগ্রেশন মডেল ফিটিং, পারফরম্যান্স অसेসমেন্ট, শর্টকামিং ডিটেকশন এবং ফিক্সিং শিখলাম।

  1. পাইথন ব্যবহার করে স্টপওয়াচ তৈরি করা

  2. পাইথনে WhatsApp অটোমেশন (WhatsApp using Python)

  3. পাইথনে PyTorch ব্যবহার করে লিনিয়ার রিগ্রেশন

  4. পাইথনে cx_Freeze ব্যবহার করে এক্সিকিউটেবল বানানো