📋 বিষয়সূচী (Table of Contents)

01

Classification সমস্যা পরিচিতি

⏱ ১০ মিনিট  ·  Introduction to Classification Problems

গল্প দিয়ে শুরু করি 🎭

ধরুন, আপনি একজন ডাক্তার। একজন নতুন রোগী এলো। আপনি তার লক্ষণ দেখে বলতে হবে — "রোগী অসুস্থ নাকি সুস্থ?" এটাই হলো Classification — ডেটাকে নির্দিষ্ট শ্রেণীতে ভাগ করা।

🏷️ Classification কী?

Classification হলো একটি Machine Learning কাজ, যেখানে আমরা ডেটাকে আগে থেকে নির্ধারিত কিছু শ্রেণী (Class বা Category) -এর একটিতে ফেলি। যেমন: পাস/ফেল, Spam/Not Spam, রোগী/সুস্থ।

🤔 কেন Classification দরকার?

মানুষ যা হাতে হাতে যাচাই করে সিদ্ধান্ত নেয়, কম্পিউটার সেটা হাজার হাজার ডেটা দেখে অটোমেটিক করতে পারে — দ্রুত, নির্ভুল ও বড় স্কেলে।

📊 বাস্তব জীবনের Classification উদাহরণ

পরিস্থিতিInput (যা দেখা হয়)Class (শ্রেণী)
🎓 ছাত্রের রেজাল্টপড়ার ঘণ্টা, উপস্থিতিপাস / ফেল
📧 ইমেইলশব্দ, প্রেরকSpam / Not Spam
📱 কাস্টমারব্যবহারের ইতিহাসChurn / Stay
🏥 রোগীবয়স, লক্ষণরোগী / সুস্থ
🏦 ঋণ আবেদনআয়, ক্রেডিট স্কোরঅনুমোদিত / প্রত্যাখ্যাত

🧰 Classification করার অনেক উপায় আছে

Logistic Regression, Decision Tree, Random Forest, SVM — এগুলো সবই Classification Algorithm। আজ আমরা শিখবো সবচেয়ে সহজ ও স্বজ্ঞাত (Intuitive) একটি Algorithm — K-Nearest Neighbors (KNN)!

02

KNN Classifier কী?

⏱ ১০ মিনিট  ·  সংজ্ঞা ও মূল ধারণা

গল্প: নতুন ছাত্রের গল্প 🎒

ধরুন, একটি নতুন ছাত্র ক্লাসে ভর্তি হলো। আমরা জানতে চাই — সে খেলাধুলায় ভালো কিনা। আমরা কী করি? আমরা দেখি তার সবচেয়ে কাছের ৫ জন বন্ধু কারা। যদি তাদের মধ্যে ৪ জন খেলাধুলায় ভালো হয়, আমরা ধরে নিই — নতুন ছাত্রটিও খেলাধুলায় ভালো হবে! এটাই হলো KNN-এর মূল ধারণা — "তোমার সঙ্গ দেখেই তোমাকে চেনা যায়।"

📖 সংজ্ঞা

K-Nearest Neighbors (KNN) একটি Classification Algorithm, যা নতুন ডেটা পয়েন্টের শ্রেণী নির্ধারণ করে তার সবচেয়ে কাছের K সংখ্যক প্রতিবেশী (Neighbors) দেখে। যে শ্রেণী বেশি প্রতিবেশীর মধ্যে পাওয়া যায়, নতুন ডেটাও সেই শ্রেণীতে পড়ে।

🤔 নাম "Nearest Neighbors" কেন?

Nearest মানে "সবচেয়ে কাছের" আর Neighbors মানে "প্রতিবেশী"। এই Algorithm নতুন ডেটার আশেপাশের সবচেয়ে কাছের ডেটাগুলো খুঁজে বের করে — ঠিক যেমন আপনি আপনার পাড়ার প্রতিবেশী দেখে এলাকার পরিবেশ বুঝতে পারেন।

😴 KNN কেন "Lazy Learning Algorithm"?

বেশিরভাগ Algorithm (যেমন Logistic Regression) আগে থেকে ডেটা দেখে একটি "মডেল" বা সূত্র তৈরি করে রাখে (Training)। কিন্তু KNN তা করে না! KNN শুধু ডেটা মনে রাখে এবং নতুন ডেটা এলে তখনই হিসাব করে। তাই একে Lazy Learning বলা হয় — "কাজ পরে করব, এখন শুধু সংরক্ষণ করি!"

📊 Eager vs Lazy Learning

বিষয়🏃 Eager Learning (যেমন Logistic Regression)😴 Lazy Learning (KNN)
Training সময়সময় লাগে (সূত্র শেখে)প্রায় তাৎক্ষণিক (শুধু সংরক্ষণ)
Prediction সময়দ্রুতধীর (প্রতিবার হিসাব করে)
মেমোরি ব্যবহারকম (শুধু সূত্র রাখে)বেশি (সব ডেটা রাখে)

✅ কখন KNN ব্যবহার করবেন?

ছোট Dataset দ্রুত Prototype দরকার ডেটায় স্পষ্ট প্যাটার্ন আছে সহজ ব্যাখ্যা দরকার
03

KNN কীভাবে কাজ করে — ধাপে ধাপে

⏱ ১৫ মিনিট  ·  Step-by-step Intuition

🔄 KNN-এর কাজের ধাপ

নতুন একটি ছাত্রের ডেটা এলে, KNN নিচের ৪টি ধাপে কাজ করে:

নতুন ডেটা পয়েন্ট আসে (New Data Point)

ধরুন, নতুন ছাত্র এসেছে যে ৫ ঘণ্টা পড়ে এবং ৭০% উপস্থিতি আছে। আমরা জানি না সে পাস করবে নাকি ফেল করবে।

সব পুরাতন ডেটার সাথে দূরত্ব হিসাব করা (Calculate Distance)

নতুন ছাত্রের সাথে আগের সব ছাত্রের "দূরত্ব" মাপা হয় — কে কাছে, কে দূরে?

সবচেয়ে কাছের K জনকে বেছে নেওয়া (Find K Nearest Neighbors)

ধরুন K=5। সবচেয়ে কাছের ৫ জন পুরাতন ছাত্র বেছে নেওয়া হয়।

সংখ্যাগরিষ্ঠের ভোট (Majority Voting)

৫ জনের মধ্যে যদি ৪ জন পাস করে থাকে, ১ জন ফেল — তাহলে সংখ্যাগরিষ্ঠ "পাস"।

চূড়ান্ত Prediction

নতুন ছাত্রকেও "পাস" হিসেবে Predict করা হবে! ✅

KNN Visual — Study Hours vs Attendance

পড়ার ঘণ্টা (Study Hours) → উপস্থিতি (%) → নতুন ছাত্র? পাস করা ছাত্র ফেল করা ছাত্র নতুন ছাত্র (K=3)

K=3 -এর কাছের ৩ জনের মধ্যে ২ জন "পাস" — তাই নতুন ছাত্রও Predict হবে "পাস" ✅

04

Distance বোঝা — দূরত্ব কীভাবে মাপা হয়?

⏱ ১৫ মিনিট  ·  Euclidean Distance

গল্প: দুই বাড়ির দূরত্ব 🏠

ধরুন, আপনার বাড়ি A থেকে বন্ধুর বাড়ি B-তে যেতে হবে। যদি আকাশপথে সোজা রেখা টানা হয়, সেই দূরত্বকেই বলে Euclidean Distance। KNN ঠিক এভাবেই দুটি ডেটা পয়েন্টের মধ্যে "দূরত্ব" মাপে — কে কার কাছাকাছি।

📏 কেন Distance গুরুত্বপূর্ণ?

KNN বুঝতে হলে জানতে হবে কোন ডেটা পয়েন্ট কার "কাছে"। এই "কাছে থাকা" বোঝার জন্য সংখ্যাগতভাবে দূরত্ব হিসাব করা দরকার। দূরত্ব যত কম, দুটি ডেটা তত একই রকম (Similar)।

দুটি ছাত্রের মধ্যে দূরত্ব

পড়ার ঘণ্টা → করিম (3, 50) রিতা (8, 85) পড়ার ঘণ্টার পার্থক্য (5) উপস্থিতির পার্থক্য (35) সরাসরি দূরত্ব
Distance = √[(x₂-x₁)² + (y₂-y₁)²]
এটাকেই বলে Euclidean Distance — সবচেয়ে জনপ্রিয় Distance মাপার সূত্র

🧮 বাস্তব গণনার উদাহরণ

করিম: (পড়ার ঘণ্টা=3, উপস্থিতি=50)  |  রিতা: (পড়ার ঘণ্টা=8, উপস্থিতি=85)

Distance = √[(8-3)² + (85-50)²]
= √[(5)² + (35)²] = √[25 + 1225] = √1250 ≈ 35.36

এই সংখ্যা যত ছোট, দুজন ছাত্র তত একই রকম। যত বড়, তারা তত আলাদা।

📊 বিভিন্ন জোড়ার দূরত্ব তুলনা

ছাত্র জোড়া(ঘণ্টা, উপস্থিতি)Distanceমন্তব্য
করিম ↔ সুমন(3,50) ↔ (4,55)5.10খুব কাছাকাছি — একই রকম
করিম ↔ রিতা(3,50) ↔ (8,85)35.36অনেক দূরে — ভিন্ন রকম
রিতা ↔ নীলা(8,85) ↔ (9,90)5.10খুব কাছাকাছি — একই রকম
05

K মান বোঝা — কয়জন প্রতিবেশী দেখব?

⏱ ১৫ মিনিট  ·  ছোট K vs বড় K

❓ K আসলে কী?

K হলো একটি সংখ্যা, যা ঠিক করে দেয় — নতুন ডেটার শ্রেণী ঠিক করতে আমরা কতজন প্রতিবেশী দেখব। K=3 মানে কাছের ৩ জন দেখব, K=7 মানে কাছের ৭ জন দেখব।

K-Value পরিবর্তনের প্রভাব — Interactive

নতুন বিন্দুতে ক্লিক করে চেষ্টা করুন!
পাস করা ছাত্র ফেল করা ছাত্র নতুন ছাত্র (ক্লিক করুন)
K=1
শুধু সবচেয়ে কাছেরজন দেখে — খুব sensitive, Noise-এ ভুল হয়
K=3
ভারসাম্যপূর্ণ, ছোট Dataset-এ ভালো
K=5
সাধারণত স্থিতিশীল ফলাফল দেয়
K=7+
অনেক প্রতিবেশী দেখে — মসৃণ কিন্তু সূক্ষ্ম বিবরণ হারায়

⚠️ ছোট K (যেমন K=1) → Overfitting

মডেল প্রতিটি ডেটা পয়েন্টের খুঁটিনাটি (Noise) মুখস্থ করে ফেলে। Training Data-তে ভালো করে, কিন্তু নতুন ডেটায় ভুল করে।

🎯 উদাহরণ: পাশের একজন বন্ধু অসুস্থ হলেও তুমি অসুস্থ ভাবা!

⚠️ বড় K (যেমন K=21) → Underfitting

মডেল অনেক বেশি প্রতিবেশী দেখে গড় করে ফেলে। সূক্ষ্ম প্যাটার্ন হারিয়ে যায়, ফলাফল অতিরিক্ত সরল হয়ে যায়।

🎯 উদাহরণ: পুরো শহরের গড় দেখে তোমার অবস্থা বিচার করা!

✅ সঠিক ভারসাম্য খুঁজুন

খুব ছোট K নয়, খুব বড় K নয় — মাঝামাঝি একটি মান বেছে নিতে হবে, যা Validation ডেটায় সবচেয়ে ভালো Accuracy দেয়।

Data থেকে KNN Prediction — Step by Step

⏱ ~১৫ মিনিট  ·  Manual Visual Pipeline

এক লাইনে পুরো গল্প

Training data দাও → নতুন pointDistance হিসাব → K nearest বেছে নাও → Majority voteŷ (0/1) predict।

Math Flow rail + formula panel-এ প্রতিটি ধাপে Euclidean distance ও vote গণনা দেখানো হয় (query = ৫ ঘণ্টা, ৭০% উপস্থিতি)।

KNN ML Pipeline — Step by Step
পরের ধাপ চাপুন — slider/drag দিয়ে query ও K live বদলান; math + canvas তাৎক্ষণিক update
Input(x, y)
Distanced=√ΣΔ²
K Nearesttop K
Votelabel count
Majoritymax wins
Classŷ∈{0,1}
সব চিহ্ন এক নজরে (Math Dictionary)
চিহ্ননামকী করেউদাহরণ
x₁Feature 1পড়ার ঘণ্টা (study hours)5
x₂Feature 2উপস্থিতি (%)70
dEuclidean Distanceদুই point কতটা কাছাকাছি — ছোট = similar√[(Δx)²+(Δy)²]
KNeighborsকতজন প্রতিবেশী দেখব3
VoteLabel CountK জনের মধ্যে পাস/ফেল গণনা2 পাস, 1 ফেল
Majorityসংখ্যাগরিষ্ঠযে label বেশি — সেটাই জিতেপাস জিতে
ŷPredicted Classচূড়ান্ত আউটপুট 0 বা 11 (পাস)
ধাপ ২+ এ canvas-এ click/drag করুন — distance, vote, ŷ সব live update
ধাপ ১: Training Data পাস (সবুজ) ও ফেল (লাল) — পুরাতন ছাত্রদের data
ধাপ1 / 6
K
Top-K d
ŷ

💡 এক লাইনে মনে রাখো

Query → d = √ΣΔ² → top K → vote → majority → ŷ · KNN = Lazy Learning — শুধু মনে রাখে, predict-এর সময় হিসাব করে

06

Majority Voting — সংখ্যাগরিষ্ঠের সিদ্ধান্ত

⏱ ১০ মিনিট  ·  কীভাবে চূড়ান্ত সিদ্ধান্ত হয়

🗳️ Majority Voting কী?

K জন প্রতিবেশী খুঁজে পাওয়ার পর, তাদের মধ্যে যে শ্রেণী (Class) সবচেয়ে বেশি দেখা যায়, নতুন ডেটাও সেই শ্রেণীতে পড়ে। এটা অনেকটা নির্বাচনের ভোটের মতো — যে বেশি ভোট পায়, সে জেতে!

উদাহরণ ১: রং নির্ণয় (Color Classification)

লাল লাল নীল

৩ জন প্রতিবেশীর মধ্যে ২ জন লাল, ১ জন নীল → Prediction = লাল ✅

📊 উদাহরণ ২: পাস/ফেল Voting (K=5)

প্রতিবেশী #ফলাফল
প্রতিবেশী ১পাস
প্রতিবেশী ২ফেল
প্রতিবেশী ৩পাস
প্রতিবেশী ৪পাস
প্রতিবেশী ৫ফেল

ভোট গণনা: পাস = ৩, ফেল = ২ → Prediction = পাস ✅ (Majority জিতল)

⚖️ সমস্যা: Tie (সমান ভোট) হলে কী হবে?

যদি K জোড় সংখ্যা হয় (যেমন K=4) এবং ভোট 2-2 হয়ে যায়, তাহলে সিদ্ধান্ত নেওয়া কঠিন হয়ে যায়! এই কারণেই বেশিরভাগ ক্ষেত্রে K-কে বিজোড় সংখ্যা রাখার পরামর্শ দেওয়া হয় (Binary Classification-এ)।

07

Feature Scaling — কেন এত গুরুত্বপূর্ণ?

⏱ ১০ মিনিট  ·  খুবই গুরুত্বপূর্ণ বিষয়

গল্প: অবিচার করা দূরত্ব 😵

ধরুন, আমরা দুটি Feature ব্যবহার করছি — বয়স (Age) আর আয় (Income)। একজনের বয়স ২৫, আয় ১,০০,০০০ টাকা। আরেকজনের বয়স ৩০, আয় ১,৫০,০০০ টাকা। Distance হিসাব করলে আয়ের বিশাল সংখ্যাটাই পুরো হিসাব দখল করে নেবে — বয়সের পার্থক্য কার্যত উপেক্ষিত হয়ে যাবে! এটাই হলো সমস্যা।

🧮 কেন বড় সংখ্যা প্রাধান্য পায়?

Featureব্যক্তি Aব্যক্তি Bপার্থক্য
Age (বয়স)25305
Income (আয়, টাকা)100,000150,00050,000
Distance = √[(5)² + (50000)²] = √[25 + 2,500,000,000] ≈ 50,000

⚠️ লক্ষ্য করুন — বয়সের পার্থক্য (5) প্রায় হারিয়ে গেছে! শুধু Income-ই দূরত্ব নির্ধারণ করে ফেলেছে।

🔧 সমাধান: Feature Scaling

সব Feature-কে একই পরিসরে (Scale) নিয়ে আসতে হবে, যাতে কোনো একটি Feature অন্যায়ভাবে প্রাধান্য না পায়।

📐 Standardization

প্রতিটি মানকে গড় (Mean) থেকে দূরত্ব এবং Standard Deviation ব্যবহার করে রূপান্তর করে। ফলাফল সাধারণত -3 থেকে +3 এর মধ্যে থাকে।

z = (x - mean) / std

📐 Min-Max Scaling

সব মানকে 0 থেকে 1-এর মধ্যে নিয়ে আসে। সবচেয়ে ছোট মান হয় 0, সবচেয়ে বড় মান হয় 1।

x' = (x - min) / (max - min)

🚨 মনে রাখুন

KNN distance-ভিত্তিক Algorithm। তাই Feature Scaling ছাড়া KNN ব্যবহার করলে ভুল ফলাফল আসবে। Logistic Regression-এর মতো Algorithm-এ এটা ততটা জরুরি না, কিন্তু KNN-এ এটি বাধ্যতামূলক!

08

সেরা K কীভাবে নির্বাচন করবেন?

⏱ ৫ মিনিট  ·  Best Practice

🎯 K নির্বাচনের নিয়ম

  • বিজোড় সংখ্যা ব্যবহার করুন (Binary Classification-এ) — Tie এড়াতে
  • √n নিয়ম: K ≈ √(Total Training Samples) — একটি সাধারণ শুরুর বিন্দু
  • একাধিক K চেষ্টা করুন এবং কোনটায় সবচেয়ে ভালো Accuracy আসে দেখুন

🔁 Cross Validation — সহজ ব্যাখ্যা

ধরুন, আপনার কাছে ১০০টি ছাত্রের ডেটা আছে। শুধু একবার Train-Test ভাগ করলে ফলাফল আংশিকভাবে ভাগ্যনির্ভর হতে পারে। তাই Cross Validation-এ ডেটাকে কয়েকটি ভাগে ভাগ করে, প্রতিটি ভাগকে পালাক্রমে Test হিসেবে ব্যবহার করে — তারপর গড় ফলাফল নেওয়া হয়। এতে ফলাফল বেশি নির্ভরযোগ্য হয়।

09

সুবিধা ও অসুবিধা

⏱ ৫ মিনিট  ·  Advantages vs Disadvantages

✅ সুবিধা (Advantages)

  • সহজ: বোঝা ও ব্যাখ্যা করা সহজ
  • Training নেই: দ্রুত শুরু করা যায়
  • ছোট Dataset: ছোট ডেটায় ভালো কাজ করে
  • নমনীয়: Regression-এও ব্যবহার করা যায়

❌ অসুবিধা (Disadvantages)

  • ধীর: বড় Dataset-এ Prediction ধীর
  • Outlier-sensitive: একটি ভুল ডেটা প্রভাবিত করে
  • Scale-sensitive: Scaling ছাড়া কাজ করে না
  • মেমোরি বেশি লাগে: সব ডেটা সংরক্ষণ করতে হয়

📊 কখন KNN এড়িয়ে যাবেন?

পরিস্থিতিসমস্যাবিকল্প
১০ লক্ষ+ ডেটাPrediction অনেক ধীর হবেDecision Tree, Random Forest
অনেক Outlier আছেফলাফল বিকৃত হবেRobust Algorithm ব্যবহার করুন
খুব বেশি FeatureDistance অর্থহীন হয়ে যায় (Curse of Dimensionality)PCA দিয়ে Feature কমান
10

Real-Life Applications — বাস্তব জীবনে ব্যবহার

⏱ ৫ মিনিট  ·  Industry Use Cases
🎬

Recommendation System

Netflix, YouTube — একই রকম পছন্দের মানুষের সুপারিশ

🏥

Medical Diagnosis

একই রকম লক্ষণের রোগীদের ডেটা দিয়ে রোগ নির্ণয়

🖼️

Image Classification

হাতে লেখা সংখ্যা বা ছবি চেনা

💳

Fraud Detection

অস্বাভাবিক লেনদেন প্যাটার্ন শনাক্তকরণ

👥

Customer Segmentation

একই রকম আচরণের কাস্টমারদের গ্রুপ করা

🏠

Real Estate

একই এলাকার বাড়ির দাম অনুমান

11

Google Colab কোডিং সেশন

⏱ লাইভ কোডিং  ·  ছাত্র পাস/ফেল Prediction

📋 আজকের Dataset

আমরা একই Dataset ব্যবহার করব: পড়ার ঘণ্টা, উপস্থিতি (%), আগের পরীক্ষার নম্বর — দিয়ে পাস/ফেল predict করব, কিন্তু এবার KNN Algorithm দিয়ে।

ধাপ ১ — Library Import ও Dataset তৈরি
# প্রয়োজনীয় লাইব্রেরি Import করি
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# Dataset তৈরি করি
data = {
    'study_hours':    [1,2,2,3,4,4,5,5,6,6,7,7,8,8,9,3,5,7,2,8],
    'attendance':     [40,50,45,55,60,70,65,75,80,85,90,88,95,92,98,48,72,88,42,96],
    'previous_marks': [30,40,35,45,50,55,60,58,65,70,75,72,80,78,88,38,62,79,33,84],
    'pass_fail':      [0,0,0,0,0,1,0,1,1,1,1,1,1,1,1,0,1,1,0,1]
}

df = pd.DataFrame(data)
print(df.head(10))
study_hours attendance previous_marks pass_fail 0 1 40 30 0 1 2 50 40 0 2 2 45 35 0 3 3 55 45 0 4 4 60 50 0 5 4 70 55 1 6 5 65 60 0 7 5 75 58 1 8 6 80 65 1 9 6 85 70 1
📘 কোড ব্যাখ্যা:
KNeighborsClassifier — KNN Algorithm-এর জন্য বিশেষ Class
StandardScaler — Feature Scaling করার জন্য (KNN-এ বাধ্যতামূলক!)
• বাকি কোড আগের মতোই — Pandas দিয়ে টেবিল তৈরি
ধাপ ২ — Feature ও Target আলাদা করা
# X = Input Features, y = Target
X = df[['study_hours', 'attendance', 'previous_marks']]
y = df['pass_fail']

print("Feature আকার:", X.shape)
print("Target আকার:", y.shape)
Feature আকার: (20, 3) Target আকার: (20,)
📘 কোড ব্যাখ্যা:
• আগের ক্লাসের মতোই X এবং y আলাদা করা হচ্ছে
ধাপ ৩ — Feature Scaling (অত্যন্ত গুরুত্বপূর্ণ!)
# Scaling করার আগে ডেটার পরিসর দেখি
print("Scaling-এর আগে:")
print(X.describe().loc[['min','max']])

# StandardScaler দিয়ে সব Feature-কে একই পরিসরে আনি
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

X_scaled_df = pd.DataFrame(X_scaled, columns=X.columns)
print("\nScaling-এর পরে (প্রথম ৫ সারি):")
print(X_scaled_df.head())
Scaling-এর আগে: study_hours attendance previous_marks min 1 40 30 max 9 98 88 Scaling-এর পরে (প্রথম ৫ সারি): study_hours attendance previous_marks 0 -1.530931 -1.486235 -1.474874 1 -1.180009 -1.140371 -1.156150 2 -1.180009 -1.313303 -1.315512 3 -0.829087 -0.967440 -0.997426 4 -0.478165 -0.794508 -0.838788
📘 কোড ব্যাখ্যা:
• Scaling-এর আগে study_hours: 1-9, attendance: 40-98 — সম্পূর্ণ ভিন্ন পরিসর!
fit_transform() = গড় ও Standard Deviation শিখে রূপান্তর করে
• Scaling-এর পরে সব Feature একই পরিসরে (সাধারণত -2 থেকে +2)
• এখন কোনো Feature-ই অন্যায্যভাবে প্রাধান্য পাবে না
⚠ সাধারণ ভুল: Feature Scaling ভুলে গেলে KNN-এর ফলাফল ভুল হবে, কারণ বড় সংখ্যার Feature (যেমন attendance) দূরত্ব হিসাবে প্রাধান্য পাবে।
ধাপ ৪ — Train-Test Split
# Scaled ডেটা দিয়ে Train-Test ভাগ করি
X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y,
    test_size=0.2,
    random_state=42
)

print("Training ডেটা:", X_train.shape)
print("Testing ডেটা:", X_test.shape)
Training ডেটা: (16, 3) Testing ডেটা: (4, 3)
📘 কোড ব্যাখ্যা:
• লক্ষ্য করুন আমরা X_scaled ব্যবহার করছি, আসল X নয়!
• সবসময় Scaling করার পরেই Train-Test Split করতে হবে
ধাপ ৫ — KNN মডেল Train করা (K=5)
# KNN মডেল তৈরি ও Training
knn_model = KNeighborsClassifier(n_neighbors=5)
knn_model.fit(X_train, y_train)

print("✅ KNN মডেল Training সম্পন্ন! (K=5)")
✅ KNN মডেল Training সম্পন্ন! (K=5)
📘 কোড ব্যাখ্যা:
n_neighbors=5 = K এর মান, অর্থাৎ কাছের ৫ জন প্রতিবেশী দেখা হবে
.fit() KNN-এ আসলে কিছু "শেখায়" না — শুধু ডেটা সংরক্ষণ করে (Lazy Learning মনে আছে?)
ধাপ ৬ — Prediction করা
y_pred = knn_model.predict(X_test)
print("Predicted Class:", y_pred)
print("Actual Class:   ", y_test.values)
Predicted Class: [1 0 1 1] Actual Class: [1 0 1 1]
📘 কোড ব্যাখ্যা:
predict() প্রতিটি Test ছাত্রের জন্য কাছের ৫ জন প্রতিবেশী খুঁজে Majority Voting করে ফলাফল দেয়
ধাপ ৭ — Model Evaluation
accuracy = accuracy_score(y_test, y_pred)
print(f"✅ Model Accuracy: {accuracy:.2%}")

print("\n📊 Confusion Matrix:")
print(confusion_matrix(y_test, y_pred))

print("\n📋 Classification Report:")
print(classification_report(y_test, y_pred, target_names=['Fail','Pass']))
✅ Model Accuracy: 100.00% 📊 Confusion Matrix: [[1 0] [0 3]] 📋 Classification Report: precision recall f1-score support Fail 1.00 1.00 1.00 1 Pass 1.00 1.00 1.00 3 accuracy 1.00 4
ধাপ ৮ — বিভিন্ন K মান নিয়ে পরীক্ষা
# বিভিন্ন K দিয়ে Accuracy তুলনা করি
k_values = [1, 3, 5, 7, 9]

for k in k_values:
    model_k = KNeighborsClassifier(n_neighbors=k)
    model_k.fit(X_train, y_train)
    pred_k = model_k.predict(X_test)
    acc_k = accuracy_score(y_test, pred_k)
    print(f"K={k}: Accuracy = {acc_k:.2%}")
K=1: Accuracy = 100.00% K=3: Accuracy = 100.00% K=5: Accuracy = 100.00% K=7: Accuracy = 75.00% K=9: Accuracy = 75.00%
📘 কোড ব্যাখ্যা:
• দেখুন কীভাবে K=7, K=9 এ Accuracy কমে গেল — এটা ছোট Dataset-এ বড় K-এর Underfitting দেখাচ্ছে
• Real-world বড় Dataset-এ ফলাফল ভিন্ন হতে পারে — তাই সবসময় বিভিন্ন K পরীক্ষা করুন
⚠ সতর্কতা: ছোট Dataset-এ 100% Accuracy স্বাভাবিক ব্যাপার নয় বাস্তবে — বড়, বাস্তব Dataset-এ চেষ্টা করুন।
12

Model Evaluation — মডেল মূল্যায়ন

⏱ বিস্তারিত মূল্যায়ন  ·  Confusion Matrix থেকে F1

📖 কেন শুধু Accuracy যথেষ্ট নয়?

ধরুন, ১০০ জনের মধ্যে ৯৫ জন সুস্থ, ৫ জন অসুস্থ। মডেল সবাইকে "সুস্থ" বললেও Accuracy হবে ৯৫%! কিন্তু আসল অসুস্থ ৫ জনকে মডেল একবারও সঠিক ধরতে পারেনি। তাই গভীরে দেখতে হবে।

📊 Confusion Matrix উপাদান

উপাদানমানেউদাহরণ
TP (True Positive)আসলে পাস, বলেছি পাস ✅সঠিক Prediction
TN (True Negative)আসলে ফেল, বলেছি ফেল ✅সঠিক Prediction
FP (False Positive)আসলে ফেল, বলেছি পাস ❌ভুল সতর্কতা
FN (False Negative)আসলে পাস, বলেছি ফেল ❌মিস করা হয়েছে

📊 Evaluation Metrics

Metricসূত্রসহজ ভাষায়
Accuracy(TP+TN) / Totalসবমিলিয়ে কতটা সঠিক?
PrecisionTP / (TP+FP)পাস বলা ছাত্রদের মধ্যে কতজন সত্যিই পাস?
RecallTP / (TP+FN)আসল পাস ছাত্রদের মধ্যে কতজনকে ধরা গেছে?
F1 Score2×(P×R)/(P+R)Precision ও Recall-এর সামঞ্জস্য
13

Common Beginner Mistakes

⏱ সতর্কতা  ·  এই ভুলগুলো এড়িয়ে চলুন

❌ ভুল ১: Feature Scaling ভুলে যাওয়া

ভুল ধারণা: Scaling ছাড়াই KNN চালানো।

সঠিক তথ্য: Distance-ভিত্তিক Algorithm হওয়ায় Scaling ছাড়া বড় সংখ্যার Feature প্রাধান্য পেয়ে যাবে এবং ফলাফল ভুল হবে।

❌ ভুল ২: খুব ছোট K বেছে নেওয়া

ভুল ধারণা: K=1 সবসময় ভালো।

সঠিক তথ্য: K=1 খুব Sensitive — একটি Outlier পুরো ফলাফল বদলে দিতে পারে (Overfitting)।

❌ ভুল ৩: খুব বড় K বেছে নেওয়া

ভুল ধারণা: বড় K মানেই বেশি নির্ভুল।

সঠিক তথ্য: অতিরিক্ত বড় K সূক্ষ্ম প্যাটার্ন হারিয়ে ফেলে (Underfitting)।

❌ ভুল ৪: বিশাল Dataset-এ KNN ব্যবহার

ভুল ধারণা: সব ক্ষেত্রে KNN ব্যবহার করা যায়।

সঠিক তথ্য: লক্ষ লক্ষ ডেটায় প্রতিটি Prediction-এ সব ডেটার সাথে Distance হিসাব করতে হয় — অনেক ধীর হয়ে যায়।

❌ ভুল ৫: Outlier উপেক্ষা করা

ভুল ধারণা: সব ডেটা সমান গুরুত্বপূর্ণ।

সঠিক তথ্য: একটা ভুল বা অস্বাভাবিক ডেটা পয়েন্ট (Outlier) প্রতিবেশী হিসেবে নির্বাচিত হলে পুরো Prediction ভুল হতে পারে।

❌ ভুল ৬: Train-Test Split না করা

ভুল ধারণা: সব ডেটা দিয়ে Train করে সেই ডেটাতেই Test করা।

সঠিক তথ্য: এতে Accuracy ভুলভাবে অনেক বেশি দেখাবে — মডেল নতুন ডেটায় কেমন করবে বোঝা যাবে না।

14

অন্যান্য Algorithm-এর সাথে তুলনা

⏱ তুলনামূলক বিশ্লেষণ

⚖️ KNN vs Logistic Regression

বিষয়KNNLogistic Regression
Trainingনেই (Lazy)আছে (Eager)
Decision Boundaryঅনিয়মিত, জটিল আকৃতিসরল রেখা/সমতল
Scaling প্রয়োজনহ্যাঁ, বাধ্যতামূলকসাধারণত কম জরুরি
Probability আউটপুটসম্ভব কিন্তু কম নির্ভুলস্পষ্ট ও নির্ভুল
বড় Datasetধীরদ্রুত

⚖️ KNN vs Decision Tree

বিষয়KNNDecision Tree
ব্যাখ্যাযোগ্যতামাঝারিখুব সহজ (যদি-তাহলে নিয়ম)
Scaling প্রয়োজনহ্যাঁনা
Missing Valueসমস্যা হয়কিছু ক্ষেত্রে handle করতে পারে
Overfitting ঝুঁকিছোট K-তে বেশিগভীর Tree-তে বেশি

⚖️ KNN vs Linear Regression

বিষয়KNNLinear Regression
মূল কাজClassification (এবং Regression-ও সম্ভব)শুধু Regression (সংখ্যা)
সম্পর্ক ধরনNon-linear প্যাটার্ন ধরতে পারেশুধু Linear সম্পর্ক ধরে
Interpretabilityমাঝারিখুব স্পষ্ট (Weight দেখে বোঝা যায়)

🎯 কোনটা কখন বেছে নেবেন?

দ্রুত Prediction দরকার → Logistic Regression সহজ ব্যাখ্যা দরকার → Decision Tree ছোট, জটিল প্যাটার্ন → KNN সংখ্যা predict → Linear Regression
15

Revision — পুনরাবৃত্তি ও MCQ

⏱ সারসংক্ষেপ  ·  Viva · MCQ · Homework

⚡ Quick Revision Chips

KNN = Lazy Learning কাছের K জন প্রতিবেশী দেখে Majority Voting দিয়ে সিদ্ধান্ত Euclidean Distance ব্যবহার Feature Scaling বাধ্যতামূলক ছোট K = Overfitting বড় K = Underfitting

🎤 Viva Questions (ক্লিক করলে উত্তর দেখবে)

Q1: KNN-কে কেন "Lazy Learning Algorithm" বলা হয়?
কারণ KNN আগে থেকে কোনো মডেল বা সূত্র শেখে না (Training নেই)। এটা শুধু Training ডেটা সংরক্ষণ করে রাখে এবং নতুন ডেটা এলে তখনই Distance হিসাব করে — তাই "Lazy" বা অলস বলা হয়।
Q2: Feature Scaling কেন KNN-এ এত গুরুত্বপূর্ণ?
KNN Distance হিসাব করে সিদ্ধান্ত নেয়। যদি Feature-গুলোর Scale ভিন্ন হয় (যেমন বয়স vs আয়), বড় সংখ্যার Feature দূরত্ব হিসাবে অন্যায়ভাবে প্রাধান্য পেয়ে যাবে। Scaling সব Feature-কে একই গুরুত্ব দেয়।
Q3: ছোট K এবং বড় K-এর মধ্যে পার্থক্য কী?
ছোট K (যেমন K=1) মডেলকে অতিরিক্ত sensitive করে — Outlier-এ ভুল করে (Overfitting)। বড় K (যেমন K=21) মডেলকে অতিরিক্ত সরল করে দেয় — সূক্ষ্ম প্যাটার্ন হারিয়ে যায় (Underfitting)। সঠিক ভারসাম্য খুঁজতে হয়।
Q4: K সাধারণত বিজোড় সংখ্যা রাখা হয় কেন?
Binary Classification (দুটি Class) সমস্যায়, জোড় K হলে ভোট সমান (Tie) হয়ে যেতে পারে — যেমন K=4 এ 2-2 ভোট। বিজোড় K রাখলে সবসময় একটি স্পষ্ট সংখ্যাগরিষ্ঠতা পাওয়া যায়।
Q5: KNN ও Logistic Regression-এর মূল পার্থক্য কী?
Logistic Regression একটি সূত্র শেখে (Eager Learning) এবং সরল Decision Boundary তৈরি করে। KNN কোনো সূত্র শেখে না (Lazy Learning), বরং সরাসরি Training ডেটার সাথে তুলনা করে জটিল আকৃতির Decision Boundary তৈরি করতে পারে।

📝 MCQ — Multiple Choice Questions

1. KNN-কে কোন ধরনের Learning Algorithm বলা হয়?
  • Eager Learning
  • Lazy Learning
  • Deep Learning
  • Reinforcement Learning
2. KNN-এ দূরত্ব মাপার সবচেয়ে জনপ্রিয় পদ্ধতি কোনটি?
  • Manhattan Distance
  • Euclidean Distance
  • Cosine Similarity
  • Hamming Distance
3. খুব ছোট K (যেমন K=1) ব্যবহার করলে কী হতে পারে?
  • Underfitting
  • Overfitting
  • কোনো প্রভাব নেই
  • Training সময় বাড়ে
4. KNN-এ Feature Scaling কেন প্রয়োজন?
  • মডেল দ্রুত চালানোর জন্য
  • সব Feature যাতে সমান গুরুত্ব পায়
  • মেমোরি বাঁচানোর জন্য
  • এটা প্রয়োজন নেই
5. Binary Classification-এ K সাধারণত কী রাখা ভালো?
  • জোড় সংখ্যা
  • বিজোড় সংখ্যা
  • শূন্য
  • ঋণাত্মক সংখ্যা
6. বিশাল Dataset-এ KNN-এর প্রধান সমস্যা কী?
  • Accuracy কমে যায়
  • Prediction অনেক ধীর হয়
  • Training সময় বাড়ে
  • কোনো সমস্যা হয় না

📚 Homework Assignment

  1. Google Colab খুলুন এবং আজকের সম্পূর্ণ KNN কোড নিজে হাতে লিখুন।
  2. K=1, 3, 5, 7, 9, 11 দিয়ে Accuracy তুলনা করে একটি Table বানান।
  3. Feature Scaling বাদ দিয়ে মডেল চালান এবং Accuracy-র পার্থক্য লক্ষ্য করুন।
  4. Min-Max Scaling ব্যবহার করে দেখুন Standardization-এর তুলনায় ফলাফল কেমন হয়।
  5. Kaggle-এর "Iris Dataset" নামিয়ে KNN দিয়ে ফুলের প্রজাতি Classification করুন।

💼 Interview Questions

#প্রশ্নমূল বিষয়
1KNN কেন Lazy Learning Algorithm?Training-Free, Instance-based
2Curse of Dimensionality কী এবং KNN-কে কীভাবে প্রভাবিত করে?উচ্চ-মাত্রায় Distance অর্থহীন হয়ে যায়
3Euclidean vs Manhattan Distance-এর পার্থক্য কী?সরলরেখা দূরত্ব vs গ্রিড দূরত্ব
4KNN-এ কীভাবে সেরা K নির্বাচন করবেন?Cross-validation, √n নিয়ম
5KNN কীভাবে Regression-এ ব্যবহার হয়?Majority Vote-এর বদলে Average
6KNN বড় Dataset-এ কেন অকার্যকর?O(n) Time Complexity প্রতি Prediction-এ

🎉 অভিনন্দন! আজকের ক্লাস সম্পন্ন!

আপনি আজ শিখেছেন: Classification সমস্যা, KNN Algorithm, Distance Calculation, K-value নির্বাচন, Feature Scaling, Majority Voting, Model Evaluation — সব কিছু!

✅ Distance বোঝা গেছে ✅ Scaling শিখেছি ✅ K নির্বাচন জানি

পরের ক্লাস: Decision Tree & Random Forest | প্রস্তুত থাকুন! 🚀