> For the complete documentation index, see [llms.txt](https://raqueeb.gitbook.io/scikit-learn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://raqueeb.gitbook.io/scikit-learn/what-is-ml/ml-math3.md).

# অংকে মেশিন লার্নিং ৩, লিনিয়ার রিগ্রেশন

> &#x20;Life is ten percent what you experience and ninety percent how you respond to it.
>
> \
> ― Dorothy M. Neddermeyer

{% hint style="info" %}
এই চ্যাপ্টার না পড়েও পুরো বইটা বোঝা যাবে। না পড়তে চাইলে সমস্যা নেই।&#x20;
{% endhint %}

অংক ঝামেলার, আপনাদের মাথা খারাপ করতে চাই না শুরুতে।&#x20;

তবে, অভয় দিলে একটা কথা বলতে পারি। সত্যি বলতে - মেশিন লার্নিং এর সব কিছুই কিন্তু অংক নির্ভর। 'এন্ড টু এন্ড'। তবে মজার কথা হচ্ছে - মেশিন লার্নিং এর বিভিন্ন লাইব্রেরি এই কমপ্লেক্স ফর্মুলাগুলোকে ডেকে নিয়ে আসে যখন দরকার পড়ে। আর সে কারণেই এর ‘আন্ডারলাইন’ ভেতরের অংশের কম্প্লেক্সিটি জানার দরকার পড়েনা। এবং আমিও আপনাকে বারবার বলেছি শুরুতে অংক নয়। আমাদের এই বইয়ের মূল লক্ষ্য হচ্ছে ওপেন সোর্স মেশিন লার্নিং লাইব্রেরিগুলোকে ঠিকমতো ব্যবহার করতে পারাটা। ব্যবহার জানলে ওই অ্যালগরিদমগুলোর হৃদয় দেখার জন্য গিটহাবে ঢুঁ দেবো দরকার হলে। তবে এর পাশাপাশি অঙ্কের কিছু ছিটেফোঁটা থাকলে বেসিক মেশিন লার্নিং বুঝতে সুবিধা হবার কথা।

মেশিন লার্নিং এর বিভিন্ন অ্যালগরিদমগুলোর কিছু মডিউল (বিশেষ করে রিগ্রেশন) চেঁখে দেখতে সাইকিট লার্ন এর সোর্সকোডগুলো দেখতে গিয়ে মনে হয়েছে এর পুরোটা জুড়ে রয়েছে লিনিয়ার অ্যালজেব্রা। এটাই অনেকখানি দেখিয়েছে মেশিন লার্নিং এর পেছনের বিল্ডিং ব্লকগুলোকে। ভেক্টর স্পেসের বিভিন্ন বিন্দুগুলোর ভেতরে সম্পর্ক বের করতে জুড়ি নেই আমাদের এই  লিনিয়ার অ্যালজেব্রার। এর ব্যবহার হচ্ছিলো লাইন, বিভিন্ন প্লেনে, রোটেশনে আর জ্যামিতিতে তো আছেই। এর মধ্যে কেউ হয়তোবা চিন্তা করেছিলো একটা ডেটাসেটের ফিচার নিয়ে এই একই কাহিনী করতে। ওমা, সেটাও সম্ভব এই মেশিন লার্নিং এ।  আমাদের ডেটা যদি কন্টিনিউয়াস হয় তাহলে তো বেস্ট ফিট লাইন না হবার কোন সুযোগ নেই। কারণ, এর পেছনে রয়েছে লিনিয়ার অ্যালজেব্রা। সেটা কাজ করছে একই স্টাইলে এই মেশিন লার্নিং এ।&#x20;

আচ্ছা বলুন তো আমাদের আগের চ্যাপ্টারের ঝিঝি পোকা এবং তাপমাত্রার সম্পর্ক কি ধরনের? ঠিক বলেছেন 'লিনিয়ার'। মানে একটা বাড়লে আর একটা বাড়ে। এবং সেই বাড়ার ভঙ্গিটা হচ্ছে লিনিয়ার মানে কিছুটা সরল রেখার হিসেব থেকে। এর মানে হচ্ছে ঝিঝিপোকা বেশি ডাকে যখন তাপমাত্রা বাড়ে। পৃথিবীর বেশিরভাগ সমস্যা কিন্তু এই ধরনের। যেমন, আপনার বাসার স্কয়ার ফিট এর সাথে সেই বাসার দামের সম্পর্ক, মানে গুলশান এলাকায় একটা বাড়ির মোট স্কয়ার ফিট এর সাথে তার দামের একটা সম্পর্ক আছে। যত বেশি স্কয়ার ফিট কত দাম বেশি। আমার চাকরির অভিজ্ঞতার সাথে বেতন, দিনের আলো বাড়ার সাথে তাপমাত্রা, কোন কোম্পানির রিসার্চ অ্যান্ড ডেভেলপমেন্ট বাজেটের সাথে কোম্পানির গ্রোথ জিনিসগুলো অনেকটাই 'লিনিয়ার'। ডেটাগুলোকে প্লট করে লাইন টানলে সেটা আসে সরল রেখাতে।&#x20;

মেশিন লার্নিং এর এই কাজটা আমরা করতে চাই 'লিনিয়ার রিগ্রেশন' অ্যালগরিদম দিয়ে। একটা মডেলের টার্গেট ভ্যালু বের করতে তার অন্যান্য ইন্ডিপেন্ডেন্ট ভেরিয়েবলকে ব্যবহার করার পদ্ধতি হচ্ছে এ রিগ্রেশন। আমাদের এখানে টার্গেট ভ্যালু হচ্ছে তাপমাত্রা। এই তাপমাত্রা হচ্ছে ডিপেন্ডেন্ট ভ্যারিয়েবল মানে নির্ভরশীল চলক। এই টার্গেট ভেরিয়েবলের কারণেই ডিপেন্ডেন্ট কারণ এর ভ্যালু ওঠানামা নির্ভর করে বাকি ইন্ডিপেন্ডেন্ট ভ্যারিয়েবল মানে ঝিঁঝিঁ পোকার ডাক এর সংখ্যার উপর। সোজা কথায় আমাদের যেটা বের করা কথা, সেই তাপমাত্রা ভ্যারিয়েবল পুরোপুরি নির্ভরশীল ঝিঁঝিঁ পোকার ডাক এর ওপর।

তাহলে সংজ্ঞা কী দাঁড়াবে?&#x20;

{% hint style="info" %}
ইন্ডিপেন্ডেন্ট মানে অনির্ভরশীল ভ্যারিয়েবল ভ্যালুর পরিবর্তনের সাথে সাথে কিভাবে ডিপেন্ডেন্ট মানে নির্ভরশীল ভ্যারিয়েবল ভ্যালুর পরিবর্তন হয়, অর্থাৎ নির্ভরশীল এবং অনির্ভরশীল ভ্যারিয়েবলের মধ্যের সম্পর্কটা বের করার একটা পদ্ধতিই হলো লিনিয়ার রিগ্রেশন!&#x20;
{% endhint %}

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

এর মানে কিছুটা এমন - এই যে ঝিঝি পোকার ভিন্ন ভিন্ন ডাকের সংখ্যা এবং তাপমাত্রা যেগুলো আমরা পেয়েছি ফুঁপিমার ডায়েরি থেকে, সেখানে আমরা যদি ঝিঝি পোকার ডাকের সংখ্যা আর তাপমাত্রার মধ্যে একটা সম্পর্ক বের করে ফেলতে পারি, তাহলে সেই সম্পর্ক মানে ‘কোরিলেশন’ ব্যবহার করে নতুন একটা তাপমাত্রাকে বের করতে পারি। কোন নতুন ঝিঝি পোকার ডাকের সংখ্যা (আচ্ছা ধরি - ১৫ সেকেন্ডে ৩৪টা ডাক), সেটার ‘করেস্পন্ডিং’ তাপমাত্রা ধারণা করে প্রায় কাছাকাছি কিছু একটা বলে দিতে পারি। এর অর্থ হচ্ছে তাপমাত্রাটা একদম ঠিক না হলেও, খুব কাছাকাছি একটা তাপমাত্রার মান পাওয়া যাবে। আমরা ধারণা করি ব্যাপারটা আমাদের কাজের জন্য ঠিক আছে। এটুকু বুঝলেই আমি খুশি। কারণ, যেই ডাকের সংখ্যাটা ডেটাসেটে নেই (১৫ সেকেন্ডে ৩৪টা ডাক), সেটার তাপমাত্রাকে বের করার চেষ্টা করবো আমরা। সেটাই আমাদের ভাষায় প্রেডিকশন। ডিল?

{% hint style="info" %}
মনে আছে ঝিঝি পোকার ডাকের প্লটিং এর বিষয়টা? সেটাকে কিছুটা সরল রেখার মতো মনে হয়েছে। এর আগের চ্যাপ্টারে বলেছিলাম সরল রেখার ইকুয়েশনের কথা, মনে আছে তো?

y = mx + b
{% endhint %}

এখানে y হচ্ছে আমরা যেটাকে প্রেডিক্ট করতে চাচ্ছি। তাপমাত্রা। ‘ইকুয়ালস’ সাইনের পরের m হচ্ছে ঢাল বা স্লোপ, যেটা দিয়ে আমরা একটা লাইনের দিকটা বুঝতে পারি। এর আরেকটা মানে আছে। আমাদের গ্রাফ পেপারে এই জিনিসটা X এক্সিসের সাথে কত ডিগ্রী অ্যাঙ্গেল করে আছে সেটার উপর নির্ভর করে ব্যাপারটা। আর b হচ্ছে Y এক্সিসের কোন জায়গায় ইন্টারসেপ্ট করেছে সেটার ভ্যালু। সাধারণতঃ ওই লাইনটা Y এক্সিসে কোন কোন পয়েন্টের উপর দিয়ে গিয়েছে সেটার ভ্যালু। আগের চ্যাপ্টারের ঝিঁঝিঁ পোকার সোজা লাইনের দুটো শেষ বিন্দুর প্লট পয়েন্ট কি হবে? অংকে আমরা কী করেছি? দুই ডাইমেনশনাল গ্র্যাফে যেকোন বিন্দুর প্লট পয়েন্ট হচ্ছে (x, y)। সেখানে আমাদের দুটো পয়েন্ট। আচ্ছা, ধরে নিচ্ছি (x1, y1) এবং (x2, y2)। তাপমাত্রা Y এক্সিস আর পোকার ডাক X এক্সিসে।&#x20;

একটা ছবি দেখি।&#x20;

&#x20;

![y1 এবং y2, x1 এবং x2 এর মধ্যে পার্থক্যগুলোর ভাগ হচ্ছে m](/files/-LX4Q_IL6H91JQXlDbZH)

y = mx + b সমীকরণের প্রেডিক্টেড ভ্যালু হবে y। এর মানে yকে প্রেডিক্ট করবো আমরা।

তাহলে m আর b এর কি হবে?

m = স্লোপ = (y2-y1)/(x2-x1), মানে m = Y এক্সিসে পরিবর্তন / X এক্সিসে পরিবর্তন

এবং

b = y-ইন্টারসেপ্ট(কোথায় এই লাইনটা Y এক্সিসের উপর দিয়ে যায়?) = (x1y1 - x2y1)/(x1-x2)

m আর y-ইন্টারসেপ্টকে অনেক সময় পর্যায়ক্রমে 'গ্রেডিয়েন্ট' এবং 'বায়াস' বলি আমরা।&#x20;

উপরের হিসেবে অনুযায়ী - আমাদের কাছে দুটো বিন্দুর প্লট পয়েন্ট (x1, y1) এবং (x2, y2) থাকলে স্লোপ m পাওয়া যাবে না? একটা উদাহরন দেখি এখানে।&#x20;

y = 2/3x + 2, কেমন হবে ছবিটা? হিজিবিজি মনে হচ্ছে? শুরু করুন বাঁ দিক থেকে। বর্ডারগুলো আগে। &#x20;

![লাইনের সমীকরণ y = mx + b ](/files/-LX4Wc4_Ewc-0uP-lnCa)

চলুন সামনের চ্যাপ্টারে।&#x20;
