লিনিয়ার রিগ্রেশন পর্ব-২ ও গ্রেডিয়েন্ট ডিসেন্ট
আমরা গত পর্বে লিনিয়ার রিগ্রেশনের বেসিক জানার পাশাপাশি কস্ট ফাংশন ক্যালকুলেশন সম্পর্কে কিছুটা জেনেছিলাম। আজকে আমরা নিচের বিষয়গুলো সম্পর্কে জানার চেষ্টা করব।
- কস্ট ফাংশন ইনটুইশন - ২
- এর গ্রাফ
- গ্রেডিয়েন্ট ডিসেন্ট (Gradient Descent) অপ্টিমাইজেশন
এতক্ষণে লিনিয়ার মডেল সম্পর্কে ভালই ধারণা হয়েছে আশা করি, সেটা যদি হয়ে থাকে আমরা আরেকবার ঘুরে আসি কস্ট ফাংশনের কাছ থেকে।
আমাদের কাজ ছিল কস্ট মিনিমাইজ করা। সকল ইঞ্জিনিয়ারিংয়ের মূল লক্ষ্য তাই। যত কম রিসোর্স ব্যবহার করে যত ভাল ফলাফল পাওয়া যায়। তেমনি মেশিন লার্নিংয়ের জন্য আমাদের মূল লক্ষ্য থাকবে কতটা নির্ভুল প্রেডিকশন করা যায়।
আমরা যদি কতগুলো মডেলের কস্ট ফাংশন এর রেজাল্ট স্ক্যাটার প্লট করি তাহলে আমরা গ্রাফ থেকে সহজেই ট্র্যাক করতে পারব সবচেয়ে কম এরর কোন প্যারামিটারের জন্য।
সবকিছু বাদ দিয়ে নতুন করে একটা জিনিস দেখা যাক, নিচের ডেটাসেট এর কথা চিন্তা করা করি,
আয় (X) | ব্যয় (Y) |
10 | 5 |
100 | 50 |
1000 | 500 |
গ্রাফ
এই ডেটাসেটের গ্রাফ এইরকম,

graph
এটা প্রেডিক্ট করার জন্য আমরা এই মডেল ব্যবহার করব :
বিভিন্ন
এর মানের জন্য আমরা
প্লট করব। মানে প্রতি প্রেডিকশনে কস্ট ক্যালকুলেট করব। তারপর দেখব
এর কোন মানের জন্য
এর মান সর্বনিম্ন আসে।
তাহলে প্লট আসবে এরকম,

hypo1
কস্ট ক্যালকুলেশন:
তাহলে প্লট,

hypo2
কস্ট ক্যালকুলেশন:
তাহলে প্লট,

hypo3
কস্ট ক্যালকুলেশন:

hypo4
কস্ট ক্যালকুলেশন:

hypo5
কস্ট ক্যালকুলেশন:

hypo6
কস্ট ক্যালকুলেশন:

hypo7
কস্ট ক্যালকুলেশন:
থাক আর বাড়ালাম না, এখন আমরা প্রতি থিটার মানের জন্য যতগুলো
এর মান পেয়েছি সেগুলোর স্ক্যাটার প্লট তৈরি করি,

costfunc
J = [26936.0, 15151.5, 6734.0, 1683.5, 0, 1683.5, 6734.0]
theta = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7]
colors = ['blue', 'black', 'orange', 'pink', 'magenta', 'brown', 'aqua']
for i in range(len(J)):
lbl = 'Hypothesis H = %0.1f * x' % theta[i]
plt.scatter(x[i], J[i], linewidth=5, color=colors[i], label=lbl)
plt.legend(loc='best')
plt.title('Cost Function Graph')
plt.xlabel('Theta')
plt.ylabel('J (theta)')
plt.show()
গ্রাফ থেকে কী বুঝলাম?
এর জন্য কস্ট সবেচেয়ে কম। মানে প্রেডিকশন সবেচেয়ে বেটার যখন থিটার মান
। এভাবে প্রতিটা মডেলের কস্ট ফাংশন থেকে আমরা ধারণা করতে পারি মডেলের পার্ফর্মেন্স কতটা ভাল।
তাহলে সেটার প্লট হতে পারত এরকম,

contourplot
আমরা অবশেষে কস্ট ফাংশন সম্পর্কে অনেক কিছু জানতে পারলাম। এখন আমরা দেখব Cost Function Minimization Using Gradient Descent।
ক্যালকুলাস মনে আছে? ডিফারেনসিয়েশন? সেটাই আমাদের এখন কিছুটা কাজে আসবে। যদি মনে না থাকে তাহলে আগে একটু ডিফারেনসিয়েশন দেখা যাক।
কোন বিন্দুতে কোন ফাংশনের ডেরিভেটিভ মানে হল সেই বিন্দুতে ঐ ফাংশনের স্পর্শকের ঢাল। ধরি,
যেকোন একটি ফাংশন, এখন আমরা তার
বিন্দুতে যে স্পর্শক, তার ঢাল (
অক্ষের সাথে রেখাটি কত ডিগ্রি কোণ উৎপন্ন করে) জানতে চাই। তাহলে আমরা
কে স্বাধীন চলক
এর সাপেক্ষে ডিফারেনসিয়েট করব। ডিফারেনসিয়েট অপারেটর টা লেখে এইভাবে
বা
।
নিচের ছবিটা দেখা যাক,

diff

slp
ঢালের সূত্র হচ্ছে ,
ঢালের মান চার ধরণের, নন-জিরো পজিটিভ, নেগেটিভ, জিরো এবং অসংজ্ঞায়িত। এই মানের ভিত্তিতে আমরা ঢালকে ক্লাসিফাই করতে পারি।
- ধনাত্মক ঢাল (Positive Slope)
- যে ঢালঅক্ষের সাথে সূক্ষ্মকোণ উৎপন্ন করে সেটাকে ধনাত্মক ঢাল বলে। ধনাত্মক ঢাল আসলে বলে তার দিকে গেলেএর মান বাড়বে।