Nearest neighbours
किसी नए उदाहरण को लेबल करने के लिए, अपने पहले से मौजूद सबसे मिलते-जुलते उदाहरण खोजें और उनका वोट लें। यह तरीका आसान है, असरदार है, और स्केल (माप) के प्रति बहुत संवेदनशील है।
60 सेकंड में
Nearest neighbours
किसी नए उदाहरण को लेबल करने के लिए, अपने पहले से मौजूद सबसे मिलते-जुलते उदाहरण खोजें और उनका वोट लें। यह तरीका आसान है, असरदार है, और स्केल (माप) के प्रति बहुत संवेदनशील है।
import numpy as np
# Made-up fruits: (weight in grams, sweetness 1-10) and their kind
points = np.array([[120, 7], [130, 8], [115, 6], [300, 3], [320, 2], [290, 4]])
kinds = np.array(["guava", "guava", "guava", "papaya", "papaya", "papaya"])
new = np.array([140, 6])
dist = np.sqrt(((points - new) ** 2).sum(axis=1)) # straight-line distance
order = np.argsort(dist)
k = 3
print("Distances:", dist.round(1))
print("The", k, "nearest:", kinds[order[:k]])
values, counts = np.unique(kinds[order[:k]], return_counts=True)
print("Vote:", values[np.argmax(counts)])k चुनना
| k | क्या होता है |
|---|---|
| 1 | सिर्फ एक सबसे करीबी उदाहरण की नकल करता है। यह नॉइज़ (अनावश्यक डेटा) और अजीब उदाहरणों के प्रति बहुत संवेदनशील होता है। |
| मध्यम (उदाहरण के लिए 5 से 15) | नॉइज़ को कम करके संतुलित करता है। अक्सर यह एक अच्छी रेंज होती है। |
| बहुत बड़ा | लोकल जानकारी को नज़रअंदाज़ कर देता है और कुल मिलाकर सबसे आम लेबल की तरफ झुक जाता है। |
सबसे बड़ा जाल: स्केल
StandardScaler के साथ। बिना स्केलिंग के, मॉडल चुपचाप आपके ज़्यादातर फीचर्स को नज़रअंदाज़ कर सकता है। इस पाठ की लैब में आप देखेंगे कि यह फर्क कितना बड़ा हो सकता है।k-NN कहाँ सही बैठता है
- जब बहुत सारे उदाहरण हों तो अनुमान लगाने में धीमा होता है, क्योंकि यह उन सभी के साथ तुलना करता है
- जब बहुत सारे फीचर्स हों तो जूझता है
- इसे स्केलिंग और एक सही दूरी के तरीके की ज़रूरत होती है
- समझाना बहुत आसान है: "इन मिलते-जुलते मामलों में यह लेबल था"
- ट्रेनिंग में कोई समय नहीं लगता
- नए उदाहरण जोड़ना तुरंत हो जाता है
points / [100, 1] और new / [100, 1])। क्या nearest neighbours बदल जाते हैं?और देखें और पढ़ें
लैब
शराब (wine) के डेटा पर वही 5-nearest-neighbour मॉडल, स्केलिंग के साथ और बिना स्केलिंग के, और उनके बीच का अंतर।
समस्या
- शुरुआती कोड चलाएँ। यह बिना स्केल किए गए वाइन फीचर्स पर k = 5 के साथ k-NN को फिट करता है और टेस्ट एक्यूरेसी प्रिंट करता है।
scaled_modelबनाएँ: पहलेStandardScalerऔर फिरKNeighborsClassifier(n_neighbors=5)की एक पाइपलाइन। इसे ट्रेनिंग पंक्तियों पर फिट करें।- इसकी टेस्ट एक्यूरेसी को
scaled_accमें सेट करें। - दोनों एक्यूरेसी प्रिंट करें। फिर
X_train.max(axis=0)को देखें: किस फीचर के मान सबसे बड़े हैं, और यह बिना स्केल किए गए मॉडल को नुकसान क्यों पहुँचाता है?
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1स्केलर को केवल ट्रेनिंग पंक्तियों पर ही क्यों फिट किया जाना चाहिए, और पाइपलाइन यह कैसे पक्का करती है?दिखाएं
स्केलर हर फीचर के औसत और फैलाव (spread) को सीखता है। अगर यह टेस्ट पंक्तियों को देख ले, तो टेस्ट की कुछ जानकारी ट्रेनिंग को प्रभावित करेगी, और टेस्ट स्कोर असलियत से थोड़ा ज़्यादा अच्छा दिखेगा। पाइपलाइन का fit केवल उसी डेटा को देखता है जो आप उसे देते हैं (ट्रेनिंग पंक्तियाँ) और फिर जब आप नई पंक्तियों पर score या predict कॉल करते हैं, तो उन्हीं सीखे हुए नंबरों का दोबारा इस्तेमाल करता है।
Q2क्या स्केलिंग हमेशा सही समाधान होती है? यह कब नुकसान पहुँचा सकती है?दिखाएं
स्केलिंग हर फीचर को बराबर महत्व देती है। यदि कुछ फीचर्स केवल नॉइज़ (बेकार डेटा) हैं, तो उन्हें बराबर महत्व देने से नुकसान हो सकता है, क्योंकि अब वे भी काम के फीचर्स जितना ही दूरी पर असर डालते हैं। ऐसे में आपको नॉइज़ वाले फीचर्स हटाने पड़ सकते हैं, या ऐसा मॉडल इस्तेमाल करना पड़ सकता है जो खुद फीचर्स चुनता है, जैसे कि रैंडम फॉरेस्ट।
अक्सर पूछे जाने वाले सवाल
scikit-learn किस दूरी का इस्तेमाल करता है?
डिफ़ॉल्ट रूप से, साधारण सीधी-रेखा वाली (यूक्लिडियन) दूरी। अन्य दूरियाँ metric सेटिंग के ज़रिए उपलब्ध हैं।
अगर वोट बराबर (टाई) हो जाए तो क्या होगा?
दो ग्रुप्स के लिए विषम (odd) k का इस्तेमाल करना मददगार होता है। टाई तोड़ने के लिए scikit-learn का एक तय नियम होता है, और आप weights="distance" के साथ पास के पड़ोसियों को ज़्यादा महत्व भी दे सकते हैं।
क्या k-NN का इस्तेमाल असली प्रोडक्ट्स में होता है?
यह विचार हर जगह है: "आप जैसे ग्राहकों ने यह भी खरीदा", और AI ऐप्स में वेक्टर सर्च। बड़े सिस्टम हर उदाहरण से तुलना करने के बजाय तेज़ अनुमानित (approximate) सर्च का इस्तेमाल करते हैं।
क्या k-NN रिग्रेशन कर सकता है?
हाँ। KNeighborsRegressor सबसे करीबी k उदाहरणों के औसत लेबल का अनुमान लगाता है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।