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 যেটা দরকার হলে হুবহু আবার তৈরি করা যায়:
একই 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: আধুনিক উপায়
| 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
প্রায় ৬৮% মান গড় থেকে ১ std-এর মধ্যে — normal distribution-এর বিখ্যাত নিয়ম। (Graph-এর title English-এ রেখেছি — Matplotlib-এর default font-এ বাংলা অক্ষর নেই।)
Shuffle আর permutation
দুটো সম্পর্কিত array (নাম আর নম্বর) একসাথে এলোমেলো করতে permutation বানিয়ে দুটোতেই প্রয়োগ করো।
Exercise
Exercise
Dice simulation
rng = np.random.default_rng(42) দিয়ে একটা ছক্কা (1 থেকে 6) 10,000 বার নিক্ষেপ simulate করো — rolls array-তে রাখো।
তারপর six_ratio = কত ভাগ নিক্ষেপে 6 এসেছে (0 থেকে 1)। তত্ত্ব অনুযায়ী এটা ১/৬ ≈ 0.167-এর কাছাকাছি হওয়া উচিত।
Quiz
Challenge
Challenge
Shuffle করে train/test ভাগ
train_test_split(X, y, test_ratio, seed) লেখো — scikit-learn-এর বিখ্যাত function-এর নিজের সংস্করণ:
np.random.default_rng(seed)দিয়ে row-গুলোর একটা random ক্রম (permutation) বানাও- X আর y একই ক্রমে সাজাও (নাহলে feature আর label-এর জোড়া ভেঙে যাবে!)
- শেষের
int(len(X) * test_ratio)টা test, বাকি train - Return:
X_train, X_test, y_train, y_test
একই seed দিলে সবসময় একই ভাগ।
বাস্তবে কোথায় ব্যবহার হয়?
Synthetic data দিয়ে একটা algorithm পরীক্ষা করা — আসল সম্পর্ক আমরা জানি, তাই model সেটা খুঁজে পায় কিনা যাচাই করা যায়:
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।