मशीन लर्निंग के बुनियादी सिद्धांतमध्यमपाठ 1186 मिनट का पाठ

प्रोजेक्ट: बारिश से फसल की पैदावार का अनुमान लगाना

काल्पनिक डेटा पर एक शुरू-से-अंत तक का प्रोजेक्ट: डेटा को समझना, अलग करना (split), एक बेसलाइन तय करना, एक सीधी रेखा और एक कर्व आज़माना, और नतीजे ईमानदारी से पेश करना।

पाठ वीडियो में

60 सेकंड में

प्रोजेक्ट: बारिश से फसल की पैदावार का अनुमान लगाना

काल्पनिक डेटा पर एक शुरू-से-अंत तक का प्रोजेक्ट: डेटा को समझना, अलग करना (split), एक बेसलाइन तय करना, एक सीधी रेखा और एक कर्व आज़माना, और नतीजे ईमानदारी से पेश करना।

1/5
आसान शब्दों में
किसान जानते हैं कि फसल को बारिश की ज़रूरत होती है, लेकिन बहुत ज़्यादा बारिश उसे डुबो भी सकती है। अगर आप एक तरफ बारिश और दूसरी तरफ पैदावार का ग्राफ बनाएं, तो आपको सीधी रेखा नहीं मिलेगी; आपको एक पहाड़ी (hill) जैसा आकार मिलेगा। इस प्रोजेक्ट में आप कंप्यूटर को उदाहरणों से वह पहाड़ी ढूंढना सिखाते हैं, और फिर ईमानदारी से जांचते हैं कि उसके अनुमान कितने सही हैं।
ख़तरा
इस पाठ का सारा डेटा काल्पनिक है, जिसे एक तय रैंडम सीड वाले फॉर्मूले से बनाया गया है। यह किसी भी जगह या फसल के लिए बारिश या पैदावार का असली डेटा नहीं है, और इन नंबरों का इस्तेमाल खेती से जुड़े किसी भी फैसले के लिए नहीं किया जाना चाहिए। असली पैदावार मिट्टी, बीज, सिंचाई, कीड़ों, समय और कई अन्य चीज़ों पर निर्भर करती है।

प्रोजेक्ट की योजना

  1. 1

    सवाल तय करें

    मौसमी बारिश (काल्पनिक mm) के आधार पर प्रति खेत पैदावार (काल्पनिक टन प्रति हेक्टेयर) का अनुमान लगाएं।
  2. 2

    डेटा को देखें

    इसका ग्राफ (plot) बनाएं। रेंज, छूटे हुए मान (missing values) और अजीब पॉइंट्स की जांच करें।
  3. 3

    अलग करें (Split)

    किसी भी मॉडलिंग से पहले एक टेस्ट सेट अलग रख लें।
  4. 4

    बेसलाइन

    हर खेत के लिए ट्रेनिंग डेटा के औसत का अनुमान लगाएं।
  5. 5

    मॉडल

    पहले एक सीधी रेखा आज़माएं, फिर एक कर्व। सिर्फ ट्रेनिंग डेटा का इस्तेमाल करके मॉडल चुनें।
  6. 6

    एक बार टेस्ट करें

    चुने गए मॉडल को टेस्ट सेट पर स्कोर करें।
  7. 7

    ईमानदारी से रिपोर्ट करें

    नंबर, बेसलाइन, सीमाएं और डेटा क्या है, यह सब बताएं।

मॉडलिंग से पहले डेटा देखें

Python: make and plot the made-up datapython
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# MADE-UP data from a formula with noise. Not real measurements.
rng = np.random.default_rng(42)
n = 200
rain_mm = rng.uniform(300, 1500, n)
yield_t = 1.0 + 0.006 * rain_mm - 0.0000032 * rain_mm ** 2 + rng.normal(0, 0.35, n)
fields = pd.DataFrame({"rain_mm": rain_mm, "yield_t_per_ha": yield_t})

print(fields.describe().round(2))
print("Missing values:", int(fields.isna().sum().sum()))
plt.scatter(fields["rain_mm"], fields["yield_t_per_ha"], s=12)
plt.xlabel("seasonal rainfall (mm, made up)")
plt.ylabel("yield (t/ha, made up)")
plt.title("Made-up data for practice")
ग्राफ एक पहाड़ी दिखाता है: बारिश के साथ पैदावार बढ़ती है, अपने चरम पर पहुंचती है, और फिर घटती है। इससे पहले ही पता चल जाता है कि एक सीधी रेखा को परेशानी होगी।

लीनियर मॉडल को मुड़ने देना

सीधी रेखा का रूप a × rain + b होता है। अगर हम इसे दूसरे फीचर के तौर पर rain² भी दे दें, तो यह a × rain + c × rain² + b बन जाता है, जो एक पहाड़ी बना सकता है। scikit-learn का PolynomialFeatures(degree=2) आपके लिए स्क्वायर वाला कॉलम जोड़ देता है। मॉडल अपने भारों (weights) में अब भी "लीनियर" ही रहता है, लेकिन इसका आकार मुड़ सकता है।
मॉडलयह क्या बना सकता हैजोखिम
बेसलाइन (औसत)एक सपाट (flat) रेखाबारिश को पूरी तरह नज़रअंदाज़ करता है
लीनियर रिग्रेशनएक सीधी ढलान वाली रेखापहाड़ी के आकार का पीछा नहीं कर सकता
डिग्री-2 पॉलीनोमियलएक चिकनी पहाड़ी या घाटीयहाँ के लिए ठीक है; अगर असली आकार अलग हुआ तो गलत होगा
रैंडम फ़ॉरेस्टसीढ़ियों जैसे स्टेप्स जो डेटा का पीछा करते हैंकम डेटा होने पर बहुत ज़्यादा उतार-चढ़ाव वाला हो सकता है

ईमानदारी से रिपोर्ट करें

  • बताएं कि डेटा काल्पनिक है, और इसे कैसे बनाया गया था।
  • लेबल की यूनिट में टेस्ट एरर और बेसलाइन एरर दोनों दें।
  • बताएं कि आपने मॉडल कैसे चुना, और टेस्ट सेट का इस्तेमाल सिर्फ एक बार किया गया था।
  • उन चीज़ों की सूची बनाएं जिन्हें मॉडल नज़रअंदाज़ करता है: यहाँ, बारिश के अलावा सब कुछ।
  • कार्य-कारण (cause and effect) का दावा न करें, या यह न कहें कि यह कहीं भी काम करेगा।
असली उदाहरण
छात्रों की एक टीम अपने जिले के असली डेटा पर एक पैदावार मॉडल बनाती है। यह उनके टेस्ट सेट पर अच्छा प्रदर्शन करता है। लेकिन सारा डेटा सामान्य बारिश वाले तीन सालों से आता है। सूखे के साल में, मॉडल अपनी देखी गई सीमा से बहुत बाहर का अनुमान लगा रहा होगा। उनकी ईमानदार रिपोर्ट कहती है: "केवल X और Y mm के बीच की बारिश के लिए टेस्ट किया गया। सूखे के सालों में टेस्ट नहीं किया गया।" यह एक वाक्य किसी को गलत फैसले से बचा सकता है।
यह आज़माएं। कोड में, नॉइज़ को 0.35 से बदलकर 0.1 करें, फिर 1.0 करें। हर बार पहाड़ी कितनी साफ दिखती है?

और देखें और पढ़ें

लैब

काल्पनिक डेटा पर एक पूरा, ईमानदार मिनी-प्रोजेक्ट: टेस्ट सेट अलग रखा गया, बेसलाइन, सीधी रेखा, क्रॉस-वैलिडेशन से चुना गया कर्व, एक अंतिम टेस्ट स्कोर।

~40 min

समस्या

शुरुआती कोड काल्पनिक बारिश और पैदावार का डेटा बनाता है और एक टेस्ट सेट को अलग रख देता है। बाकी काम आप करें:

  1. baseline_mae सेट करें: जब आप हर टेस्ट खेत के लिए ट्रेनिंग औसत का अनुमान लगाते हैं, तो मिलने वाला टेस्ट एरर।
  2. सिर्फ ट्रेनिंग पंक्तियों पर 5-फोल्ड क्रॉस-वैलिडेशन के साथ दो विकल्पों की तुलना करें: LinearRegression() और PolynomialFeatures(degree=2) के बाद LinearRegression() की पाइपलाइन। scoring="neg_mean_absolute_error" का इस्तेमाल करें। औसत CV MAE को (एक धनात्मक संख्या के रूप में) cv_mae["line"] और cv_mae["curve"] में स्टोर करें।
  3. कम CV MAE वाले विकल्प को चुनें, इसे सभी ट्रेनिंग पंक्तियों पर फिट करें, और इसे best_model नाम दें।
  4. अब और केवल अब, best_mae को इसके टेस्ट MAE पर सेट करें।
  5. तीन लाइनों की एक रिपोर्ट प्रिंट करें: डेटा काल्पनिक है; बेसलाइन बनाम मॉडल का टेस्ट एरर; बारिश की वह रेंज जिस पर मॉडल का टेस्ट किया गया था।

प्रैक्टिस लैब

कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।

आउटपुट

कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1आप यहाँ असली फॉर्मूला जानते हैं, क्योंकि डेटा आपने ही बनाया है। इससे आपको अपने तरीके का आकलन करने में कैसे मदद मिलती है, और आप असली डेटा के साथ ऐसा कभी क्यों नहीं कर सकते?दिखाएं

आप जांच सकते हैं कि मॉडल ने असली आकार ढूंढ लिया या नहीं: फिट किया गया कर्व वहीं पीक पर होना चाहिए जहाँ फॉर्मूला पीक पर पहुँचता है (यहाँ 950 mm से थोड़ा कम)। इससे आपको पता चलता है कि पैटर्न मालूम होने पर यह तरीका काम करता है। असली डेटा के साथ असली नियम पता नहीं होता, इसलिए आप केवल अनदेखे डेटा पर ईमानदार टेस्ट से ही अंदाज़ा लगा सकते हैं, इसीलिए इस कोर्स की आदतें मायने रखती हैं।

Q2एक दोस्त विकल्पों में डिग्री 10 जोड़ने का सुझाव देता है क्योंकि "जितना ज़्यादा फ्लेक्सिबल, उतना बेहतर"। आप क्या उम्मीद करेंगे, और यह प्रक्रिया आपकी रक्षा कैसे करेगी?दिखाएं

एक डिग्री-10 कर्व नॉइज़ में फिट होने के लिए बहुत ज़्यादा मुड़ सकता है, खासकर डेटा के किनारों के पास, इसलिए यह संभवतः ओवरफिट हो जाएगा (और बारिश की बड़ी घातें बिना स्केलिंग के संख्यात्मक समस्याएँ पैदा कर सकती हैं)। क्योंकि आप ट्रेनिंग पंक्तियों पर क्रॉस-वैलिडेशन से चुनाव करते हैं, इसलिए जो मॉडल ओवरफिट होगा वह खराब CV एरर दिखाएगा और उसे नहीं चुना जाएगा। अलग रखा गया टेस्ट सेट हर हाल में एक अंतिम निष्पक्ष जांच देता है।

जारी रखने के लिए कृपया साइन इन करें।

अक्सर पूछे जाने वाले सवाल

फसल का असली डेटा इस्तेमाल क्यों न करें?

असली डेटा ही अंतिम लक्ष्य है, लेकिन इसमें सावधानी चाहिए: अनुमति, सफ़ाई और कई अन्य फीचर्स। काल्पनिक डेटा आपको तब सारे कदम सीखने देता है जब आपको असली पैटर्न पहले से पता होता है, ताकि आप देख सकें कि आपका मॉडल उसे ढूंढ पाता है या नहीं। जब आप असली डेटा पर जाएं, तो स्रोत और उसके लाइसेंस की जांच करें, और ज़्यादा गड़बड़ी की उम्मीद रखें।

टेस्ट सेट को छुए बिना मैं सीधी रेखा और कर्व के बीच कैसे चुनूं?

ट्रेनिंग पंक्तियों पर क्रॉस-वैलिडेशन का इस्तेमाल करें। हर मॉडल के औसत एरर की तुलना करें, बेहतर मॉडल चुनें, और उसके बाद ही टेस्ट सेट पर एक बार उसका स्कोर निकालें।

क्या होगा अगर मॉडल का इस्तेमाल डेटा की रेंज के बाहर किया जाए?

ट्रेनिंग में देखी गई रेंज से बाहर के अनुमान सिर्फ अंदाज़े होते हैं। डिग्री-2 कर्व डेटा से परे हमेशा के लिए गिरता (या बढ़ता) रहता है। हमेशा वह रेंज बताएं जिस पर मॉडल को ट्रेन और टेस्ट किया गया था।

क्या कम एरर हमेशा बेहतर होता है?

कम टेस्ट एरर बेहतर होता है अगर टेस्ट निष्पक्ष हो। लेकिन सादगी पर भी विचार करें, यह भी देखें कि अलग-अलग स्प्लिट्स में नतीजा कितना स्थिर रहता है, और क्या लोग मॉडल को समझ और जांच सकते हैं।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें