Arefin Anwar
মেশিন লার্নিংয়ে “লিনিয়ার রিগ্রেশন” ও “লজিস্টিক রিগ্রেশন” খুবই গুরুত্বপূর্ণ এবং সহজবোধ্য অ্যালগরিদম। এগুলো বাস্তব জীবনের সমস্যাগুলি সমাধানে ব্যবহৃত হয়। শুরুতেই আমরা কিছু সহজ শব্দের অর্থ বুঝে নিই,
লিনিয়ার রিগ্রেশন মডেলে মুলত একটি দ্বিমাত্রিক স্থানাঙ্কে ডেটার কাছাকাছি একটি সরলরেখা কল্পনা।

যেমন, উপরের চিত্রে সেলারি ও এক্সপেরিয়েন্স এর মধ্যে সম্পরক দেখানো হল। এখানে সহজে সেলারি বনাম এক্সপেরিয়েন্স এর গ্রাফ আকা যায়। খেয়াল করে দেখবে যে এখানে ডেটা পয়েন্ট (সবুজ) গুলোর মধ্য দিয়ে একটি সরলরেখা আকা যায়। এই সরলরেখা এর নিশ্চয় একটা সমীকরণ আছে। এই সমীকরণে যখন এক্সপেরিয়েন্স দেওয়া হবে তখন সেই সমীকরণ থেকে ১ টি মান পাওয়া যাবে যা হল সেলারি। এভাবে সহজে সরলরেখার সমীকরণ ব্যাবহার করে এক্সপেরিয়েন্স এর জন্য সেলারি বের করতে পারবে আমাদের মডেল। এখানে শুধু ১০ বছর পর্যন্ত এক্সপেরিয়েন্স দেওয়া আছে, কিন্তু এই মডেল যেহেতু সমীকরণ পেয়ে গিয়েছে তাই এখানে তুমি ২০ বছর এক্সপেরিয়েন্স দিলেও মডেল তোমাকে সেলারি দেখাবে! কিন্তু তুমি তো তোমার ডাটাতে তা দাও নি! তারপর তো মডেল তোমাকে আনসার দিবে! এটাই মেশিন লার্নিং! কখনই তুমি সব ডাটা জানবে না, কিন্তু মডেল সীমিত ডাটা থেকে প্যাটার্ন খুজে, তা থেকে তোমার প্রশ্নের উত্তর দিতে পারবে! প্যাটার্ন খুজে বের করাই মেশিন লার্নিং! প্রকৃতি তে অনেক প্যাটার্ন আছে কিন্তু, মানুষের পক্ষে তা মনে রাখা সম্ভভ না! বরং মানুষ কম্পিউটারকে প্যাটার্ন খুজা সিখিয়ে দিয়েছে, যার জন্য বর্তমান সময়ে এআই মানুষের মতো অনেক কিছু চিন্তা করতে পারে ও উত্তর দিতে পারে।
এখন মনে প্রশ্ন জাগতেই পারে, মডেল কি সর্বদা ঠিক? উত্তর হচ্ছে না! না! না!। কোন মডেলই ১০০% সঠিক না। কিছু না কিছু ভুল সে করবেই কিন্তু মডেল ৯৮-৯৯% সঠিক হতে পারে! সবসময় ঠিক না হলেও বেশিরভাগ সময়ে মডেল সঠিক বা কাছাকাছি উত্তর দিতে পারে। যেমন আমরা এখনই যে উদাহরন দিলাম, সেলারি ও এক্সপেরিয়েন্স এর সেখানেও তো লাইন টি সব ডাটা পয়েন্ট দিত্যে যাইনি, বরং কাছ দিয়ে গিয়েছে। এই মডেল টির একুরেসি ৯৫% ধরা যাক, যেহেতু, এক্সপেরিয়েন্স বারলে, সেলারিও বারবে (যদিও এটির অবশ্যই বাতিক্রম রয়েছে)। অরথাক্ত, লিনিয়ার রিগ্রেশন মডেলে প্রদত্ত ডাটার উপর ভিক্তি করে একটি সরলরেখা কল্পনা করা হয়, যা হতে প্রদত্ত ডাটার বাইরেও ডাটা হতে আনসার প্রেডিক্ট করা যায়। এই লাইনটি যে আঁকে তাকেই লিনিয়ার রিগ্রেশন মডেল বলে।
এখন আরও প্রশ্ন আসতে পারে যে, লাইন টি কিভাবে ডাটা পয়েন্ট এর কাছে আকা হল? কিভাবেই বা লাইনটি ৯৫% একুরেসি আনল। উত্তর জানতে হলে আরেকটি বিষয় জানতে হবে। সেটি হচ্ছে কোস্ট ফাংশান। কোস্ট ফাংশান হচ্ছে মডেল কত ভাল রেজাল্ট দিছে তার পরিমাপক। কোস্ট ফাংশান যত কম হবে একুরেসি তত বারবে। এখন, কোস্ট ফাংশান নির্ধারিত হয় সঠিক উত্তর দেয়ার পার্সেন্টেজ এর উপর, যদি ১০ টা প্রশ্নের মধ্যে ৭ টা ঠিক করে মডেল তাহলে কোস্ট ফাংশান এর মান কম আসবে, যদি 3 টা ঠিক হয় তাহলে কোস্ট ফাংশন এর মান বেশি আসবে। মূলত কোস্ট ফাংশন হলো একটি গাণিতিক পদ্ধতি যা মডেলের প্রেডিকশন এবং আসল মানের মধ্যকার পার্থক্য মাপার জন্য ব্যবহৃত হয়। লিনিয়ার রিগ্রেশনে সবচেয়ে প্রচলিত কোস্ট ফাংশন হলো Mean Squared Error (MSE)। এটি প্রতিটি ডেটা পয়েন্টে প্রেডিকশনের ভুল (Error) বের করে, স্কোয়ার করে, এবং সবগুলোর গড় নির্ণয় করে।
এভাবে বিভিন্ন রেখার সমীকরণ বের করে মডেল ডাটা বশিয়ে দেখে কোনটিতে এরর সবচেয়ে কম আসে এবং সেই সমীকরণটাই সিলেক্ট করে।


উদাহরন হিসবে এটি,
m: রেখার ঢাল (slope), যা দেখায় এক্স এর প্রতি একক পরিবর্তনে y কতটা পরিবর্তিত হয়।
c: রেখার y-intercept, যা x=0x = 0x=0 অবস্থায় yyy এর মান নির্ধারণ করে।
x: ইনপুট ফিচার বা স্বাধীন চলক।
y: নির্ধারিত মান বা পূর্বাভাস।
রেখাটি ডেটার বিন্দুগুলির মধ্যে দিয়ে এমনভাবে যায় যাতে বিন্দুগুলি থেকে রেখার দূরত্বের গড় বর্গমূল (Mean Squared Error বা MSE) সর্বনিম্ন হয়।
[MSE: এই মেট্রিক দিয়ে বুঝি মডেল কতটা ভালো। যত কম তত বেশি একুরেসি ]
লিনিয়ার রিগ্রেশন একটি এমন পদ্ধতি যা ধারাবাহিক মান নির্ধারণে ব্যবহার হয়। উদাহরণস্বরূপ:
একটি বাড়ির আকার (স্কয়ার ফিট) দেখে তার দাম নির্ধারণ করতে চাই।
| বাড়ির আকার (স্কয়ার ফিট) | দাম (লক্ষ টাকা) |
| ১২০০ | ৫০ |
| ১৫০০ | ৬০ |
| ১৮০০ | ৭০ |
| ২০০০ | ৮০ |
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# ডেটা
X = np.array([1200, 1500, 1800, 2000]).reshape(-1, 1)
y = np.array([50, 60, 70, 80])
# মডেল
model = LinearRegression()
model.fit(X, y)
size = 1700
predicted_price = model.predict([[size]])[0]
print(f"১৭০০ স্কয়ার ফিট বাড়ির দাম হবে: {predicted_price:.2f} লক্ষ টাকা।")
# গ্রাফ
plt.scatter(X, y, color='blue', label='ডেটা পয়েন্ট')
plt.plot(X, model.predict(X), color='red', label='রিগ্রেশন লাইন')
plt.xlabel('বাড়ির আকার (স্কয়ার ফিট)')
plt.ylabel('দাম (লক্ষ টাকা)')
plt.legend()
plt.show()
]]>