লিনিয়ার রিগ্রেশন (Linear Regression) ডেটা বিশ্লেষণের একটি গুরুত্বপূর্ণ পদ্ধতি, যা আপনাকে দুটি ভেরিয়েবলের মধ্যে সম্পর্ক বুঝতে সাহায্য করে। নিচের বিষয়গুলো শুরুর দিকের শিক্ষার্থীদের জন্য সহজভাবে উদাহরণসহ আলোচনা করা হলো:
লিনিয়ার রিগ্রেশনের পরিচিতি (Linear Regression)
লিনিয়ার রিগ্রেশন হলো একটি পরিসংখ্যানগত পদ্ধতি যা দুটি ভেরিয়েবলের মধ্যে রৈখিক (linear) সম্পর্ক খুঁজে বের করতে সাহায্য করে। এই দুটি ভেরিয়েবলের একটিকে বলা হয় স্বাধীন ভেরিয়েবল (independent variable) বা বৈশিষ্ট্য (feature) এবং অন্যটিকে বলা হয় নির্ভরশীল ভেরিয়েবল (dependent variable) বা লক্ষ্য (target)। সহজভাবে বলতে গেলে, আমরা একটি স্বাধীন ভেরিয়েবলের উপর ভিত্তি করে নির্ভরশীল ভেরিয়েবলের মান অনুমান (predict) করার চেষ্টা করি।
উদাহরণ: ধরুন, আপনি একজন শিক্ষার্থীর পড়াশোনার ঘন্টার (স্বাধীন ভেরিয়েবল) উপর ভিত্তি করে তার পরীক্ষার নম্বরের (নির্ভরশীল ভেরিয়েবল) সম্পর্ক জানতে চান। লিনিয়ার রিগ্রেশন ব্যবহার করে আপনি এই দুটি ভেরিয়েবলের মধ্যে একটি সরলরেখা খুঁজে বের করতে পারবেন, যা আপনাকে বলতে পারবে যে পড়াশোনার ঘন্টা বাড়লে পরীক্ষার নম্বরে কী ধরনের পরিবর্তন আসে।
আবার ধরুন, আপনি একজন রিয়েল এস্টেট এজেন্ট। আপনি জানতে চান যে একটি বাড়ির আকার (বর্গফুট) তার দামকে কীভাবে প্রভাবিত করে। এখানে, বাড়ির আকার হলো আপনার স্বাধীন ভেরিয়েবল () এবং দাম হলো আপনার নির্ভরশীল ভেরিয়েবল ()। লিনিয়ার রিগ্রেশন ব্যবহার করে আপনি এই দুটি ভেরিয়েবলের মধ্যে একটি সরলরেখা খুঁজে বের করতে পারবেন, যা আপনাকে বলতে পারবে যে বাড়ির আকার বাড়লে দাম কেমন পরিবর্তিত হতে পারে।
লিস্ট স্কোয়ার ব্যবহার করে ডেটার সাথে একটি রেখা ফিট করা (Fitting a Line to Data Using Least Squares)
লিনিয়ার রিগ্রেশনের মূল লক্ষ্য হলো ডেটা পয়েন্টগুলোর মধ্যে দিয়ে এমন একটি সরলরেখা খুঁজে বের করা যা ডেটা পয়েন্টগুলোর সবচেয়ে কাছাকাছি থাকে। এই রেখাটিকে “সেরা ফিট রেখা” (best-fit line) বলা হয়। লিস্ট স্কোয়ার (Least Squares) পদ্ধতি এই সেরা ফিট রেখাটি খুঁজে বের করার জন্য ব্যবহৃত হয়।
লিস্ট স্কোয়ার পদ্ধতির মূল ধারণা হলো, রেখা থেকে প্রতিটি ডেটা পয়েন্টের উল্লম্ব দূরত্বগুলোর (এগুলোকে রেসিডিউয়াল বা এরর বলা হয়) বর্গের সমষ্টি (sum of squared errors) সর্বনিম্ন করা। সহজ কথায়, আমরা এমন একটি রেখা খুঁজি যেখানে ডেটা পয়েন্টগুলো থেকে রেখার গড় দূরত্ব সবচেয়ে কম হয়। এই এরর বর্গের সমষ্টিকে সর্বনিম্ন করার মাধ্যমে আমরা এমন (ঢাল) এবং (ছেদক) পাই, যা আমাদের সেরা ফিট রেখা তৈরি করে।
উদাহরণ: আপনার কাছে কিছু ডেটা পয়েন্ট আছে: (১, ২), (২, ৩), (৩, ৪)। আপনি একটি সরলরেখা খুঁজে বের করতে চান যা এই পয়েন্টগুলোর সবচেয়ে কাছাকাছি থাকে। লিস্ট স্কোয়ার পদ্ধতি ব্যবহার করে, আমরা (ঢাল) এবং (ছেদক) এর এমন মান খুঁজে পাই যা রেখা থেকে প্রতিটি ডেটা পয়েন্টের দূরত্বের বর্গের সমষ্টিকে সর্বনিম্ন করে।
ধরা যাক, আপনার কাছে কিছু বাড়ির আকার এবং তাদের দামের ডেটা আছে:
বাড়ির আকার (বর্গফুট) | দাম (হাজার ডলারে) |
৮০০ | ১২০ |
১০০০ | ১৪০ |
১২০০ | ১৭০ |
১৪০০ | ১৯০ |
আমরা এই ডেটা ব্যবহার করে পাইথনে একটি লিনিয়ার রিগ্রেশন মডেল তৈরি করতে পারি।
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import numpy as np from sklearn.linear_model import LinearRegression import matplotlib.pyplot as plt # ডেটা sizes = np.array([800, 1000, 1200, 1400]).reshape(-1, 1) # স্বাধীন ভেরিয়েবল (X) prices = np.array([120, 140, 170, 190]) # নির্ভরশীল ভেরিয়েবল (Y) # লিনিয়ার রিগ্রেশন মডেল তৈরি model = LinearRegression() model.fit(sizes, prices) # মডেলকে ডেটার সাথে ফিট করা # ঢাল (Slope) এবং ছেদক (Intercept) slope = model.coef_[0] intercept = model.intercept_ print(f"ঢাল (Slope): {slope:.2f}") print(f"ছেদক (Intercept): {intercept:.2f}") # সেরা ফিট রেখা প্লট করা plt.scatter(sizes, prices, color='blue', label='বাস্তব ডেটা') plt.plot(sizes, model.predict(sizes), color='red', label='সেরা ফিট রেখা') plt.xlabel('বাড়ির আকার (বর্গফুট)') plt.ylabel('দাম (হাজার ডলারে)') plt.title('বাড়ির আকার বনাম দাম') plt.legend() plt.grid(True) plt.show() # নতুন বাড়ির দাম অনুমান new_size = np.array([[1100]]) # 1100 বর্গফুটের একটি বাড়ির দাম অনুমান predicted_price = model.predict(new_size) print(f"1100 বর্গফুটের একটি বাড়ির আনুমানিক দাম: {predicted_price[0]:.2f} হাজার ডলার") |
এই কোডটি sizes
এবং prices
ডেটার উপর ভিত্তি করে একটি লিনিয়ার রিগ্রেশন মডেল তৈরি করে। model.fit(sizes, prices)
লাইনটি লিস্ট স্কোয়ার পদ্ধতি ব্যবহার করে সেরা ফিট রেখা খুঁজে বের করে।
ঢাল এবং ছেদক বোঝা (Slope and Intercept)
একটি সরলরেখার সমীকরণ সাধারণত আকারে লেখা হয়, যেখানে:
- : নির্ভরশীল ভেরিয়েবল (আমরা যা অনুমান করতে চাই, যেমন – বাড়ির দাম)।
- : স্বাধীন ভেরিয়েবল (যা আমরা জানি, যেমন – বাড়ির আকার)।
- : ঢাল (Slope)। এটি নির্দেশ করে যে স্বাধীন ভেরিয়েবল এর এক ইউনিট পরিবর্তনের জন্য নির্ভরশীল ভেরিয়েবল তে কতটুকু পরিবর্তন হয়।
- যদি ধনাত্মক হয়, তাহলে বাড়লে ও বাড়ে (যেমন, বাড়ির আকার বাড়লে দামও বাড়ে)।
- যদি ঋণাত্মক হয়, তাহলে বাড়লে কমে (যেমন, গাড়ির বয়স বাড়লে তার মূল্য কমে)।
- : ছেদক (Intercept)। এটি অক্ষের উপর রেখাটি কোথায় হলে ছেদ করে তা নির্দেশ করে। অর্থাৎ, যখন স্বাধীন ভেরিয়েবল এর মান ০ হয়, তখন নির্ভরশীল ভেরিয়েবল এর মান কত হবে।
উদাহরণ (পূর্বের কোডের আউটপুট ব্যবহার করে): যদি আমাদের কোডের আউটপুট আসে:
- ঢাল (Slope): 0.12
- ছেদক (Intercept): 28.57
এর অর্থ হলো, আমাদের মডেলের সমীকরণ প্রায়:
- ঢাল (): এর অর্থ হলো, বাড়ির আকার যদি এক বর্গফুট বৃদ্ধি পায়, তাহলে বাড়ির দাম গড়ে হাজার ডলার (অর্থাৎ $120) বৃদ্ধি পাবে।
- ছেদক (): এর অর্থ হলো, যদি বাড়ির আকার ০ বর্গফুট হয় (যা বাস্তবসম্মত নয়, কিন্তু তাত্ত্বিকভাবে), তাহলে তার দাম হবে হাজার ডলার। ছেদক প্রায়শই মডেলের সূচনা বিন্দু বা বেসলাইন মূল্য নির্দেশ করে।
রিগ্রেশনে ওভারফিটিং কী (Overfitting in Regression)
ওভারফিটিং হলো এমন একটি সমস্যা যখন একটি মডেল ট্রেনিং ডেটার সাথে খুব ভালোভাবে ফিট করে কিন্তু নতুন বা unseen ডেটার উপর সঠিকভাবে কাজ করতে পারে না। সহজভাবে বলতে গেলে, মডেলটি ট্রেনিং ডেটার প্যাটার্নগুলো মুখস্থ করে ফেলে, কিন্তু ডেটার মধ্যেকার আসল সাধারণ সম্পর্কটি শিখতে পারে না। এর ফলে, যখন মডেলটিকে নতুন ডেটা দেওয়া হয়, তখন এটি খারাপভাবে পারফর্ম করে।
বাস্তব পৃথিবীর উদাহরণ: ধরুন, আপনি একজন শিক্ষক। আপনার ছাত্রদেরকে একটি নির্দিষ্ট সেটের প্রশ্ন দিয়ে একটি পরীক্ষা নিলেন। একটি ছাত্র শুধু সেই নির্দিষ্ট প্রশ্নের উত্তরগুলো মুখস্থ করলো, কিন্তু তার পেছনের ধারণাগুলো বুঝতে পারলো না।
- ট্রেনিং ডেটা: সেই নির্দিষ্ট সেটের প্রশ্নগুলো। ছাত্রটি এই প্রশ্নগুলোর উত্তর খুব ভালো পারলো।
- নতুন ডেটা (টেস্ট ডেটা): আপনি তাকে একই বিষয় থেকে, কিন্তু ভিন্ন শব্দে কিছু নতুন প্রশ্ন দিলেন। যেহেতু সে শুধু মুখস্থ করেছিলো, তাই এই নতুন প্রশ্নগুলোর উত্তর সে দিতে পারলো না।
এখানে ছাত্রটি “ওভারফিট” করেছে ট্রেনিং ডেটার উপর। সে ডেটার ভেতরের মূল প্যাটার্ন বা নিয়মগুলো শেখেনি, বরং কেবল নির্দিষ্ট উদাহরণগুলো মুখস্থ করেছে।
ওভারফিটিং প্রতিরোধের উপায়:
- আরও ডেটা যোগ করা: যত বেশি ডেটা থাকবে, মডেল তত ভালোভাবে ডেটার সাধারণ প্যাটার্ন শিখতে পারবে।
- ফিচার নির্বাচন (Feature Selection): অপ্রয়োজনীয় বা কম গুরুত্বপূর্ণ ফিচার বাদ দেওয়া।
- রেগুলারাইজেশন (Regularization): মডেলের জটিলতা কমানোর জন্য এক ধরনের কৌশল। এটি মডেলের ঢালকে (coefficients) খুব বড় হওয়া থেকে রক্ষা করে।
- ক্রস-ভ্যালিডেশন (Cross-Validation): মডেলের পারফরম্যান্স মূল্যায়ন করার জন্য একটি শক্তিশালী কৌশল, যা ওভারফিটিং সনাক্ত করতে সাহায্য করে।
এই বিষয়গুলো লিনিয়ার রিগ্রেশনের প্রাথমিক ধারণাগুলো বুঝতে এবং বাস্তব পরিস্থিতিতে এর প্রয়োগ দেখতে সাহায্য করবে। আপনার যদি আরও বিস্তারিত জানতে হয় বা কোনো নির্দিষ্ট অংশে আরও ব্যাখ্যা প্রয়োজন হয়, তাহলে জিজ্ঞাসা করতে পারেন।
Leave a Comment