মূল content-এ যাও

Mathematics for AI/Vectors/Lesson 08

Norm ও দূরত্ব

Vector-এর দৈর্ঘ্য (L2 আর L1 norm), unit vector, দুটো বিন্দুর দূরত্ব, আর কেন feature-এর scale আলাদা হলে দূরত্ব ভুল তথ্য দেয়। শেষে centroid আর দূরত্ব দিয়ে একটা সত্যিকারের classifier।

সময়
26 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

একটা vector কত লম্বা? Pythagoras-এর উপপাদ্য মনে আছে? [3,4][3, 4] তীরটা হলো একটা সমকোণী ত্রিভুজের অতিভুজ:

∥[3,4]∥=32+42=5\lVert [3, 4] \rVert = \sqrt{3^2 + 4^2} = 5

এটাই L2 norm (Euclidean দৈর্ঘ্য)। যেকোনো dimension-এ একই সূত্র:

∥v∥2=∑i=1nvi2\lVert \mathbf{v} \rVert_2 = \sqrt{\sum_{i=1}^{n} v_i^2}

আর দুটো বিন্দুর দূরত্ব মানে তাদের পার্থক্যের দৈর্ঘ্য:

d(a,b)=∥a−b∥d(\mathbf{a}, \mathbf{b}) = \lVert \mathbf{a} - \mathbf{b} \rVert

কেন দরকার?

  • দূরত্বভিত্তিক model: KNN (সবচেয়ে কাছের প্রতিবেশী), K-means, nearest-centroid। "কাছে" মানে কম দূরত্ব।
  • Loss function: MSE আসলে ভুলের vector-এর L2 norm-এর বর্গ ÷ n
  • Regularization: Weight-এর norm ছোট রাখা (L2 = Ridge, L1 = Lasso), যাতে overfitting কমে
  • Normalize: Embedding-কে দৈর্ঘ্য 1 বানানো, যাতে dot product = cosine

দুই ধরনের norm

নামসূত্রজ্যামিতি
L2 (Euclidean)∑vi2\sqrt{\sum v_i^2}সরাসরি সোজা পথে দূরত্ব, কাক যেভাবে ওড়ে
L1 (Manhattan)∑∣vi∣\sum \lvert v_i \rvertশহরের গ্রিড রাস্তায় হাঁটার দূরত্ব
main.py

Unit vector: শুধু দিক

কোনো vector-কে তার দৈর্ঘ্য দিয়ে ভাগ করলে একই দিকের কিন্তু দৈর্ঘ্য 1-এর vector পাওয়া যায়, যাকে বলে unit vector:

v^=v∥v∥\hat{\mathbf{v}} = \frac{\mathbf{v}}{\lVert \mathbf{v} \rVert}

দুটো unit vector-এর dot product সরাসরি cosine similarity। আগের lesson-এর সূত্রের হর (denominator) তখন 1।

⚠️ Scale-এর ফাঁদ

Feature-গুলোর পরিসর আলাদা হলে দূরত্ব বিভ্রান্তিকর হয়:

main.py

[study_hours, attendance] হিসেবে রিয়া আর শুভর পড়ার অভ্যাস একদম আলাদা, তবুও তাদের দূরত্ব রিয়া-মিতুর প্রায় সমান। কারণ attendance-এর সংখ্যাগুলো বড়, তাই সেটা দূরত্বে বেশি প্রভাব ফেলে।

সমাধান হলো standardization: প্রতিটা feature থেকে তার mean বিয়োগ করে std দিয়ে ভাগ করা। এতে সব feature একই মাপে চলে আসে ("গড় থেকে কত std দূরে"):

z=x−μσz = \frac{x - \mu}{\sigma}

Challenge-এ scale করে আর না করে একই classifier চালিয়ে তুলনা করবে।

Exercise

Exercise

Norm আর normalize

+20 XP

NumPy-র np.linalg.norm ছাড়া তিনটা function লেখো (NumPy-র অন্য কিছু ব্যবহার করা যাবে):

  • l2(v) — Euclidean দৈর্ঘ্য: সব component-এর বর্গের যোগফলের বর্গমূল
  • l1(v) — Manhattan দৈর্ঘ্য: সব component-এর পরম মানের যোগফল
  • normalize(v) — একই দিকের কিন্তু দৈর্ঘ্য 1-এর vector (v ÷ l2(v))

সবগুলো float (বা NumPy array, normalize-এর ক্ষেত্রে) দেবে।

solution.py

Quiz

  1. Q1[6, 8]-এর L2 norm কত?
  2. Q2দুটো feature: study_hours (০-৩০) আর attendance (০-১০০)। Scale না করে Euclidean দূরত্ব মাপলে কী হয়?
  3. Q3Test data standardize করার সময় কার mean আর std ব্যবহার করবে?
0/3 answered

Challenge

Challenge

Nearest-centroid classifier

+50 XP

Pass/fail predict করার একটা সহজ কিন্তু সত্যিকারের classifier: নতুন ছাত্র যে দলের centroid-এর সবচেয়ে কাছে, সেই দলেই তাকে রাখো।

Features: ["study_hours", "attendance"], target: passed। train_test_split(test_size=0.25, random_state=42, stratify=y)।

  1. standardize(X_train, X_test) — train-এর প্রতিটা column-এর mean আর std (NumPy-র default, ddof=0) দিয়ে দুটোকেই (x − mean) ÷ std করো। Return (train_scaled, test_scaled)।
  2. fit_centroids(X, y) — dict {True: pass-দের centroid, False: fail-দের centroid}
  3. predict(X, centroids) — প্রতিটা row-এর জন্য যে centroid-এর Euclidean দূরত্ব কম, সেই label (bool NumPy array)। loop ছাড়া।
  4. acc_raw — scale না করে train → test accuracy
  5. acc_scaled — standardize করে train → test accuracy

Accuracy = সঠিক prediction-এর অনুপাত (float)।

solution.py

ফলাফলটা সৎভাবে পড়ো

Challenge-এর সংখ্যাগুলো একটু অবাক করার মতো:

Test accuracy২২ জন fail করা ছাত্রের মধ্যে ধরা পড়েছে
Scale ছাড়া67%—
Standardize করে69%18 জন
Baseline: "সবাই pass"78%0 জন

Accuracy-তে আমাদের classifier baseline-এর নিচে! কারণ centroid classifier দুই দলের ঠিক মাঝখানে সীমারেখা টানে। কিন্তু pass করা ছাত্র fail করাদের প্রায় সাড়ে তিন গুণ, তাই অনেক pass করা ছাত্রকেও (এই split-এ ২৭ জন) "ঝুঁকিতে" বলে ফেলে।

তবুও classifier-টা অকেজো না। Baseline একজন fail করা ছাত্রকেও খুঁজে পায় না, আর এটা ২২ জনের মধ্যে ১৮ জনকে ধরে। যদি লক্ষ্য হয় ঝুঁকিতে থাকা ছাত্রদের আগে থেকে সাহায্য করা, তাহলে এটাই বেশি কাজের। আর scaling এখানে accuracy সামান্যই বদলাল (67% → 69%)। শুধু দুটো feature-এ scale-এর প্রভাব ছোট, অনেক feature-এর পরিসর খুব আলাদা হলে প্রভাব অনেক বড় হয়।

শিক্ষা: accuracy একা যথেষ্ট না, সবসময় baseline আর প্রতিটা দলের ফলাফল আলাদা করে দেখো। Machine Learning path-এর evaluation module-এ এর জন্য precision আর recall শিখবে।

বাস্তবে কোথায় ব্যবহার হয়?

scikit-learn-এ তোমার challenge-এর প্রায় হুবহু রূপ আছে। StandardScaler আর NearestCentroid একটা Pipeline-এ জোড়া থাকে, যাতে scaling সবসময় শুধু train data থেকে শেখা হয়:

main.py

দুটো model-ই accuracy-তে baseline-কে হারাতে পারে না। এই dataset-এ বেশিরভাগ ছাত্রই pass করে, আর শুধু দুটো feature দিয়ে দুই দলকে পরিষ্কারভাবে আলাদা করা যায় না। তাই অন্য model ব্যবহার করলেও, আরও ভালো feature বা অন্য মাপকাঠি (recall) ছাড়া ছবিটা বদলায় না।

Interview প্রশ্ন

  • Beginner: L1 আর L2 norm কী? [3,4][3, 4]-এর দুটোই হিসাব করো।
  • Intermediate: KNN-এর আগে feature scaling কেন জরুরি? Decision tree-র ক্ষেত্রে কি জরুরি? (না, কারণ tree প্রতিটা feature আলাদাভাবে ভাগ করে।)
  • Advanced: উচ্চ dimension-এ Euclidean দূরত্বের কী সমস্যা হয় (curse of dimensionality)? সেখানে প্রায়ই cosine কেন ভালো?

এরপর কী?

🎉 Vectors module শেষ: vector, যোগ আর scale, dot product, norm আর দূরত্ব। শেষে শুধু vector-এর অঙ্ক দিয়ে একটা classifier বানালে, আর দেখলে accuracy একা কেন বিভ্রান্তিকর হতে পারে।

পরের module: Matrices। অনেকগুলো vector একসাথে, matrix গুণ (যেটা আসলে অনেকগুলো dot product একসাথে), আর কেন neural network-এর প্রতিটা layer একটা matrix।