> For the complete documentation index, see [llms.txt](https://ml.howtocode.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ml.howtocode.dev/ml_intro.md).

# মেশিন লার্নিং পরিচিতি

## মেশিন লার্নিং কী?

মেশিন লার্নিং শুরু করার আগে কয়েকটি কেতাবি সংজ্ঞা দেখা যাক। এই ব্যাপারে **Arthur Samuel** বলেন,

> Field of study that gives computers the ability to learn without being explicitely programmed.

অর্থাৎ কিনা, কম্পিউটারের যদি এমন কোন অলৌকিক ক্ষমতা থাকে যার জন্য সে যেকোন কিছু আগে থেকে ঐ বিষয়ক প্রোগ্রাম লেখা ছাড়াই **শিখতে** পারে।

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

**Tom Michel** এর মতে,

> A computer program is said to learn from experience **E** with respect to some class of tasks **T** and performance measure **P**, if its performance at tasks in **T**, as measured by **P**, improves with experience **E**.

হঠাৎ করে সংজ্ঞাটা দেখলে একটু সমস্যা হতে পারে, তাই একে একটা উদাহরণের মাধ্যমে বলা যেতে পারে,

ধরি, আমি এমন একটি মেশিন তৈরি করলাম যে দাবা (Chess) খেলতে পারে, তাহলে নিচের প্যারামিটারগুলোকে আমরা এভাবে লিখতে পারি,

**E** = ধরি মেশিনটা ৫০০ টা কম্প্লিট সেট দাবা খেলল

**T** = দাবা খেলাটাই মেশিনের **Task**

**P** = মেশিন খেলায় জিতল না হারল

**সংজ্ঞানুযায়ী,**

যদি মেশিনের খেলার সংখ্যার বৃদ্ধির (E) পাশাপাশি তার জেতার হার বেড়ে যায় (P) তাহলে বুঝতে হবে সেই মেশিন আসলেই শিখছে।

আর এটা Explicitly প্রোগ্রামের মাধ্যমে করা নিতান্তই অসম্ভব।

## ডেটা সায়েন্স, আর্টিফিশিয়াল ইন্টেলিজেন্স ও মেশিন লার্নিং

#### ডেটা সায়েন্স (Data Science)

ডেটা সায়েন্স আসলে পরিসংখ্যান, মেশিন লার্নিং ও ডেটা ভিজুয়ালাইজেশন এর সমষ্টি। একজন ডেটা সায়েন্টিস্টের কাজ হচ্ছে ডেটাসেট এর মাধ্যমে কিছু প্রশ্নের উত্তর খোঁজা। [বিস্তারিত](http://www.forbes.com/sites/danwoods/2012/03/08/hilary-mason-what-is-a-data-scientist/#2ab9b1f765d5)।

#### আর্টিফিশিয়াল ইন্টেলিজেন্স

আর্টিফিশিয়াল ইন্টেলিজেন্স কিছু সমস্যা ও সমস্যা সমাধানের পদ্ধতির সমষ্টি যেগুলো ব্যবহার করে জটিল সমস্যা সমাধান করা যায়। কম্পিউটারকে তাস, দাবা খেলা শেখানো, ন্যাচারাল ল্যাঙ্গুয়েজ ট্রান্সলেশন, সিকিউরিটি স্ট্র্যাটেজি ম্যানেজমেন্ট AI অন্তর্গত। AI এর প্রবলেম যে বাস্তব ডেটাসেট বেজড হতে হবে এমন কোন কথা নাই, থিওরিটিক্যাল হতে পারে।

#### মেশিন লার্নিং

মেশিন লার্নিং আর্টিফিশিয়াল ইন্টেলিজেন্সের একটা বিভাগ যেখানে ইন্টেলিজেন্ট সিস্টেম তৈরি করা হয় ডেটাসেট কিংবা ইন্টারঅ্যাক্টিভ এক্সপেরিয়েন্সের মাধ্যমে। মেশিন লার্নিং টেকনোলজি Cybersecurity, Bioinformatics, Natural Language Processing, Computer Vision, Robotics ছাড়াও প্রচুর ক্ষেত্রে ব্যবহার করা হচ্ছে।

Machine Learning এর সবচেয়ে বেসিক কাজ হল ডেটা ক্ল্যাসিফিকেশন, যেমন একটা ই-মেইল বা ওয়েবসাইটের কমেন্ট স্প্যাম কিনা তা চেক করা। বর্তমানে Deep Learning বা Deep Network এর উপরে প্রচুর রিসার্চ চলছে, মূলত Convolution Neural Network এসব ক্ষেত্রে ব্যবহার করা হয়।

বর্তমানে ইন্ডাস্ট্রিয়াল লেভেলে মেশিন লার্নিং অত্যন্ত গুরুত্বপূর্ণ একটা বিষয়। কিছু না কিছু মেশিন লার্নিং মেথডলজি জানা সকলেরই উচিৎ। মেশিন লার্নিংয়ের বেশ কিছু জিনিসই ডেটা সায়েন্সের সাথে ওভারল্যাপ করবে, কিন্তু মেশিন লার্নিংয়ের মূল টার্গেট হল প্রেডিক্টিভ মডেল বিল্ড করা।

#### একনজরে

অর্থাৎ, AI ইন্টেলিজেন্ট মেশিন তৈরিতে সাহায্য করে, ML হল AI এর সাবফিল্ড যেটা মেশিনকে কোন কিছু শিখতে সাহায্য করে এবং সর্বশেষ ডেটা সায়েন্স লার্নিং অ্যালগরিদম বেজড মেশিনকে সাহায্য করে ডেটা প্যাটার্ন বের করতে যা সে পরবর্তী কাজে ব্যবহার করতে পারবে।

Data Science, ML ও AI কে প্রায়ই একই জিনিস মনে হবে কারণ এগুলার মধ্যে পার্থক্য খুবই অল্প। তবে ডেটা সায়েন্স সম্পর্কে একটা প্রচলিত কৌতুক হল,

> একজন ডেটা সায়েন্টিস্টের কম্পিউটার জ্ঞান একজন পরিসংখ্যানবিদের চেয়ে বেশি এবং তার পরিসংখ্যান জ্ঞান একজন কম্পিউটার সায়েন্টিস্টের চেয়ে বেশি।

## লার্নিং অ্যালগরিদম এর প্রকারভেদ

### সুপারভাইজড লার্নিং (মেশিন কে শেখানো)

প্রথমে মেশিনকে শেখাবেন, তারপর তার শিক্ষাকে কাজে লাগাবেন

### আনসুপারভাইজড লার্নিং (মেশিন নিজে নিজেই কিছু করা শিখবে)

মেশিন নিজে নিজেই কিছু করা শিখবে তারপর সেই শিক্ষা কাজে লাগিয়ে ডেটা স্ট্রাকচার ও প্যাটার্ন বুঝবে যেটা কিনা আপনিও বোঝেন না

## সুপারভাইজড লার্নিং (পরিচিতি)

### Regression

ML এর সবচেয়ে পরিচিত সমস্যা নিয়ে আলোচনা শুরু করা যাক। ধরুন আমার কাছে কিছু ডেটা আছে, ঘরের সাইজ ও তার দরদাম।

এই ডেটাসেট আমি যদি প্লট করি তাহলে নিচের মত একটি গ্রাফ দেখতে পাব।

#### ডেটাসেট:

![house](http://i.imgur.com/WJIiEMq.png)

> এই সমস্যার ছবি নেওয়া হয়েছে Andrew Ng এর মেশিন লার্নিং কোর্সের রিসোর্স থেকে। সরাসরি ব্যবহার করা হল।

#### সমস্যা:

উপর্যুক্ত ডেটাসেট দিয়ে আমাকে বের করতে বলা হল,

> * যদি তোমার বন্ধুর বাড়ির সাইজ 750 square feet হয়, তাহলে দাম কত?

#### সমাধান:

আমি যদি এমন একটা ইক্যুয়েশন বের করতে পারি যেটাতে Area বসালে Corresponding প্রাইস পাওয়া যায়, তার মানে

`y = f(x)`

বা,

`Price = f (Area)`

তার মানে আমাদের বের করতে হবে f() ফাংশনটা আসলে কী? আমি এখানে বলব না কীভাবে f() বের করতে হবে।

### সমস্যা থেকে যেসব তথ্য আমরা পাই

* এখানে আমরা আমাদের অ্যলগরিদমকে একটা ডেটাসেট দিচ্ছি যেখানে 'সঠিক উত্তর' দেওয়া হয়েছে। (গ্রাফ থেকে)
* তার মানে আমরা নির্দিষ্ট সাইজের বাড়ির আসল দাম জানি
  * এই ডেটা আমরা অ্যালগরিদমে ফিড করার মাধ্যমে ওকে শেখাতে পারি যে এই সাইজের বাড়ির দাম হয় এত। একে Training Data বলা হয়।
  * এবার এই Training Data এর উপর ভিত্তি করে আমরা এমন সাইজের বাড়ির দাম জানতে পারি যে সাইজটি Training Data তে ছিল না। যেমন আমি যদি 3000 sq ft এর বাড়ির দাম জানতে চাই সেটা কিন্তু ডেটাসেট এ নেই! কিন্তু আমার তৈরি করা মডেল আগের Experience এর উপর ভিত্তি করে 3000 sq ft বাড়ির দাম অনুমান (Prediction) করতে পারে

**এই সমস্যাটি Regression সমস্যার অন্তর্গত**

কারণ, পূর্বের ব্যবহৃত মান থেকে আমরা নতুন একটি মান অনুমান করার চেষ্টা করছি। পরবর্তী উদাহরণ দেখলে পরিষ্কার হবে।

### Classification

এবার আরেক ধরণের ডেটাসেট দেখা যাক, যেখানে টিউমারের আকারের সাথে সাথে বলা আছে ঐ আকারের টিউমারটি Deadly, Malignant বা প্রাণঘাতী কিনা।

![tumor](http://i.imgur.com/6k27PZw.png)

এখানে 1 কে হ্যাঁ হিসেবে ধরা হয়েছে এবং 0 কে না হিসেবে।

সাধারণ জ্ঞান অনুসারে বলা যায় যে টিউমারের যদি আকারে বড় হয় তবে তার প্রাণঘাতী হওয়ার সম্ভাবনা বেড়ে যায়।

কিন্তু ডেটাসেট থেকে দেখা যাচ্ছে যে কিছু কিছু টিউমার আকারে বড় হলেও প্রাণঘাতী নাও হতে পারে। আবার কিছু কিছু ছোট টিউমারও প্রাণঘাতী হতে পারে

**সমস্যা:** আমরা এমন একটি প্রেডিক্টিভ মডেল তৈরি করতে পারি যে বলতে পারবে টিউমার প্রাণঘাতী কিনা (আকারের উপর ভিত্তি করে)

**ডেটাসেট থেকে যেসব তথ্য পাওয়া যায়**

* এটা একটা Classification প্রবলেম, কেননা আমরা ইনপুটে দিচ্ছি Tumor Size এবং আউটপুটে Yes/No টাইপ উত্তর চাচ্ছি। কোন মান চাচ্ছি না, যেমন বাড়ির দামের ক্ষেত্রে আমরা একটা মান চাচ্ছিলাম, Yes/No টাইপ উত্তর গ্রহণযোগ্য ছিল না। তাই ওটা রিগ্রেশন প্রবলেম
* ডেটাকে দুইভাগে ভাগ করতে হবে, মাঝখানে কিছুই থাকবে না, 1 কে Malignant এবং 0 কে Not Malignant হিসেবে আমরা ট্যাগ দিতে পারি।
* এটা যদি ভিন্নভাবে প্লট করা যায়

![tumor2](http://i.imgur.com/eDfRcbM.png)

* এখানে আমরা একটা মাত্র প্যারামিটার (Size of Tumor) ব্যবহার করে বলার চেষ্টা করছি সেটা প্রাণঘাতী কি না? আসলে একধরণের ইনপুট থাকবে এমন কোন কথা নাই, আরও অনেক ইনপুট থাকতে পারে। যেমন Age vs Tumor size

**ইনপুট প্যারামিটার যদি আরও থাকে**

![tumorage](http://i.imgur.com/xy8dn0f.png)

**সমাধানের উপায়?**

আমরা একটা স্ট্রেট লাইন দিয়ে এই গ্রুপ দুইটাকে আলাদা করতে পারি। যেটা নিয়ে পরে আলোচনা করা হবে।

পরবর্তীতে আমরা Unsupervised Learning এর পাশাপাশি প্রয়োজনীয় পাইথন সফটওয়্যার প্যাকেজ ইন্সটলেশন দেখব।
