सेब के पेड़ों में अच्छे फल और कीड़े, काफ़ी गंदगी होती है. इसके बावजूद, किराने की महंगी दुकानों सेबों में 100% बेहतरीन फल मिलते हैं. बाग और किराने के बीच में, कोई खराब सेबों को हटाने में बहुत अच्छा समय बिताता है या बचाई जा सकने वाली चीज़ों पर थोड़ा मोम फेंक देता है. एक एमएल इंजीनियर के तौर पर, आपको अपना बहुत सारा समय खराब उदाहरण को मिटाने और साल भर खत्म होने वाले उदाहरणों को साफ़ करने में लगाना होगा. कुछ "खराब सेब" भी बड़े डेटा सेट को खराब कर सकते हैं.
सुविधा के मानों को बढ़ाना
स्केलिंग का मतलब है, फ़्लोटिंग-पॉइंट सुविधा की वैल्यू को उनकी नैचुरल रेंज (जैसे कि 100 से 900) को स्टैंडर्ड रेंज (जैसे कि 0 से 1 या -1 से +1) में बदलना. अगर किसी सुविधा सेट में सिर्फ़ एक सुविधा होती है, तो स्केलिंग से बहुत कम या कोई व्यावहारिक फ़ायदा नहीं होता. हालांकि, अगर किसी सुविधा सेट में कई सुविधाएं हैं, तो सुविधा स्केलिंग से ये फ़ायदे मिलते हैं:
- ग्रेडिएंट वंशावली को ज़्यादा तेज़ी से अभिसरण करने में सहायता करता है.
- "NaN ट्रैप" से बचने में मदद करता है.मॉडल में मौजूद कोई संख्या NaN बन जाती है (उदाहरण के लिए, जब ट्रेनिंग के दौरान कोई वैल्यू, फ़्लोटिंग-पॉइंट के सटीक होने की सीमा से ज़्यादा हो जाती है). गणित की ऑपरेशन की वजह से, मॉडल में मौजूद हर दूसरी संख्या भी आखिरकार NaN बन जाती है.
- इससे मॉडल को हर सुविधा के लिए सही मोटाई जानने में मदद मिलती है. फ़ीचर स्केलिंग के बिना, मॉडल ज़्यादा रेंज वाली सुविधाओं पर बहुत ज़्यादा ध्यान देगा.
यह ज़रूरी नहीं है कि हर फ़्लोटिंग-पॉइंट सुविधा के लिए, आपको एक ही तरह का स्केल दिया जाए. अगर सुविधा A को -1 से +1 कर दिया जाता है और सुविधा B को -3 से +3 कर दिया जाता है, तो कुछ भी भयानक नहीं होगा. हालांकि, अगर सुविधा B को 5,000 से 10,0000 के स्केल पर सेट किया जाता है, तो आपका मॉडल ठीक से काम नहीं करेगा.
एक्स्ट्रीम आउटलायर्स को हैंडल करना
नीचे दिया गया प्लॉट, कैलिफ़ोर्निया हाउसिंग डेटा सेट से roomsPerPerson
नाम की सुविधा के बारे में बताता है.
roomsPerPerson
के मान का हिसाब, किसी इलाके की कुल संख्या को उस इलाके की जनसंख्या से भाग देकर लगाया जाता है. कहानी में दिखाया गया है कि कैलिफ़ोर्निया के ज़्यादातर
इलाकों में एक व्यक्ति के लिए एक या दो कमरे हैं. लेकिन x-ऐक्सिस
पर एक नज़र डालें.
चौथा डायग्राम. वर्री लोन्नंग टेल.
हम उन बेहद बाहरी लोगों के असर को कैसे कम कर सकते हैं? वैसे, हर वैल्यू का लॉग लेने का एक तरीका है:
पांचवीं इमेज. लॉगारिद्मिक स्केलिंग में अब भी कोई टेल नहीं दिखता.
लॉग स्केलिंग थोड़ा बेहतर काम करती है, लेकिन फिर भी बाहरी वैल्यू में बहुत कुछ
है. आइए, कोई और तरीका चुनें. क्या होगा अगर हम roomsPerPerson
की ज़्यादा से ज़्यादा वैल्यू को किसी आर्बिट्रेरी वैल्यू, जैसे कि 4.0 पर "कैप" या "क्लिप" करें?
छठा डायग्राम. क्लिप बनाने की सुविधा की वैल्यू 4.0 पर
सुविधा की वैल्यू को 4.0 पर क्लिप करने का यह मतलब नहीं है कि हम 4.0 से बड़ी सभी वैल्यू को अनदेखा कर देते हैं. इसका मतलब यह है कि 4.0 से बड़ी सभी वैल्यू अब 4.0 हो जाती हैं. यह 4.0 बजे वाले मज़ेदार पहाड़ी के बारे में बताता है. इसके बावजूद, स्केल की गई सुविधा का सेट, अब ओरिजनल डेटा से ज़्यादा काम का है.
बिनिंग
नीचे दिए गए प्लॉट में, कैलिफ़ोर्निया के अलग-अलग अक्षांशों पर घरों की संख्या दिखाई गई है. क्लस्टरिंग पर ध्यान दें—लॉस एंजिलिस, अक्षांश 34 पर है और सैन फ़्रांसिस्को करीब अक्षांश 38 पर है.
सातवां डायग्राम. हर अक्षांश के हिसाब से घर.
डेटा सेट में, latitude
एक फ़्लोटिंग-पॉइंट वैल्यू है. हालांकि, हमारे मॉडल में latitude
को फ़्लोटिंग-पॉइंट सुविधा के तौर पर दिखाने का कोई मतलब नहीं है.
ऐसा इसलिए, क्योंकि अक्षांश और हाउसिंग वैल्यू के बीच कोई लीनियर संबंध मौजूद नहीं होता है. उदाहरण के लिए, अक्षांश 35 वाले घर, अक्षांश 34 पर मौजूद घरों के मुकाबले \(\frac{35}{34}\) ज़्यादा महंगे (या कम महंगे) नहीं होते. फिर भी, अलग-अलग अक्षांश
घर के मानों का काफ़ी अच्छा अनुमान लगाते हैं.
अक्षांश को मददगार अनुमान लगाने के लिए, आइए अक्षांश को "बिन" में बांटते हैं, जैसा कि नीचे दिए गए डायग्राम में सुझाया गया है:
आठवां इमेज. बिनिंग वैल्यू.
एक फ़्लोटिंग-पॉइंट सुविधा होने के बजाय, अब हमारे पास 11 अलग-अलग बूलियन फ़ीचर (LatitudeBin1
, LatitudeBin2
, ..., LatitudeBin11
) हैं.
11 अलग-अलग सुविधाओं का होना काफ़ी मुश्किल है. इसलिए, आइए उन्हें एक ही 11-एलिमेंट वेक्टर में जोड़ दें. ऐसा करने से हम अक्षांश 37.4 को
इस तरह दिखा पाएंगे:
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
बाइंडिंग की वजह से, हमारा मॉडल अब हर अक्षांश के लिए पूरी तरह से अलग-अलग वज़न सीख सकता है.
स्क्रबिंग
अब तक, हम यह मानते थे कि ट्रेनिंग और टेस्टिंग के लिए इस्तेमाल किया जाने वाला सारा डेटा भरोसेमंद होता है. असल ज़िंदगी में, डेटा सेट के कई उदाहरण इन एक या इससे ज़्यादा वजहों से भरोसेमंद नहीं होते:
- हटाई गई वैल्यू. उदाहरण के लिए, कोई व्यक्ति घर की उम्र के हिसाब से वैल्यू डालना भूल गया.
- डुप्लीकेट उदाहरण. उदाहरण के लिए, किसी सर्वर ने गलती से एक ही लॉग दो बार अपलोड कर दिया है.
- खराब लेबल. जैसे, किसी व्यक्ति ने ओक के पेड़ की तस्वीर को मेपल के तौर पर गलत लेबल किया.
- खराब सुविधा वाली वैल्यू. उदाहरण के लिए, किसी व्यक्ति ने अतिरिक्त अंक टाइप किया या धूप में कोई थर्मामीटर छूट गया था.
पता चलने के बाद, आप खराब उदाहरणों को डेटा सेट से हटाकर उन्हें "ठीक" कर लेते हैं. हटाए गए वैल्यू या डुप्लीकेट उदाहरणों का पता लगाने के लिए, एक आसान प्रोग्राम लिखा जा सकता है. खराब सुविधा मानों या लेबल का पता लगाना बहुत मुश्किल हो सकता है.
खराब अलग-अलग उदाहरणों का पता लगाने के अलावा, आपको एग्रीगेट में खराब डेटा का भी पता लगाना होगा. हिस्टोग्राम आपके डेटा को एग्रीगेट में दिखाने का एक बेहतरीन तरीका है. इसके अलावा, इस तरह के आंकड़े पाने से आपको मदद मिल सकती है:
- ज़्यादा से ज़्यादा और कम से कम
- माध्य और माध्यिका
- स्टैंडर्ड डेविएशन
अलग-अलग सुविधाओं के लिए, सबसे सामान्य वैल्यू की सूचियां जनरेट करें.
उदाहरण के लिए, क्या country:uk
में दिए गए उदाहरणों की संख्या, आपकी उम्मीद के मुताबिक है. क्या language:jp
वाकई आपके डेटा सेट में
सबसे आम भाषा होनी चाहिए?
अपने डेटा के बारे में जानें
इन नियमों का पालन करें:
- ध्यान रखें कि आपका डेटा कैसा दिखना चाहिए.
- पुष्टि करें कि डेटा इन उम्मीदों के मुताबिक है या नहीं दिखने की वजह बता सकते हैं.
- दोबारा जांच लें कि ट्रेनिंग का डेटा, अन्य सोर्स (उदाहरण के लिए, डैशबोर्ड) के मुताबिक है या नहीं.
अपने डेटा का इस्तेमाल ऐसी पूरी सावधानी के साथ करें, जिसके लिए आप किसी भी मिशन के लिए ज़रूरी कोड का इस्तेमाल करें. अच्छे ML का इस्तेमाल डेटा से होता है.
ज़्यादा जानकारी
रूल ऑफ़ मशीन लर्निंग, एमएल फ़ेज़ II: फ़ीचर इंजीनियरिंग