आंकड़ों और विज़ुअलाइज़ेशन की तकनीकों की मदद से अपने डेटा की जांच करने के बाद, आपको अपने डेटा को ऐसे तरीके से बदलना चाहिए जिससे आपके मॉडल को ज़्यादा असरदार तरीके से ट्रेन करने में मदद मिल सके. नॉर्मलाइज़ेशन का मकसद, सुविधाओं को एक जैसा बनाना है. उदाहरण के लिए, इन दो सुविधाओं पर ध्यान दें:
- सुविधा
X
की रेंज 154 से 24,917,482 तक है. - सुविधा
Y
की रेंज 5 से 22 है.
ये दोनों सुविधाएं बहुत अलग-अलग रेंज में मौजूद हैं. सामान्य बनाने की प्रोसेस में, X
और Y
में बदलाव किया जा सकता है, ताकि वे एक जैसी रेंज में हों, जैसे कि 0 से 1.
डेटा को सामान्य बनाने से ये फ़ायदे मिलते हैं:
- इससे मॉडल को ट्रेनिंग के दौरान ज़्यादा तेज़ी से लोगों के जुड़ने में मदद मिलती है. जब अलग-अलग सुविधाओं की रेंज अलग-अलग होती हैं, तो ग्रेडिएंट ढलान "बाउंस" और धीमा कन्वर्ज़न कर सकता है. हालांकि, Adagrad और Adam जैसे बेहतर ऑप्टिमाइज़र, समय के साथ बेहतर लर्निंग रेट में बदलाव करके, इस समस्या से बचाते हैं.
- इससे मॉडल को बेहतर अनुमान लगाने में मदद मिलती है. जब अलग-अलग सुविधाओं की रेंज अलग-अलग होती है, तो इससे तैयार होने वाला मॉडल कुछ कम काम का अनुमान दे सकता है.
- फ़ीचर वैल्यू बहुत ज़्यादा होने पर, "NaN ट्रैप" से बचने में मदद करता है.
NaN, संख्या नहीं है के लिए छोटा नाम है. जब किसी मॉडल में मौजूद वैल्यू, फ़्लोटिंग-पॉइंट की सटीक वैल्यू की सीमा से ज़्यादा हो जाती है, तो सिस्टम वैल्यू को किसी संख्या के बजाय
NaN
पर सेट कर देता है. जब मॉडल में मौजूद कोई संख्या NaN हो जाती है, तो मॉडल में मौजूद अन्य संख्याएं भी आखिर में NaN हो जाती हैं. - इससे मॉडल को हर सुविधा के लिए सही वेट सीखने में मदद मिलती है. फ़ीचर स्केलिंग के बिना, मॉडल बहुत ज़्यादा ध्यान, बड़ी रेंज वाली फ़ीचर पर देता है और छोटी रेंज वाली फ़ीचर पर ज़रूरत के मुताबिक ध्यान नहीं देता.
हमारा सुझाव है कि अलग-अलग रेंज (उदाहरण के लिए, उम्र और आय) को कवर करने वाली संख्या वाली सुविधाओं को सामान्य बनाएं.
हमारा सुझाव है कि आप ऐसी संख्या वाली किसी एक सुविधा को सामान्य बनाएं जो कई तरह की वैल्यू दिखाती हो, जैसे कि city population.
इन दो सुविधाओं पर ध्यान दें:
- सुविधा
A
की सबसे कम वैल्यू -0.5 और सबसे ज़्यादा वैल्यू +0.5 है. - सुविधा
B
की सबसे कम वैल्यू -5.0 और सबसे ज़्यादा वैल्यू +5.0 है.
सुविधा A
और सुविधा B
के स्पैन काफ़ी कम हैं. हालांकि, सुविधा B
का स्पैन, सुविधा A
के स्पैन से 10 गुना ज़्यादा है. इसलिए:
- ट्रेनिंग की शुरुआत में, मॉडल यह मानता है कि
B
सुविधा,A
सुविधा से दस गुना ज़्यादा "ज़रूरी" है. - ट्रेनिंग में ज़रूरत से ज़्यादा समय लगेगा.
- इससे मिलने वाला मॉडल, शायद सही न हो.
सामान्य न करने की वजह से होने वाला कुल नुकसान अपेक्षाकृत कम होगा. हालांकि, हम अब भी सुझाव देते हैं कि आप सुविधा A और सुविधा B को एक ही स्केल पर सामान्य करें. जैसे, -1.0 से +1.0.
अब रेंज की ज़्यादा अंतर वाली दो सुविधाओं पर विचार करें:
- फ़ीचर
C
की सबसे कम वैल्यू -1 और सबसे ज़्यादा वैल्यू +1 है. - फ़ीचर
D
की सबसे कम वैल्यू +5,000 और सबसे ज़्यादा वैल्यू +1,000,000,000 है.
अगर आपने सुविधा C
और सुविधा D
को सामान्य नहीं किया है, तो हो सकता है कि आपका मॉडल सही से काम न करे. इसके अलावा, ट्रेनिंग को एक साथ दिखाने में ज़्यादा समय लगेगा या पूरी तरह से शामिल नहीं हो पाएगा!
इस सेक्शन में, सामान्य बनाने के तीन लोकप्रिय तरीके बताए गए हैं:
- लीनियर स्केलिंग
- Z-स्कोर स्केलिंग
- लॉग स्केलिंग
इस सेक्शन में, क्लिप करने के बारे में भी बताया गया है. क्लिपिंग, नॉर्मलाइज़ेशन की सटीक तकनीक नहीं है. हालांकि, यह ग़ैर-ज़रूरी संख्याओं को ऐसी सीमाओं में बदल देती है जिनसे बेहतर मॉडल बनते हैं.
रेखीय स्केलिंग
लीनियर स्केलिंग (आम तौर पर इसे सिर्फ़ स्केलिंग कहा जाता है) का मतलब, फ़्लोटिंग-पॉइंट वैल्यू को उनकी सामान्य रेंज से स्टैंडर्ड रेंज में बदलना है. आम तौर पर, यह रेंज 0 से 1 या -1 से +1 होती है.
लीनियर स्केलिंग का विकल्प तब सही होता है, जब ये सभी शर्तें पूरी होती हैं:
- आपके डेटा की निचली और ऊपरी सीमा, समय के साथ ज़्यादा नहीं बदलती.
- फ़ीचर में आउटलायर कम हैं या कोई आउटलायर नहीं है. साथ ही, वे आउटलायर बहुत ज़्यादा नहीं हैं.
- यह सुविधा, अपनी रेंज में लगभग समान रूप से डिस्ट्रिब्यूट होती है. इसका मतलब है कि हिस्टोग्राम में ज़्यादातर वैल्यू के लिए, लगभग बराबर बार दिखेंगे.
मान लें कि मानव age
एक सुविधा है. लीनियर स्केलिंग, age
के लिए नॉर्मलाइज़ेशन की एक अच्छी टेक्नोलॉजी है, क्योंकि:
- अनुमानित निचली और ऊपरी सीमा 0 से 100 है.
age
में आउटलायर का प्रतिशत कम है. यहां की सिर्फ़ 0.3% आबादी की उम्र 100 साल से ज़्यादा है.- हालांकि, कुछ खास उम्र के लोगों को दूसरों की तुलना में बेहतर तरीके से दिखाया जाता है, लेकिन एक बड़े डेटासेट में सभी उम्र के लोगों के काफ़ी उदाहरण होने चाहिए.
एक्सरसाइज़: देखें कि आपको क्या समझ आया
मान लें कि आपके मॉडल मेंnet_worth
नाम की एक सुविधा है, जिसमें अलग-अलग लोगों की कुल संपत्ति से जुड़ी जानकारी होती है. क्या net_worth
के लिए, लीनियर स्केलिंग एक अच्छी नॉर्मलाइज़ेशन टेक्नोलॉजी होगी? ऐसा क्यों है या क्यों नहीं है?
ज़ेड-स्कोर स्केलिंग
Z-स्कोर, वैल्यू के माध्य से होने वाले स्टैंडर्ड डिवीऐशन की संख्या होती है. उदाहरण के लिए, अगर वैल्यू के बीच का अंतर 2 स्टैंडर्ड डिविएशन से ज़्यादा है, तो उसका Z स्कोर +2.0 होगा. अगर कोई वैल्यू, माध्य से 1.5 स्टैंडर्ड डिविएशन कम है, तो उसका Z-स्कोर -1.5 होगा.
किसी फ़ीचर को Z-स्कोर स्केलिंग के साथ दिखाने का मतलब है कि फ़ीचर वेक्टर में उस फ़ीचर का Z-स्कोर सेव करना. उदाहरण के लिए, नीचे दिए गए डायग्राम में दो हिस्टोग्राम दिखाए गए हैं:
- बाईं ओर, सामान्य डिस्ट्रिब्यूशन का क्लासिक वर्शन.
- दाईं ओर, Z-स्कोर स्केलिंग के हिसाब से नॉर्मलाइज़ किया गया वही डिस्ट्रिब्यूशन.
नीचे दिए गए आंकड़े में दिखाए गए डेटा के लिए भी, Z-स्कोर स्केलिंग एक अच्छा विकल्प है. इस डेटा में, नॉर्मल डिस्ट्रिब्यूशन काफ़ी हद तक है.
जब डेटा सामान्य डिस्ट्रिब्यूशन या कुछ हद तक सामान्य डिस्ट्रिब्यूशन की तरह डिस्ट्रिब्यूशन का पालन करता है, तब Z-स्कोर एक अच्छा विकल्प है.
ध्यान दें कि कुछ डिस्ट्रिब्यूशन अपनी रेंज के ज़्यादातर हिस्सों में सामान्य हो सकते हैं, लेकिन फिर भी उनमें बहुत ज़्यादा आउटलायर शामिल हो सकते हैं. उदाहरण के लिए, net_worth
की किसी सुविधा में मौजूद करीब-करीब सभी पॉइंट, तीन स्टैंडर्ड डिविएशन में ठीक से फ़िट हो सकते हैं, लेकिन इस फ़ीचर के कुछ उदाहरण मीन से लगने वाले सैकड़ों स्टैंडर्ड डीविएशन हो सकते हैं. इन स्थितियों में, इस स्थिति को मैनेज करने के लिए, Z-स्कोर स्केलिंग को सामान्य बनाने के किसी अन्य तरीके (आम तौर पर क्लिपिंग) के साथ जोड़ा जा सकता है.
एक्सरसाइज़: देखें कि आपको क्या समझ आया
मान लें कि आपका मॉडलheight
नाम की किसी सुविधा पर ट्रेनिंग लेता है. इसमें, वयस्क महिलाओं की ऊंचाई का डेटा होता है. क्या height
के लिए, Z-स्कोर स्केलिंग, सामान्य बनाने की अच्छी तकनीक होगी? ऐसा क्यों है या क्यों नहीं है?
लॉग स्केलिंग
लॉग स्केलिंग, रॉ वैल्यू के लॉगारिद्म का हिसाब लगाती है. सिद्धांत रूप से, लॉगारिद्म का कोई भी आधार हो सकता है. हालांकि, आम तौर पर लॉग स्केलिंग में नेचुरल लॉगारिद्म (ln) का हिसाब लगाया जाता है.
लॉग स्केलिंग तब मददगार होती है, जब डेटा पावर लॉ डिस्ट्रिब्यूशन के मुताबिक हो. आम तौर पर, पावर लॉ डिस्ट्रिब्यूशन इस तरह दिखता है:
X
की कम वैल्यू के लिए,Y
की वैल्यू बहुत ज़्यादा होती हैं.X
की वैल्यू बढ़ने पर,Y
की वैल्यू तेज़ी से कम हो जाती है. इसलिए,X
की ज़्यादा वैल्यू के लिएY
की वैल्यू बहुत कम होती है.
फ़िल्मों की रेटिंग, पावर लॉ डिस्ट्रिब्यूशन का एक अच्छा उदाहरण है. नीचे दिए गए आंकड़े में, इन बातों पर ध्यान दें:
- कुछ फ़िल्मों को उपयोगकर्ताओं ने बहुत ज़्यादा रेटिंग दी है. (
X
की कम वैल्यू वालेY
ज़्यादा हैं.) - ज़्यादातर फ़िल्मों को उपयोगकर्ताओं की बहुत कम रेटिंग मिली हैं. (
X
के ज़्यादा मानों के लिएY
के कम मान हैं.)
लॉग स्केलिंग से डिस्ट्रिब्यूशन में बदलाव होता है. इससे मॉडल को ट्रेनिंग देने में मदद मिलती है, जो बेहतर अनुमान लगा सकता है.
दूसरे उदाहरण के रूप में, किताबों की बिक्री, पावर लॉ डिस्ट्रिब्यूशन के तहत आती है, क्योंकि:
- पब्लिश की गई ज़्यादातर किताबों की कुछ ही कॉपी बिकती हैं. शायद एक या दो सौ.
- कुछ किताबों की हज़ारों कॉपी बिकती हैं.
- सिर्फ़ कुछ बेस्टसेलर किताबों की एक करोड़ से ज़्यादा कॉपी बिकती हैं.
मान लें कि आपको किताब के कवर और उसकी बिक्री के बीच के संबंध का पता लगाने के लिए, किसी लीनियर मॉडल को ट्रेनिंग देनी है. रॉ वैल्यू पर आधारित लीनियर मॉडल ट्रेनिंग को, उन किताबों के कवर के बारे में कुछ पता करना होगा जिनकी एक करोड़ कॉपी बिकती हैं. यह जानकारी, सिर्फ़ 100 कॉपी बिकने वाली किताबों के कवर की जानकारी से 10,000 गुना ज़्यादा अहम होगी. हालांकि, बिक्री के सभी आंकड़ों को लॉग स्केलिंग करने से, यह काम ज़्यादा आसान हो जाता है. उदाहरण के लिए, 100 का लॉग:
~4.6 = ln(100)
जबकि 1,000,000 का लॉग यह होता है:
~13.8 = ln(1,000,000)
इसलिए, 1,000,000 का लॉग, 100 के लॉग से सिर्फ़ तीन गुना ज़्यादा है. शायद आपने यह सोचा हो कि सबसे ज़्यादा बिकने वाली किताब का कवर, कम बिकने वाली किताब के कवर के मुकाबले तीन गुना ज़्यादा असरदार (किसी तरह से) हो.
क्लिप करना
क्लिपिंग एक ऐसी तकनीक है जिससे, बहुत ज़्यादा आउटलायर के असर को कम किया जा सकता है. कम शब्दों में, क्लिपिंग की सुविधा आम तौर पर आउटलायर की वैल्यू को किसी तय सीमा तक कम कर देती है. क्लिपिंग एक ऐसा तरीका है जिसे शायद आपने पहले कभी न आज़माया हो. हालांकि, यह बहुत असरदार हो सकता है.
उदाहरण के लिए, roomsPerPerson
नाम की सुविधा वाले डेटासेट की कल्पना करें. यह सुविधा, अलग-अलग घरों के कमरों की संख्या दिखाती है. यह संख्या, कुल कमरों की संख्या को रहने वालों की संख्या से भाग देने पर मिलती है. नीचे दिए गए प्लॉट में बताया गया है कि
99% से ज़्यादा सुविधा की वैल्यू, सामान्य डिस्ट्रिब्यूशन की शर्तों को पूरा करती हैं. जैसे, 1.8 का मीन और 0.7 का स्टैंडर्ड डीविएशन. हालांकि, इस सुविधा में कुछ आउटलायर भी शामिल हैं. इनमें से कुछ आउटलायर काफ़ी ज़्यादा हैं:
ऐसे आउटलायर के असर को कैसे कम किया जा सकता है? वैसे, हिस्टोग्राम में डेटा का बंटवारा, बराबर नहीं होता. यह नॉर्मल डिस्ट्रिब्यूशन या पावर लॉ डिस्ट्रिब्यूशन भी नहीं होता. अगर आप किसी भी आर्बिट्रेरी वैल्यू, जैसे कि 4.0 पर roomsPerPerson
की ज़्यादा से ज़्यादा वैल्यू को कैप या क्लिप करें, तो क्या होगा?
सुविधा की वैल्यू को 4.0 पर क्लिप करने का मतलब यह नहीं है कि आपका मॉडल 4.0 से ज़्यादा की सभी वैल्यू को अनदेखा कर देता है. बल्कि, इसका मतलब यह है कि 4.0 से ज़्यादा वाली सभी वैल्यू अब 4.0 हो गई हैं. इससे 4.0 पर मौजूद खास पहाड़ी के बारे में पता चलता है. इतनी पहाड़ी होने के बावजूद, बड़े पैमाने पर तैयार किए गए फ़ीचर का सेट, अब ओरिजनल डेटा के मुकाबले ज़्यादा काम का है.
कृपया इंतज़ार करें! क्या हर आउटलायर वैल्यू को किसी मनमुताबिक ऊपरी सीमा तक कम किया जा सकता है? मॉडल को ट्रेनिंग देते समय, हां.
सामान्य बनाने के दूसरे तरीकों को लागू करने के बाद भी, वैल्यू को क्लिप किया जा सकता है. उदाहरण के लिए, मान लें कि आपने Z-स्कोर स्केलिंग का इस्तेमाल किया है, लेकिन कुछ आउटलायर की वैल्यू 3 से काफ़ी ज़्यादा है. इस मामले में, ये काम किए जा सकते हैं:
- ज़ेड-स्कोर को 3 से ज़्यादा होने पर, उसे 3 पर सेट करें.
- -3 से कम Z-स्कोर को क्लिप करके, उन्हें -3 पर सेट करें.
क्लिपिंग की मदद से, आपके मॉडल को ज़रूरी न होने वाले डेटा को ओवरइंडेक्स करने से रोका जा सकता है. हालांकि, कुछ आउटलायर असल में ज़रूरी होते हैं. इसलिए, वैल्यू को ध्यान से क्लिप करें.
नॉर्मलाइज़ेशन तकनीकों के बारे में खास जानकारी
नॉर्मलाइज़ेशन तकनीक | फ़ॉर्मूला | कब इस्तेमाल करें |
---|---|---|
रेखीय स्केलिंग | $$ x' = \frac{x - x_{min}}{x_{max} - x_{min}} $$ | जब सुविधा, तय की गई रेंज में एक जैसी हो. |
Z-स्कोर स्केलिंग | $$ x' = \frac{x - μ}{σ}$$ | जब सुविधा के डिस्ट्रिब्यूशन में बहुत ज़्यादा आउटलायर शामिल न हों. |
लॉग स्केलिंग | $$ x' = log(x)$$ | जब सुविधा, पावर लॉ के मुताबिक हो. |
क्लिप करना | अगर $x > max$ है, तो $x' = max$पर सेट करें अगर $x < min$ है, तो $x' = min$ पर सेट करें |
जब सुविधा में एक्स्ट्रीम आउटलायर मौजूद हों. |
एक्सरसाइज़: अपना ज्ञान परखें
मान लें कि आप एक ऐसा मॉडल डेवलप कर रहे हैं जो डेटा सेंटर के अंदर मापे गए तापमान के आधार पर, किसी डेटा सेंटर की उत्पादकता का अनुमान लगाता है.
आपके डेटासेट में temperature
की करीब-करीब सभी वैल्यू,
15 से 30 (सेल्सियस) के बीच आती हैं. हालांकि, इसमें ये अपवाद शामिल हैं:
- साल में एक या दो बार, बहुत ज़्यादा गर्मी वाले दिनों में,
temperature
में 31 से 45 के बीच की कुछ वैल्यू रिकॉर्ड की जाती हैं. temperature
में हर 1,000वां पॉइंट, असल तापमान के बजाय 1,000 पर सेट होता है.
temperature
के लिए, सामान्य बनाने की कौनसी तकनीक सही रहेगी?
1,000 की वैल्यू गलत हैं और इन्हें क्लिप करने के बजाय, मिटा दिया जाना चाहिए.
31 से 45 के बीच की वैल्यू, मान्य डेटा पॉइंट हैं. इन वैल्यू के लिए क्लिप बनाना अच्छा रहेगा. ऐसा यह माना जाएगा कि डेटासेट में इतने उदाहरण मौजूद नहीं हैं कि इस टेंपरेचर रेंज में, मॉडल को बेहतर अनुमान लगाने की ट्रेनिंग दी जा सके. हालांकि, अनुमान लगाने के दौरान, ध्यान दें कि क्लिप किया गया मॉडल, 45 डिग्री और 35 डिग्री के तापमान के लिए एक ही अनुमान लगाएगा.