Train and Test data ML
📅 May 08, 2026
Jupyter Notebook
🧠 Train Data vs Test Data —¶
🔵 Train Data (Training Data)¶
परिभाषा:
Model लाई pattern र rules सिकाउन प्रयोग गरिने dataset हो। यो data बाट model ले आफ्नो weight adjust गर्छ।
विशेषताहरू:
- Model यही data हेरेर parameters (weights) update गर्छ
- एकै data धेरैपटक (epochs) हेरिन्छ
- Total dataset को 70–80% भाग train को लागि राखिन्छ
- जति quality भएको data, उति राम्रो model बन्छ
📖 उदाहरण: विद्यार्थीले परीक्षाको तयारीका लागि पढ्ने किताब जस्तै
🟠 Test Data (Testing Data)¶
परिभाषा:
Training सकिसकेपछि model को real-world performance मापन गर्न प्रयोग गरिने नयाँ र unseen dataset हो।
विशेषताहरू:
- Model ले यो data training मा कहिल्यै देखेको हुँदैन
- यसमा weight update हुँदैन — evaluation मात्र हुन्छ
- Total dataset को 20–30% भाग test को लागि राखिन्छ
- Model कति राम्ररी generalize गर्न सक्छ भनेर जाँच्छ
📝 उदाहरण: किताब पढिसकेपछि दिइने परीक्षाको प्रश्नपत्र जस्तै
📊 Dataset विभाजन¶
पूरा Dataset (100%)
│
├── 🔵 Train Data ──────────────────── 70–80%
│ └── Model यहाँबाट सिक्छ
│
├── 🟢 Validation Data ──────────────────── 10–15% (optional)
│ └── Training को बीचमा tune गर्न
│
└── 🟠 Test Data ──────────────────── 10–20%
└── Final evaluation को लागि
⚙️ Training Process — कसरी काम गर्छ¶
Input Data → Model → Prediction → Error Calculate → Weight Update
↑ │
└──────────────── बारम्बार दोहोर्याउँछ ───────────────┘
यो process लाई Backpropagation भनिन्छ।
Model गल्ती गरेपछि weight सच्याउँदै जान्छ जबसम्म performance राम्रो नहुन्छ।
⚖️ Train vs Test — तुलना तालिका¶
| विशेषता | Train Data | Test Data |
|---|---|---|
| उद्देश्य | Model सिकाउन | Performance जाँच्न |
| Model ले देख्छ? | ✅ हो — बारम्बार | ❌ पहिलो पटक मात्र |
| Weight Update | ✅ हुन्छ | ❌ हुँदैन |
| Dataset % | ७०–८०% | २०–३०% |
| समय | Training phase | Evaluation phase |
| उदाहरण | किताब पढ्नु | परीक्षा दिनु |
⚠️ महत्वपूर्ण अवधारणाहरू — सावधान!¶
📈 Overfitting¶
Train data मा धेरै राम्रो गर्छ तर Test data मा खराब गर्छ।
Model ले pattern सिकेन — data रट्यो मात्र।
📉 Underfitting¶
Train data मा नै राम्रो नगर्नु — model धेरै simple छ भन्ने संकेत।
🚨 Data Leakage¶
Test data को जानकारी Training मा परेमा model को evaluation गलत हुन्छ।
यो एक गम्भीर गल्ती हो — सधैँ avoid गर्नुपर्छ।
🎯 सार (Summary)¶
| Train Data | Model सिक्ने माध्यम |
| Validation Data | Training बीचमा tune गर्न |
| Test Data | सिकाइको अन्तिम परीक्षा |
💡 याद राख्नुस्: राम्रो ML model को लागि — धेरै र quality भएको Train Data + unseen Test Data दुवै जरुरी छ।
from pandas import read_csv
data1 = read_csv("/Users/shridharmankar/age1.csv")
data1.head()
X = data1['Age']
Y = data1['Income']
sklearn library को model_selection भन्ने module बाट train_test_split function लाई import (ल्याउनु) गर्नु पर्छ।
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state=1)
🎲 random_state र Backpropagation¶
🔷 random_state किन राख्ने?¶
समस्या — random_state नराखेको खण्डमा¶
# हरपटक run गर्दा फरक-फरक data split हुन्छ
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
# Run 1: [row 5, row 2, row 8 ...] → Train मा जान्छ
# Run 2: [row 1, row 9, row 3 ...] → Train मा जान्छ ← फरक!
# Run 3: [row 7, row 4, row 6 ...] → Train मा जान्छ ← फेरि फरक!
⚠️ हरपटक फरक accuracy आउँछ — model reliable छैन भन्न मिल्दैन!
समाधान — random_state राखेको खण्डमा¶
# हरपटक उही split हुन्छ
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2, random_state=42)
# Run 1: [row 5, row 2, row 8 ...] → Train मा जान्छ
# Run 2: [row 5, row 2, row 8 ...] → उही! ✅
# Run 3: [row 5, row 2, row 8 ...] → उही! ✅
✅ हरपटक उही accuracy आउँछ — result reproducible हुन्छ!
random_state को number कति राख्ने?¶
| Number | चल्छ? | कहाँ प्रचलित छ? |
|---|---|---|
0 |
✅ | सामान्य use |
1 |
✅ | सामान्य use |
42 |
✅ | सबैभन्दा popular (convention) |
100 |
✅ | सामान्य use |
999 |
✅ | जुनसुकै number चल्छ |
💡 नियम: जुनसुकै positive integer राख्न मिल्छ।
42 सबैभन्दा popular छ किनभने यो "The Hitchhiker's Guide to the Galaxy" बाट आएको culture हो।
मुख्य कुरा — project भरि एउटै number सधैँ राख्नु!
random_state को 3 वटा मुख्य फाइदा¶
1. Reproducibility → उही code = उही result (कुनै पनि computer मा)
2. Debugging → गल्ती खोज्न सजिलो (data same भएकाले)
3. Fair Comparison → दुई model को result compare गर्न सकिन्छ
🔁 Backpropagation र Randomness¶
Backpropagation भनेको के हो?¶
Forward Pass:
Input → Hidden Layers → Output → Prediction
Error Calculate:
Prediction vs Actual Answer → Loss/Error निकाल्छ
Backward Pass (Backpropagation):
Error लाई पछाडि फर्काउँछ → हरेक weight कति गल्ती भयो हिसाब गर्छ → Weight Update
Backpropagation ले model लाई गल्तीबाट सिक्न मद्दत गर्छ।
Backpropagation मा कहाँ-कहाँ Randomness आउँछ?¶
Backpropagation मा random_state एउटा मात्र होइन — धेरै ठाउँमा randomness हुन्छ:
1️⃣ Weight Initialization (सुरुको weights)¶
# Model सुरु हुँदा weights randomly set हुन्छन्
# random_state नराखेको खण्डमा — हरपटक फरक weights
model = MLPClassifier(hidden_layer_sizes=(100,)) # ❌ random weights
# random_state राखेको खण्डमा — उही weights बाट सुरु
model = MLPClassifier(hidden_layer_sizes=(100,), random_state=42) # ✅
सुरुको weights फरक भए → training को बाटो फरक → final result फरक
2️⃣ Data Split को Randomness (train_test_split)¶
# यहाँ पनि random_state राख्नुपर्छ
X_train, X_test, y_train, y_test = train_test_split(
X, Y,
test_size=0.2,
random_state=42 # ← यो
)
3️⃣ Mini-Batch को Randomness (SGD)¶
# Stochastic Gradient Descent मा data randomly shuffle हुन्छ
# प्रत्येक epoch मा फरक order मा data आउँछ
model = SGDClassifier(random_state=42) # ← यहाँ पनि राख्नुपर्छ
4️⃣ Dropout को Randomness (Neural Network मा)¶
# Training मा randomly केही neurons बन्द हुन्छन्
# random_state नराखेको खण्डमा हरपटक फरक neurons बन्द हुन्छन्
model = MLPClassifier(random_state=42) # ← control हुन्छ
के Backpropagation को लागि random_state change गर्दै जानुपर्छ?¶
❌ गलत सोच: random_state = 1, 2, 3 ... बदल्दै जानुपर्छ
✅ सही सोच: एउटै random_state सधैँ राख्नुपर्छ
किन?
# ❌ गलत तरिका — random_state बदल्दै जाने
for i in range(10):
model = MLPClassifier(random_state=i) # हरपटक फरक
model.fit(X_train, y_train)
# यसले model compare गर्न गाह्रो बनाउँछ
# ✅ सही तरिका — एउटै राख्ने
model = MLPClassifier(random_state=42) # fix गर्ने
model.fit(X_train, y_train) # Backpropagation आफैँ handle गर्छ
Backpropagation ले आफ्नै algorithm अनुसार weights update गर्छ —
random_state बदल्नु पर्दैन, बरु fix गर्नु पर्छ!
Backpropagation आफैँ के-के adjust गर्छ?¶
random_state fix गरेपछि Backpropagation ले automatically:
├── Learning Rate → कति ठूलो step लिने हिसाब गर्छ
├── Gradient → कुन direction मा जाने निर्धारण गर्छ
├── Weights → हरेक epoch मा update गर्छ
└── Bias → model लाई flexible बनाउन adjust गर्छ
📋 सम्पूर्ण Randomness Summary¶
| कहाँ | के गर्छ | कसरी fix गर्ने |
|---|---|---|
train_test_split |
Data split | random_state=42 |
MLPClassifier |
Weight initialization | random_state=42 |
SGDClassifier |
Data shuffle (mini-batch) | random_state=42 |
RandomForest |
Tree building | random_state=42 |
KMeans |
Cluster center initialization | random_state=42 |
💡 Golden Rule: जहाँ-जहाँ
random_stateparameter छ — उही number राख्नुस्!
🎯 Final सार¶
random_state राख्नुको कारण:
→ Result reproducible हुन्छ
→ Debugging सजिलो हुन्छ
→ Fair comparison हुन्छ
random_state को number:
→ जुनसुकै integer चल्छ
→ 42 सबैभन्दा popular
→ Project भरि एउटै राख्नुस्
Backpropagation को लागि:
→ random_state बदल्नु पर्दैन
→ एकपटक fix गरेपछि Backpropagation आफैँ सिक्छ
→ Weight, Gradient, Learning Rate सबै automatic
print(X_train,'\n')
print(X_test,'\n')
print(y_train,'\n')
print(y_test,'\n')
, random_state=1
shuffle=False
import pandas as pd
data = pd.read_csv("")
data.head()
x = data[['sepal_length','sepal_width','petal_length','petal_width']]
y = data['species']
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, shuffle=False)
print(X_train,'\n')
print(X_test,'\n')
print(y_train,'\n')
print(y_test,'\n')
data.describe()