मैं श्रेणीबद्ध डेटा के साथ वर्गीकरण कैसे कर सकता हूं जो तय नहीं है?


11

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

उदाहरण के लिए, यदि मेरा श्रेणीबद्ध डेटा था sex, तो एकमात्र संभव लेबल होगा female, maleऔर other, चाहे जो भी हो। हालाँकि, मेरा श्रेणीबद्ध चर cityइतना है कि ऐसा हो सकता है कि मैं जिस व्यक्ति की भविष्यवाणी करने की कोशिश कर रहा हूं उसके पास एक नया शहर है जिसे मेरे क्लासिफायर ने कभी नहीं देखा है।

मैं सोच रहा हूं कि क्या इन शब्दों में वर्गीकरण करने का कोई तरीका है या यदि मुझे इस नए श्रेणीबद्ध डेटा पर विचार करके फिर से प्रशिक्षण करना चाहिए।


1
क्या आप cityकुछ फ़ंक्शन के आधार पर संख्या में परिवर्तित कर सकते हैं ? जैसा city' = f(latitude, longitude)कि जिस तरह से, आप किसी भी शहर के लिए एक नया मूल्य बना सकते हैं
मोहम्मद अतहर

@ मोहम्मदअथर ने यहां सही समाधान दिया है, आशा है कि ओपी इसे देखता है!
फ्रांसेस्को पैगोरारो

जवाबों:


12

यह बहुत अच्छा सवाल है; वास्तव में यह समस्या कुछ समय के लिए रही है और मुझे अभी तक इसका सही समाधान नहीं मिला है। फिर भी अपने अनुभव को साझा करने के लिए खुश से अधिक:

  • जितना संभव हो एक-हॉट-एनकोड से बचें (ऊपर जो सुझाव दिया गया था, उसके विपरीत)। तर्क यह है कि यह काम नहीं करेगा। एक-हॉट-एनकोड फीचर्स वाला मॉडल तभी काम करता है जब प्रशिक्षण डेटा में उन सभी उपग्रहों का अस्तित्व रहा हो। मॉडल भविष्यवाणी करने में सक्षम नहीं होगा, जब तक कि किसी तरह इसे मैन्युअल रूप से ट्विक नहीं किया जाता है। यदि आप खोजते हैं तो आप पाएंगे कि कई लोग ट्रेन / परीक्षण में अपने डेटा को विभाजित करते समय इस मुद्दे पर भाग गए थे, और एक विशेष सुविधा के कुछ sublevels के मुद्दे का सामना प्रशिक्षण विभाजन में मौजूद नहीं थे और बाद में परीक्षण पर भविष्यवाणी करने में विफल रहे। एक तरफ कहा, यदि आपके पास बहुत अधिक कार्डिनल विशेषताएं हैं (हो सकता है कि आपका शहर जैसा कि 200 शहर के नाम कहें), इससे आपके डेटा की गतिशीलता अनावश्यक रूप से बढ़ जाएगी! यदि कुछ कारणों से आपको एक-हॉट-एन्कोडिंग करने की आवश्यकता हो सकती है, तो बस इन्हें ध्यान में रखें।
  • अन्य एन्कोडिंग विधियों का उपयोग करें । शायद अन्य तरीकों के बारे में अधिक जानने की कोशिश करें जो इस मुद्दे के लिए मजबूत हैं, कम से कम समय के लिए जैसे लक्ष्य-आधारित कोडिंग, हैशिंग (नीचे कुछ संदर्भ देखें)। यदि आप पायथन के साथ हैं तो एक अच्छा पैकेज ऑफर मंट एन्कोडिंग विकल्प है। आपको यह देखकर आश्चर्य हो सकता है कि अन्य सरल तरीके अक्सर ठीक काम करते हैं।

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

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

  • अन्य हाल नहीं-यात परिपक्व समाधान की तरह Cat2Vec (NLP से Word2Vec से उधार) या समानता एन्कोडिंग । ये बहुत ही हाल ही में कर रहे हैं, की जाँच कागज पूर्व और इसके लिए GitHub और एक उदाहरण (Word2Vec के आधार पर) Kaggle में, और इस कागज उत्तरार्द्ध और उसके लिए कार्यान्वयन । पूर्व का विचार श्रेणियों को वैक्टर में बदलना है। जितना मुझे कहना है कि यह वास्तव में काम करने के लिए समझ में आता है, लेकिन मुझे इसका उपयोग करने का कोई अनुभव नहीं है। बाद वाला, तथाकथित गंदा_कट , काफी आशाजनक और उपयोग में आसान लगता है। क्या आपके परीक्षण डेटा में अनदेखी कार्डिनल श्रेणी के लिए मजबूत होना मेरे लिए स्पष्ट नहीं है!

पुनश्च: मैं यह जोड़ना चाहूंगा कि पहली टिप्पणी में दिए गए भौगोलिक स्थान के लिए शहर का विचार वास्तव में अच्छा है और यह वास्तव में जटिल नहीं है क्योंकि वे कई पायथन एपीआई जैसे कि Google या HERE हैं जो आपको ऐसा करने की अनुमति देते हैं। लेकिन यह ध्यान दिया जाता है कि यह केवल नई सुविधाओं को इंजीनियर करने का एक तरीका है और निश्चित रूप से इसे शहर की सुविधा द्वारा प्रतिस्थापित नहीं किया जाना है।

पहले , दूसरे , तीसरे , चौथे (कोई विशेष आदेश नहीं) की जाँच करने के लिए दिलचस्प संदर्भ !

उपर्युक्त सभी बिंदु व्यावहारिक समाधान हैं, बल्कि सैद्धांतिक रूप से सही हैं, और निश्चित रूप से आगे की चर्चाओं के अधीन हैं। और मैं और अधिक जानने के लिए खुश हूं।


1
समान शहरों की क्लस्टरिंग बनाने के बारे में क्या? जैसे अगर हमारे पास एक नया शहर है, तो यह अलग नहीं है कि हमारे पास पहले से क्या है, हम निकटतम मिलान वाले शहर के साथ क्रॉस-चेक कर सकते हैं?
आदित्य

प्रसन्नता आदित्य। यह भी एक उत्कृष्ट विचार है। मुझे नए "समानता एनकोडिंग" के बारे में नहीं पता है, यह मामला हो सकता है कि वे बिल्कुल वही काम कर रहे हैं। उनके ट्यूटोरियल की जाँच करें। यह भी ध्यान दें कि किसी को सावधान रहना होगा कि k- मोड जैसे श्रेणीबद्ध डेटा के लिए किस क्लस्टरिंग का उपयोग किया जाए, क्योंकि उनकी सभी दूरियों का संख्यात्मक मान के समान अर्थ नहीं है।
ट्विनपेंग्जिन

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

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

4

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

अगला कदम मोहम्मद अतहर ने अपने प्रशिक्षण सेट में अन्य शहरों के लिए भौगोलिक निकटता के बारे में कुछ सुझाव दिए हैं। यह बहुत अधिक जटिल होने वाला है इसलिए मैं किसी और को इस पर टिप्पणी करने दूंगा।


सरल शुरू करना और वहाँ से बढ़ना एक बढ़िया सलाह है!
एस्कैचटॉर

0

आपको Vowpal Wabbit की जांच करनी चाहिए , जो हैशिंग ट्रिक और अनुकूली सीखने की दरों का उपयोग करके बहुत अच्छी तरह से नई सुविधाओं को संभालता है ।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.