মূল content-এ যাও

Python for AI/NumPy/Lesson 39

Random Numbers

np.random.default_rng দিয়ে reproducible random — uniform, integers, normal distribution, choice, permutation; আর data shuffle করে train/test ভাগ করা ঠিক যেভাবে scikit-learn করে।

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

সহজ ভাষায়

ML-এ random সবখানে — কিন্তু এমন random যেটা দরকার হলে হুবহু আবার তৈরি করা যায়:

main.py

একই seed (42) দিয়ে আবার শুরু করলে হুবহু একই সংখ্যা। একে বলে reproducibility।

কেন দরকার?

  • Data shuffle — train আর test-এ data এলোমেলোভাবে ভাগ করা
  • Weight initialization — neural network শুরু হয় random weight দিয়ে
  • Dropout, data augmentation — training-এ random ইচ্ছাকৃতভাবে ব্যবহার
  • Simulation — synthetic data বানিয়ে algorithm পরীক্ষা

আর reproducibility কেন? ধরো তোমার model আজ 89% accuracy দিল, কাল 84%। কোডে কিছু বদলাওনি — শুধু random আলাদা ছিল। Seed ঠিক না রাখলে কোন পরিবর্তন সত্যিই উন্নতি এনেছে বোঝা অসম্ভব।

Generator: আধুনিক উপায়

main.py
Methodকী দেয়
rng.random(n)0 থেকে 1-এর মধ্যে
rng.uniform(a, b, n)a থেকে b-এর মধ্যে সমানভাবে
rng.integers(a, b, n)a থেকে b−1 পূর্ণসংখ্যা
rng.normal(mean, std, n)bell curve
rng.choice(items, n)তালিকা থেকে বাছাই
rng.permutation(n)0..n−1 এলোমেলো ক্রমে

পুরনো code-এ দেখবে np.random.seed(42) আর np.random.rand() — এটা legacy API। নতুন code-এ default_rng ব্যবহার করো: এর algorithm ভালো, আর প্রতিটা generator স্বাধীন।

Normal distribution

main.py

প্রায় ৬৮% মান গড় থেকে ১ std-এর মধ্যে — normal distribution-এর বিখ্যাত নিয়ম। (Graph-এর title English-এ রেখেছি — Matplotlib-এর default font-এ বাংলা অক্ষর নেই।)

Shuffle আর permutation

main.py

দুটো সম্পর্কিত array (নাম আর নম্বর) একসাথে এলোমেলো করতে permutation বানিয়ে দুটোতেই প্রয়োগ করো।

Exercise

Exercise

Dice simulation

+20 XP

rng = np.random.default_rng(42) দিয়ে একটা ছক্কা (1 থেকে 6) 10,000 বার নিক্ষেপ simulate করো — rolls array-তে রাখো।

তারপর six_ratio = কত ভাগ নিক্ষেপে 6 এসেছে (0 থেকে 1)। তত্ত্ব অনুযায়ী এটা ১/৬ ≈ 0.167-এর কাছাকাছি হওয়া উচিত।

solution.py

Quiz

  1. Q1Seed দিলে কী হয়?
  2. Q2rng.normal(loc=170, scale=10, size=1000) কী দেয়?
  3. Q3X আর y আলাদা আলাদা rng.shuffle করলে কী সমস্যা?
0/3 answered

Challenge

Challenge

Shuffle করে train/test ভাগ

+50 XP

train_test_split(X, y, test_ratio, seed) লেখো — scikit-learn-এর বিখ্যাত function-এর নিজের সংস্করণ:

  1. np.random.default_rng(seed) দিয়ে row-গুলোর একটা random ক্রম (permutation) বানাও
  2. X আর y একই ক্রমে সাজাও (নাহলে feature আর label-এর জোড়া ভেঙে যাবে!)
  3. শেষের int(len(X) * test_ratio)টা test, বাকি train
  4. Return: X_train, X_test, y_train, y_test

একই seed দিলে সবসময় একই ভাগ।

solution.py

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

Synthetic data দিয়ে একটা algorithm পরীক্ষা করা — আসল সম্পর্ক আমরা জানি, তাই model সেটা খুঁজে পায় কিনা যাচাই করা যায়:

main.py

Noise থাকা সত্ত্বেও line fitting প্রায় আসল সূত্রটাই খুঁজে পেল। এটাই linear regression — পরের lesson-এ এর পেছনের linear algebra দেখবো।

Interview প্রশ্ন

  • Beginner: Random seed কী? কেন ব্যবহার করবে?
  • Intermediate: np.random.seed() (legacy) আর np.random.default_rng()-এর পার্থক্য কী?
  • Advanced: Train/test split-এ "stratified" sampling কী? Imbalanced dataset-এ কেন দরকার?

এরপর কী?

Neural network আসলে অনেকগুলো matrix গুণ। Linear regression-এর সমাধানও একটা matrix সমীকরণ। NumPy module-এর শেষ lesson: Linear Algebra Basics।