बहु श्रेणीीय चर के लिए एक-हॉट एन्कोडिंग कैसे करें

स्रोत नोड: 841101

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

लेकिन आगे बढ़ने से पहले, आइए फ़ीचर इंजीनियरिंग और वन हॉट एन्कोडिंग पर एक संक्षिप्त चर्चा करें।

फ़ीचर इंजीनियरिंग

तो, फ़ीचर इंजीनियरिंग समस्या के डोमेन ज्ञान का उपयोग करके कच्चे डेटा से सुविधाएँ निकालने की प्रक्रिया है। इन सुविधाओं का उपयोग मशीन लर्निंग एल्गोरिदम के प्रदर्शन को बेहतर बनाने के लिए किया जा सकता है और यदि प्रदर्शन बढ़ता है तो यह सर्वोत्तम सटीकता देगा। हम यह भी कह सकते हैं कि फीचर इंजीनियरिंग एप्लाइड मशीन लर्निंग के समान है। मशीन लर्निंग में फ़ीचर इंजीनियरिंग सबसे महत्वपूर्ण कला है जो एक अच्छे मॉडल और एक बुरे मॉडल के बीच बड़ा अंतर पैदा करती है। यह किसी भी डेटा विज्ञान परियोजना के जीवन चक्र में तीसरा चरण है।

मशीन लर्निंग मॉडल के लिए पारदर्शिता की अवधारणा एक जटिल चीज है क्योंकि विभिन्न मॉडलों को अक्सर विभिन्न प्रकार के डेटा के लिए अलग-अलग दृष्टिकोण की आवश्यकता होती है। जैसे कि:-

  • निरंतर डेटा
  • श्रेणीबद्ध विशेषताएं
  • लापता मूल्य
  • मानकीकरण
  • दिनांक और समय

लेकिन यहां हम केवल श्रेणीबद्ध विशेषताओं पर चर्चा करेंगे, श्रेणीबद्ध विशेषताएं वे विशेषताएं हैं जिनमें डेटाटाइप एक ऑब्जेक्ट प्रकार है। किसी भी श्रेणीगत फीचर में डेटा पॉइंट का मान संख्यात्मक रूप में नहीं होता, बल्कि वह ऑब्जेक्ट रूप में होता था।

श्रेणीगत चरों को संभालने के लिए कई तकनीकें हैं, कुछ हैं:

  • लेबल एन्कोडिंग या सामान्य एन्कोडिंग
  • एक हॉट एन्कोडिंग
  • डमी एनकोडिंग
  • प्रभाव एन्कोडिंग
  • बाइनरी एन्कोडिंग
  • बेसल एनकोडिंग
  • हैश एनकोडिंग
  • लक्ष्य एन्कोडिंग

तो, यहां हम वन हॉट एन्कोडिंग द्वारा श्रेणीबद्ध विशेषताओं को संभाल रहे हैं, इस प्रकार सबसे पहले हम वन हॉट एन्कोडिंग पर चर्चा करेंगे।

एक गर्म एन्कोडिंग

हम जानते हैं कि श्रेणीबद्ध चर में संख्यात्मक मान के बजाय लेबल मान होते हैं। संभावित मानों की संख्या अक्सर एक निश्चित सेट तक सीमित होती है। श्रेणीबद्ध चर को अक्सर नाममात्र कहा जाता है। कई मशीन लर्निंग एल्गोरिदम सीधे लेबल डेटा पर काम नहीं कर सकते हैं। उन्हें सभी इनपुट वेरिएबल्स और आउटपुट वेरिएबल्स को संख्यात्मक होने की आवश्यकता है।

इसका मतलब यह है कि श्रेणीबद्ध डेटा को संख्यात्मक रूप में परिवर्तित किया जाना चाहिए। यदि श्रेणीगत चर एक आउटपुट चर है, तो आप उन्हें प्रस्तुत करने या किसी एप्लिकेशन में उपयोग करने के लिए मॉडल द्वारा भविष्यवाणियों को श्रेणीबद्ध रूप में परिवर्तित करना भी चाह सकते हैं।

उदाहरण के लिये लिंग पर डेटा के रूप में है 'पुरुष' और 'महिला'।

लेकिन अगर हम एक-हॉट एन्कोडिंग का उपयोग करते हैं तो एन्कोडिंग और मॉडल को श्रेणियों के बीच एक प्राकृतिक क्रम मानने की अनुमति देने से खराब प्रदर्शन या अप्रत्याशित परिणाम हो सकते हैं।

पूर्णांक प्रतिनिधित्व पर एक-हॉट एन्कोडिंग लागू की जा सकती है। यह वह जगह है जहां पूर्णांक एन्कोडेड वैरिएबल हटा दिया जाता है और प्रत्येक अद्वितीय पूर्णांक मान के लिए एक नया बाइनरी वैरिएबल जोड़ा जाता है।

उदाहरण के लिए, हम रंग चर को एन्कोड करते हैं,

लाल रंग  नीला रंग
0 1
1 0
0 1

अब हम अपनी यात्रा शुरू करेंगे. पहले चरण में, हम घर की कीमत की भविष्यवाणी का एक डेटासेट लेते हैं।

डेटासेट

यहां हम house_price के डेटासेट का उपयोग करेंगे जिसका उपयोग क्षेत्र के आकार के अनुसार घर की कीमत की भविष्यवाणी करने में किया जाता है।

यदि आप घर की कीमत भविष्यवाणी डेटासेट डाउनलोड करना चाहते हैं तो क्लिक करें यहाँ उत्पन्न करें.

मॉड्यूल आयात करना

अब, हमें पायथन से महत्वपूर्ण मॉड्यूल आयात करना होगा जो वन-हॉट एन्कोडिंग के लिए उपयोग किया जाएगा

# पांडा को पीडी के रूप में आयात करना, पांडा को पीडी के रूप में आयात करना # सुन्न आयात को एनपी के रूप में आयात करना # sklearn.preprocessing से OneHotEncoder को आयात करना, OneHotEncoder() को आयात करना।

यहां, हम डेटा विश्लेषण के लिए उपयोग किए जाने वाले पांडा का उपयोग करते हैं, एन-आयामी सरणी के लिए NumPyused, और स्केलेरन से, हम श्रेणीबद्ध एन्कोडिंग के लिए एक महत्वपूर्ण क्लास वन हॉट एनकोडर का उपयोग करेंगे।

अब हमें Python का उपयोग करके इस डेटा को पढ़ना होगा।

डेटासेट पढ़ना

आम तौर पर, डेटासेट सीएसवी के रूप में होता है, और हम जो डेटासेट उपयोग करते हैं वह भी सीएसवी के रूप में होता है। CSV फ़ाइल को पढ़ने के लिए हम पांडा read_csv() फ़ंक्शन का उपयोग करेंगे। नीचे देखें:

# डेटासेट पढ़ना df = pd.read_csv('house_price.csv') df.head()

आउटपुट:-

लेकिन हमें केवल एक हॉट एनकोडर के लिए श्रेणीबद्ध चर का उपयोग करना होगा और हम आसानी से समझने के लिए केवल श्रेणीबद्ध चर के साथ समझाने की कोशिश करेंगे।

डेटा से श्रेणीबद्ध चर को विभाजित करने के लिए हमें यह जांचना होगा कि कितनी विशेषताओं में श्रेणीबद्ध मान हैं।

श्रेणीबद्ध मानों की जाँच करना

मानों की जाँच के लिए हम पांडा सेलेक्ट_dtypes फ़ंक्शन का उपयोग करते हैं जिसका उपयोग वेरिएबल के डेटा प्रकारों को चुनने के लिए किया जाता है।

# सुविधाओं की जाँच बिल्ली = df.select_dtypes(include='O').keys() # प्रदर्शन चर बिल्ली

आउटपुट:-

 

अब हमें उन संख्यात्मक कॉलमों को डेटासेट से हटाना होगा और हम अपने उपयोग के लिए इस श्रेणीबद्ध चर का उपयोग करेंगे। हम वन-हॉट एन्कोडिंग लागू करने के लिए डेटासेट से केवल 3-4 श्रेणीबद्ध कॉलम का उपयोग करते हैं।

नया डेटाफ़्रेम बनाना

अब, श्रेणीबद्ध चर का उपयोग करने के लिए हम चयनित श्रेणीबद्ध स्तंभों का एक नया डेटाफ़्रेम बनाएंगे।

# नया डीएफ बनाना # सेटिंग कॉलम हम new_df = pd.read_csv('house_price.csv',usecols=[' का उपयोग करते हैंअड़ोस-पड़ोस','एक्सटीरियर प्रथम', 'एक्सटीरियर द्वितीय']) new_df.head()

आउटपुट:-

अब हमें यह पता लगाना है कि प्रत्येक श्रेणीबद्ध कॉलम में कितनी विशिष्ट श्रेणियां मौजूद हैं।

अद्वितीय मूल्य ढूँढना

अद्वितीय मान खोजने के लिए हम पांडा अद्वितीय() फ़ंक्शन का उपयोग करेंगे।

New_df.columns में x के लिए प्रत्येक कॉलम में # अद्वितीय मान: # अद्वितीय मान प्रिंट करना print(x ,':', len(new_df[x].unique()))

आउटपुट:-

पड़ोस : 25
बाहरी भाग प्रथम : 1
बाहरी भाग2 : 16

अब, हम बहुश्रेणीबद्ध चरों पर एक-हॉट एन्कोडिंग लागू करने की अपनी तकनीक अपनाएंगे।

बहुश्रेणीबद्ध चर के लिए तकनीक

तकनीक यह है कि हम एक-हॉट एन्कोडिंग को वेरिएबल के 10 सबसे लगातार लेबल तक सीमित कर देंगे। इसका मतलब यह है कि हम केवल 10 सबसे अधिक बार आने वाले लेबलों में से प्रत्येक के लिए एक बाइनरी वैरिएबल बनाएंगे, यह अन्य सभी लेबलों को एक नई श्रेणी के तहत समूहीकृत करने के बराबर है, जिसे इस मामले में हटा दिया जाएगा। इस प्रकार, 10 नए डमी वैरिएबल इंगित करते हैं कि 10 सबसे अधिक बार आने वाले लेबल में से कोई एक मौजूद है या नहीं 1 या फिर नहीं 0 किसी विशेष अवलोकन के लिए.

सर्वाधिक बारंबार आने वाले चर

यहां हम 20 सबसे अधिक बार आने वाले वेरिएबल का चयन करेंगे।

मान लीजिए हम एक श्रेणीबद्ध चर लेते हैं पड़ोस.

# शीर्ष 20 श्रेणियां ढूँढना new_df.Neighborhood.value_counts().sort_values(ascending=False).head(20)

उत्पादन:

जब आप इस आउटपुट छवि को देखेंगे तो आप देखेंगे कि नाम नेबरहुड कॉलम में लेबल 225 बार दोहराया जा रहा है और हम नीचे जाते हैं तो यह संख्या घट रही है।

इसलिए हमने शीर्ष 10 परिणाम ऊपर से लिए और हमने इस शीर्ष 10 परिणाम को एक-हॉट एन्कोडिंग में बदल दिया और बाएं लेबल शून्य में बदल गए।

आउटपुट:-

 

सर्वाधिक बारंबार आने वाले श्रेणीबद्ध चरों की सूची

# शीर्ष 10 वेरिएबल्स के साथ सूची बनाएं टॉप_10 = [x for x in new_df.Neighborhood.value_counts().sort_values(ascending=False).head(10).index] टॉप_10

आउटपुट:-

['नाम',
'कोलगसीआर',
'पुराना शहर',
'एडवर्ड्स',
'समरस्ट',
'गिल्बर्ट',
'नृद्गहत',
'सॉयर',
'एनडब्ल्यूएम्स',
'सॉयरडब्ल्यू']

नेबरहुड कॉलम में शीर्ष 10 श्रेणीबद्ध लेबल हैं।

बाइनरी बनाएं

अब, हमें टॉप_10 लेबल के 10 बाइनरी वेरिएबल बनाने होंगे:

# लेबल की बाइनरी बनाएं

शीर्ष_10 में लेबल के लिए:

new_df = np.where(new_df['नेबरहुड']==लेबल,1,0)

new_df[['पड़ोस']+top_10]


आउटपुट:-

नाम कोलगसीआर पुराना शहर एडवर्ड्स उलट-फेर गिल्बर्ट NridgHt लकड़हारा एनडब्ल्यूएम्स सॉयरडब्ल्यू
0 कोलगसीआर 0 1 0 0 0 0 0 0 0 0
1 वेन्कर 0 0 0 0 0 0 0 0 0 0
2 कोलगसीआर 0 1 0 0 0 0 0 0 0 0
3 क्रॉफॉर 0 0 0 0 0 0 0 0 0 0
4 नोरिज 0 0 0 0 0 0 0 0 0 0
5 मिशेल 0 0 0 0 0 0 0 0 0 0
6 उलट-फेर 0 0 0 0 1 0 0 0 0 0
7 एनडब्ल्यूएम्स 0 0 0 0 0 0 0 0 1 0
8 पुराना शहर 0 0 1 0 0 0 0 0 0 0
9 ब्रकसाइड 0 0 0 0 0 0 0 0 0 0
10 लकड़हारा 0 0 0 0 0 0 0 1 0 0
11 NridgHt 0 0 0 0 0 0 1 0 0 0

आप देख सकते हैं कि कैसे शीर्ष_10 लेबल अब बाइनरी प्रारूप में परिवर्तित हो गए हैं।

आइए एक उदाहरण लें, तालिका में देखें कि कहां 1 अनुक्रमणिका वेन्कर जो हमारे शीर्ष_10 श्रेणियों के लेबल से संबंधित नहीं था इसलिए इसका परिणाम होगा 0 सभी कॉलम.

अब हम इसे उन सभी श्रेणीबद्ध चरों के लिए करेंगे जिन्हें हमने ऊपर चुना है।

OneHotEncoding पर सभी चयनित वैरिएबल

# सभी श्रेणीगत चरों के लिए हमने def TOP_x(df2,variable,top_x_labels) चुना है:top_x_labels में लेबल के लिए: df2[variable+'_'+label] = np.where(data[variable]==label,1,0) # पढ़ें डेटा फिर से डेटा = pd.read_csv('D://xdatasets/train.csv',usecols = ['नेबरहुड','एक्सटीरियर1st','एक्सटीरियर2nd']) #नेबरहुड को 10 सबसे अधिक बार आने वाली श्रेणियों में एन्कोड करें टॉप_x(डेटा, 'पड़ोस', शीर्ष_10) # डेटा प्रदर्शित करें data.head()

आउटपुट: -

अब, यहां हम सभी बहुश्रेणीबद्ध चर पर एक-हॉट एन्कोडिंग लागू करते हैं।

अब हम मल्टी वेरिएबल्स के लिए वन हॉट एनकोडिंग के फायदे और नुकसान देखेंगे।

फायदे

  • लागू करने में सरल
  • परिवर्तनीय अन्वेषण के लिए अधिक समय की आवश्यकता नहीं होती है
  • फीचर स्पेस का बड़े पैमाने पर विस्तार नहीं करता है।

नुकसान

  • ऐसी कोई जानकारी नहीं जोड़ता जो चर को अधिक पूर्वानुमानित बना सके
  • नजरअंदाज किए गए वेरिएबल्स की जानकारी न रखें.

एंड नोट्स

तो, इसका सारांश यह है कि हम बहुश्रेणीबद्ध चर को कैसे संभालना है इसके बारे में सीखते हैं, यदि आपके सामने यह समस्या आती है तो यह एक बहुत ही कठिन कार्य है। तो इस लेख को पढ़ने के लिए धन्यवाद।

मुझे लिंक्डइन पर कनेक्ट करें: प्रोफाइल

मेरे अन्य लेख पढ़ें: https://www.analyticsvidhya.com/blog/author/mayurbadole2407/

धन्यवाद😎

इस लेख में दिखाया गया मीडिया एनालिटिक्स विद्या के स्वामित्व में नहीं है और लेखक के विवेक पर उपयोग किया जाता है।

आप इस लेख को हमारे मोबाइल एपीपी पर भी पढ़ सकते हैं गूगल प्ले से ले लों

संबंधित आलेख

स्रोत: https://www.analyticsvidhya.com/blog/2021/05/how-to-perform-one-hot-encoding-for-multi-categorical-variables/

समय टिकट:

से अधिक एनालिटिक्स विधा