वर्गीकरण के लिए एन्कोडिंग

Aug 24 2020

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

Text                                  Symbol    Note    Account    Age   Label 
There is a red car                      !        red      John    24   1
My bag was very expensive               ?       orange    Luke    36  0
Where are my keys?                      @        red      Red     58  1
I promise: I will never let you go!    ...       green    Aoife   28  0

पाठ में एक समुदाय में उपयोगकर्ताओं से संग्रहीत टिप्पणियां होती हैं; प्रतीक में उपयोगकर्ता द्वारा सबसे अधिक उपयोग किया जाने वाला प्रतीक शामिल है; नोट अपने स्तर का प्रतिनिधित्व करता है: हरा अधिक अनुभवी है, लाल एक नया योजक है; खाता उपयोगकर्ता नाम है। लेबल मुझे उपयोगकर्ता के भरोसेमंद के बारे में जानकारी देता है: यदि 0 उपयोगकर्ता नकली नहीं है; यदि एक उपयोगकर्ता एक संभव बॉट हो सकता है।

मैं वर्तमान जानकारी (ऊपर कॉलम देखें) के आधार पर नए उपयोगकर्ताओं को वर्गीकृत करना चाहूंगा। मेरे डेटासेट में 1000 से अधिक पंक्तियाँ और 400 उपयोगकर्ता शामिल हैं। चूंकि क्लासिफायर का उपयोग करने के लिए मुझे श्रेणीबद्ध क्षेत्रों को एनकोड करने की आवश्यकता है, मैंने MultiColumnLabelEncoderस्केलेरन में उपयोग करके निम्नानुसार करने की कोशिश की है :

MultiColumnLabelEncoder(columns = ['Text', 'Symbol', 'Note', 'Account']).fit_transform(df)

जहाँ df मेरा डेटाफ़्रेम है। हालांकि, मुझे समझ में आया कि वनहॉटेनकोडर भी बेहतर होना चाहिए। मैंने खाता भी शामिल किया क्योंकि उसी खाते से अधिक टिप्पणियां हो सकती हैं, इसलिए यदि मैंने किसी खाते को नकली के रूप में वर्गीकृत किया है और मुझे उसी खाते से एक नई टिप्पणी मिलती है, तो इस खाते को आसानी से नकली के रूप में पाया जा सकता है। उद्देश्य, जैसा कि मैंने पहले उल्लेख किया है, एक निश्चित सटीकता के साथ वर्गीकृत करना होगा, एक परीक्षण सेट से नए तत्व, दी गई जानकारी (प्रतीक, नोट, आयु, ग्रंथों) के आधार पर, अर्थात इन चरों के बीच संभावित सहसंबंधों की तलाश करना जो मुझे यह कहने की अनुमति दे सकता है कि एक नया खाता नकली है (1) या नहीं (0)।

समस्या, जैसा कि आप देख सकते हैं, वर्गीकरण से संबंधित है जहां पैरामीटर न केवल संख्यात्मक हैं, बल्कि श्रेणीबद्ध भी हैं।
डेटा प्रीप्रोसेसिंग (स्टॉपवर्ड्स और डेटा को हटाने के लिए), मैंने nltk के पायथन पैकेज का उपयोग किया है; सुविधाओं के निष्कर्षण के बारे में (यह एक महत्वपूर्ण बिंदु होना चाहिए क्योंकि यह अगले चरण से जुड़ा हुआ है, अर्थात कक्षा 1 या 0 की भविष्यवाणी करने के लिए एक क्लासिफायरियर का उपयोग करके), मुझे समझने में कठिनाइयों का सामना करना पड़ा है कि मैं एन्कोडिंग से क्या आउटपुट की उम्मीद करूं मेरे मॉडल में इनपुट के रूप में उपरोक्त जानकारी का उपयोग करने में सक्षम (जहां लक्ष्य को लेबल कहा जाता है और यह एक द्विआधारी मूल्य है)। मैं क्लासिफायर लॉजिस्टिक रिग्रेशन के रूप में उपयोग कर रहा हूं, लेकिन एसवीएम भी।

16 वर्ष की आयु के साथ उपयोगकर्ता X के मामले में मेरा अपेक्षित आउटपुट, प्रतीक #, नोट अद्भुत, और नोट लाल (नया योजक) एक निश्चित प्रतिशत के साथ नकली के रूप में एक वर्गीकरण होगा।

मैं सराहना करूंगा कि अगर कोई मुझे समझा सकता है, तो कदम से कदम, अपने डेटासेट को मेरे डेटासेट में बदलने का तरीका जिसके चर मैं एक लॉजिस्टिक प्रतिगमन के भीतर उपयोग कर सकता हूं ताकि नए उपयोगकर्ताओं के लेबल (नकली या नकली) का निर्धारण किया जा सके।

जवाब

1 hssay Aug 28 2020 at 19:05

आपको टेक्स्ट प्रोसेसिंग और एक हॉट एन्कोडिंग के मिश्रण का उपयोग करना होगा। टेक्स्ट कॉलम को एक-हॉट एन्कोडेड के रूप में नहीं माना जाना चाहिए क्योंकि यह डेटासेट में प्रत्येक अद्वितीय वाक्य के लिए एक नया चर बनाने की कोशिश करेगा, जो बहुत कुछ होगा (और सीखने से बहुत मददगार नहीं)। टेक्स्ट वेक्टराइज़र, उसमें दिखाई देने वाले शब्दों / टोकनों के आधार पर टेक्स्ट कॉलम को संक्षेप में प्रस्तुत करेगा।

इसलिए आपको पहले टेक्स्ट कॉलम को संसाधित करने के लिए एक पाठ सदिश का उपयोग करना चाहिए । यह आपको एक डेटा-फ्रेम (ए कहता है) देगा। इस डेटा-फ़्रेम में डेटासेट में टोकन / शब्द के समान कॉलम होंगे। इसलिए यदि पाठ वेक्टर 100 अद्वितीय शब्दों को चुनता है तो आपके पास 1000x100 आकार का डेटा-फ़्रेम होगा। ध्यान दें कि ये 100 कॉलम केवल पाठ सदिश द्वारा उत्पन्न किए गए हैं।

प्रतीकों और नोटों के लिए, आप एक-हॉट एन्कोडिंग का उपयोग कर सकते हैं, जो आपको एक और डेटा-फ़्रेम (बी कहें) मिलेगा। यदि आप इनपुट के बाद अपना अंतिम डेटा प्राप्त करना चाहते हैं, तो आपको सामान्य कुंजी पर ए एंड बी में शामिल होना चाहिए। यहां आम कुंजी पंक्ति आईडी होगी (हालांकि उपयोगकर्ता स्तर पर डेटा एकत्र करने पर निम्नलिखित टिप्पणी पढ़ें)।

यह स्पष्ट नहीं है कि क्या उपयोगकर्ता नाम (खाता) कॉलम डेटा में अद्वितीय है? यदि 1000 पंक्तियाँ हैं लेकिन केवल 400 उपयोगकर्ता हैं, तो इसका मतलब है कि प्रति उपयोगकर्ता 1 से अधिक पंक्तियाँ हो सकती हैं। उस स्थिति में, आप उपयोगकर्ता के स्तर पर डेटा को एकत्र करने पर विचार कर सकते हैं (पाठ कॉलम के लिए, आप बस एक ही उपयोगकर्ता के लिए सभी स्ट्रिंग को गुप्त कर सकते हैं)।