कैटगरीकल डेटा: शब्दावली और वन-हॉट एन्कोडिंग

डाइमेंशन शब्द, फ़ीचर वेक्टर में मौजूद एलिमेंट की संख्या का दूसरा नाम है. कुछ कैटगरी वाली सुविधाओं में कम डाइमेंशन होते हैं. उदाहरण के लिए:

सुविधा का नाम # of categories कैटगरी के उदाहरण
snowed_today 2 सही, गलत
skill_level 3 बिगिनर, प्रैक्टिशनर, विशेषज्ञ
सीज़न 4 सर्दी, वसंत, गर्मी, पतझड़
day_of_week 7 सोमवार, मंगलवार, बुधवार
ग्रह 8 बुध, शुक्र, पृथ्वी

जब किसी कैटगरी वाली सुविधा में कैटगरी की संख्या कम होती है, तो उसे शब्दावली के तौर पर कोड किया जा सकता है. वोकैबलरी एन्कोडिंग की मदद से, मॉडल हर संभावित कैटगोरिकल वैल्यू को अलग फ़ीचर के तौर पर देखता है. ट्रेनिंग के दौरान, मॉडल हर कैटगरी के लिए अलग-अलग वेटेज सीखता है.

उदाहरण के लिए, मान लें कि आपको किसी कार की कीमत का अनुमान लगाने के लिए एक मॉडल बनाना है. यह अनुमान, कुछ हद तक car_color नाम की कैटगरी वाली सुविधा पर आधारित है. ऐसा हो सकता है कि लाल रंग की कारों की कीमत, हरे रंग की कारों की कीमत से ज़्यादा हो. कार बनाने वाली कंपनियां, बाहरी हिस्से के लिए सीमित रंग उपलब्ध कराती हैं. इसलिए, car_color एक कम डाइमेंशन वाली कैटगरी वाली सुविधा है. यहां दी गई इमेज में, car_color के लिए शब्दावली (संभावित वैल्यू) के बारे में बताया गया है:

इमेज 1. पैलेट में मौजूद हर रंग को एक अलग सुविधा के तौर पर दिखाया जाता है. इसका मतलब है कि हर रंग, फ़ीचर वेक्टर में एक अलग फ़ीचर है.
      उदाहरण के लिए, 'लाल' एक सुविधा है, 'नारंगी' एक अलग सुविधा है. इसी तरह, अन्य सुविधाएं भी अलग-अलग होती हैं.
इमेज 1. हर कैटगरी के लिए एक यूनीक सुविधा.

एक्सरसाइज़: देखें कि आपको कितना समझ आया

सही या गलत: मशीन लर्निंग मॉडल, रॉ स्ट्रिंग वैल्यू पर सीधे तौर पर ट्रेन हो सकता है. जैसे, "लाल" और "काला". इसके लिए, इन वैल्यू को संख्यात्मक वेक्टर में बदलने की ज़रूरत नहीं होती.
सही
ट्रेनिंग के दौरान, मॉडल सिर्फ़ फ़्लोटिंग-पॉइंट नंबर में बदलाव कर सकता है. स्ट्रिंग "Red", फ़्लोटिंग पॉइंट नंबर नहीं है. आपको "Red" जैसी स्ट्रिंग को फ़्लोटिंग-पॉइंट नंबर में बदलना होगा.
गलत
मशीन लर्निंग मॉडल को सिर्फ़ फ़्लोटिंग-पॉइंट वैल्यू वाली सुविधाओं के बारे में ट्रेनिंग दी जा सकती है. इसलिए, ट्रेनिंग से पहले आपको उन स्ट्रिंग को फ़्लोटिंग-पॉइंट वैल्यू में बदलना होगा.

इंडेक्स नंबर

मशीन लर्निंग मॉडल, सिर्फ़ फ़्लोटिंग-पॉइंट नंबर में बदलाव कर सकते हैं. इसलिए, आपको हर स्ट्रिंग को एक यूनीक इंडेक्स नंबर में बदलना होगा. जैसा कि इस इमेज में दिखाया गया है:

इमेज 2. हर रंग, किसी यूनीक पूर्णांक वैल्यू से जुड़ा होता है. उदाहरण के लिए, 'Red' को पूर्णांक 0, 'Orange' को पूर्णांक 1 वगैरह से जोड़ा जाता है.
इमेज 2. इंडेक्स की गई सुविधाएं.

स्ट्रिंग को यूनीक इंडेक्स नंबर में बदलने के बाद, आपको डेटा को आगे प्रोसेस करना होगा, ताकि उसे इस तरह से दिखाया जा सके जिससे मॉडल को वैल्यू के बीच के अहम संबंधों के बारे में जानने में मदद मिले. अगर कैटगरी वाली सुविधा के डेटा को इंडेक्स किए गए पूर्णांकों के तौर पर छोड़ दिया जाता है और उसे मॉडल में लोड किया जाता है, तो मॉडल, इंडेक्स की गई वैल्यू को लगातार फ़्लोटिंग-पॉइंट नंबर के तौर पर ट्रीट करेगा. इसके बाद, मॉडल "बैंगनी" को "नारंगी" से छह गुना ज़्यादा संभावना वाला रंग मानेगा.

वन-हॉट एन्कोडिंग

शब्दकोश बनाने का अगला चरण, हर इंडेक्स नंबर को उसके वन-हॉट एन्कोडिंग में बदलना है. वन-हॉट एन्कोडिंग में:

  • हर कैटगरी को N एलिमेंट वाले वेक्टर (ऐरे) से दिखाया जाता है. यहां N, कैटगरी की संख्या है. उदाहरण के लिए, अगर car_color में आठ संभावित कैटगरी हैं, तो इसे दिखाने वाले वन-हॉट वेक्टर में आठ एलिमेंट होंगे.
  • वन-हॉट वेक्टर में मौजूद एलिमेंट में से सिर्फ़ एक एलिमेंट की वैल्यू 1.0 होती है; बाकी सभी एलिमेंट की वैल्यू 0.0 होती है.

उदाहरण के लिए, यहां दी गई टेबल में car_color में मौजूद हर रंग के लिए वन-हॉट एन्कोडिंग दिखाई गई है:

सुविधा लाल Orange नीला पीला हरा काला बैंगनी भूरा
"Red" 1 0 0 0 0 0 0 0
"Orange" 0 1 0 0 0 0 0 0
"नीला" 0 0 1 0 0 0 0 0
"पीला" 0 0 0 1 0 0 0 0
"Green" 0 0 0 0 1 0 0 0
"Black" 0 0 0 0 0 1 0 0
"बैंगनी" 0 0 0 0 0 0 1 0
"Brown" 0 0 0 0 0 0 0 1

फ़ीचर वेक्टर को स्ट्रिंग या इंडेक्स नंबर नहीं, बल्कि वन-हॉट वेक्टर पास किया जाता है. मॉडल, फ़ीचर वेक्टर के हर एलिमेंट के लिए अलग-अलग वेट असाइन करता है.

नीचे दिए गए इलस्ट्रेशन में, शब्दावली के अलग-अलग रूप दिखाए गए हैं:

इमेज 3. कैटगरी को फ़ीचर वेक्टर से मैप करने की एंड-टू-एंड प्रोसेस का डायग्राम. इस डायग्राम में, इनपुट की गई सुविधाएं 'पीला',
      'नारंगी', 'नीला', और 'नीला' दूसरी बार हैं.  सिस्टम, सेव किए गए शब्दावली ('लाल' 0 है, 'नारंगी' 1 है, 'नीला' 2 है, 'पीला' 3 है वगैरह) का इस्तेमाल करके, इनपुट वैल्यू को आईडी से मैप करता है. इसलिए, सिस्टम 'Yellow',
      'Orange', 'Blue', और 'Blue' को 3, 1, 2, 2 पर मैप करता है. इसके बाद, सिस्टम उन वैल्यू को वन-हॉट फ़ीचर वेक्टर में बदल देता है. उदाहरण के लिए, अगर किसी सिस्टम में आठ रंग उपलब्ध हैं, तो 3 को 0, 0, 0, 1, 0, 0, 0, 0 में बदल दिया जाता है.
इमेज 3. कैटगरी को फ़ीचर वेक्टर से मैप करने की पूरी प्रोसेस.

स्पार्स वेक्टर के तौर पर डेटा दिखाना

जिस सुविधा की वैल्यू ज़्यादातर शून्य (या खाली) होती हैं उसे स्पार्स फ़ीचर कहा जाता है. car_color जैसी कई कैटगोरिकल सुविधाएं, स्पार्स सुविधाएं होती हैं. स्पार्स रिप्रेजेंटेशन का मतलब है कि स्पार्स वेक्टर में 1.0 की पोज़ीशन को सेव करना. उदाहरण के लिए, "Blue" के लिए वन-हॉट वेक्टर यह है:

[0, 0, 1, 0, 0, 0, 0, 0]

1, दूसरी पोज़िशन पर है (गिनती 0 से शुरू करने पर). इसलिए, पहले वाले वन-हॉट वेक्टर के लिए स्पार्स रिप्रेजेंटेशन यह है:

2

ध्यान दें कि स्पार्स प्रज़ेंटेशन, आठ एलिमेंट वाले वन-हॉट वेक्टर की तुलना में बहुत कम मेमोरी लेता है. यह ज़रूरी है कि मॉडल को स्पार्स रिप्रेजेंटेशन पर नहीं, बल्कि वन-हॉट वेक्टर पर ट्रेन किया जाना चाहिए.

कैटगरीकल डेटा में आउटलायर

संख्या वाले डेटा की तरह, कैटगरी वाले डेटा में भी आउटलायर होते हैं. मान लें कि car_color में न सिर्फ़ लोकप्रिय रंग शामिल हैं, बल्कि कुछ ऐसे रंग भी शामिल हैं जिनका इस्तेमाल बहुत कम किया जाता है. जैसे, "Mauve" या "Avocado". इन सभी रंगों को अलग-अलग कैटगरी में रखने के बजाय, इन्हें एक ही "अन्य" कैटगरी में रखा जा सकता है. इस कैटगरी को आउट-ऑफ़-वोकैबलरी (ओओवी) कहा जाता है. दूसरे शब्दों में, आउटलायर के सभी रंगों को एक ही आउटलायर बकेट में रखा जाता है. सिस्टम, उस आउटलायर बकेट के लिए एक ही वज़न तय करता है.

ज़्यादा डाइमेंशन वाली कैटगोरिकल सुविधाओं को एन्कोड करना

कुछ कैटगोरिकल फ़ीचर में डाइमेंशन की संख्या ज़्यादा होती है. जैसे, यहां दी गई टेबल में मौजूद फ़ीचर:

सुविधा का नाम # of categories कैटगरी के उदाहरण
words_in_english ~5,00,000 "खुश", "चलना"
US_postal_codes ~42,000 "02114", "90301"
last_names_in_Germany ~8,50,000 "श्मिट", "श्नाइडर"

जब कैटगरी की संख्या ज़्यादा होती है, तो आम तौर पर वन-हॉट एन्कोडिंग का इस्तेमाल करना सही नहीं होता. आम तौर पर, एम्बेड किए जा रहे डेटा का इस्तेमाल करना ज़्यादा बेहतर होता है. इसके बारे में एम्बेड किए जा रहे डेटा के मॉड्यूल में ज़्यादा जानकारी दी गई है. एम्बेडिंग से डाइमेंशन की संख्या काफ़ी कम हो जाती है. इससे मॉडल को दो अहम फ़ायदे मिलते हैं:

  • इस मॉडल को आम तौर पर कम समय में ट्रेन किया जा सकता है.
  • बनाया गया मॉडल, आम तौर पर अनुमानों को ज़्यादा तेज़ी से समझता है. इसका मतलब है कि मॉडल में इंतज़ार का समय कम है.

हैशिंग को हैशिंग ट्रिक भी कहा जाता है. यह डाइमेंशन की संख्या कम करने का एक तरीका है, लेकिन इसका इस्तेमाल कम किया जाता है.