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

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

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

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

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

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

एक्सरसाइज़: अपने अंतर्ज्ञान की जांच करना

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

इंडेक्स नंबर

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

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

कसरत: खुद को पहचानें

क्या आपके मॉडल को सीधे तौर पर, दूसरे चरण में दिखाए गए इंडेक्स नंबर पर ट्रेन करना चाहिए?
हां
अगर इंडेक्स नंबर पर मॉडल को ट्रेन किया जाता है, तो वह हर इंडेक्स नंबर को गलत तरीके से संख्या के तौर पर इस्तेमाल करेगा. साथ ही, वह "Orange" (इंडेक्स नंबर 1) की तुलना में, "Black" (इंडेक्स नंबर 5) को पांच गुना ज़्यादा अहम मानेगा.
नहीं
आपका मॉडल, इंडेक्स नंबर पर ट्रेन नहीं होना चाहिए. अगर ऐसा होता है, तो आपके मॉडल में हर इंडेक्स नंबर को न्यूमेरिक वैल्यू के तौर पर गिना जाएगा. साथ ही, इस मॉडल के लिए "Black" (इंडेक्स नंबर 5) को "Orange" (इंडेक्स नंबर 1) के मुकाबले, पांच गुना ज़्यादा अहम माना जाएगा.

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

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

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

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

सुविधा लाल Orange नीला पीला हरा काला बैंगनी भूरा
"लाल" 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
"हरा" 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
"भूरा" 0 0 0 0 0 0 0 1

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

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

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

स्पैर्स रिप्रज़ेंटेशन

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

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

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

2

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

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

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

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

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

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

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

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

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