तंत्रिका नेटवर्क और निर्णय वन के लिए डेटा को सामान्य कैसे करें


10

मेरे पास 20000 नमूनों के साथ एक डेटा सेट है, प्रत्येक में 12 अलग-अलग विशेषताएं हैं। प्रत्येक नमूना या तो श्रेणी 0 या 1 में है। मैं नमूनों को वर्गीकृत करने के लिए एक तंत्रिका नेटवर्क और एक निर्णय वन को प्रशिक्षित करना चाहता हूं ताकि मैं परिणामों और दोनों तकनीकों की तुलना कर सकूं।

पहली चीज जिस पर मैंने ठोकर खाई, वह डेटा का उचित सामान्यीकरण है। एक फीचर रेंज में है[0,106]में एक और [30,40]और एक विशेषता है जो ज्यादातर 8 और कभी-कभी 7 मान लेती है। इसलिए जैसा कि मैंने विभिन्न स्रोतों में पढ़ा है, इनपुट डेटा का उचित सामान्यीकरण तंत्रिका नेटवर्क के लिए महत्वपूर्ण है। जैसा कि मुझे पता चला, उदाहरण के लिए, डेटा को सामान्य करने के कई संभावित तरीके हैं:

  1. न्यूनतम-अधिकतम सामान्यीकरण : इनपुट रेंज रैखिक रूप से अंतराल में बदल जाती है[0,1] (या वैकल्पिक रूप से [1,1], क्या वो वजह बन रही हे?)
  2. Z- स्कोर सामान्यीकरण : डेटा को शून्य माध्य और इकाई विचरण में रूपांतरित किया जाता है:
    ynew=yoldmeanVar

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

क्या ऐसे संयोजन हैं जहां डेटा मैप किया जाता है [1,1] और शून्य का मतलब भी है (जो डेटा का एक गैर-रेखीय परिवर्तन होगा और इसलिए परिवर्तन और इनपुट डेटा की अन्य विशेषताओं में परिवर्तन होगा)।

मैं थोड़ा खोया हुआ महसूस करता हूं क्योंकि मुझे ऐसे संदर्भ नहीं मिल रहे हैं जो इन सवालों का जवाब दें।

जवाबों:


21

मैं अन्य टिप्पणियों से असहमत हूं।

सबसे पहले, मुझे निर्णय पेड़ों के लिए डेटा को सामान्य करने की कोई आवश्यकता नहीं है । निर्णय पेड़ डेटा के प्रत्येक अलग विभाजन के लिए एक अंक (आमतौर पर एन्ट्रॉपी) की गणना करके काम करते हैं(Xxi,X>xi)। डेटा के क्रम में परिवर्तन नहीं करने वाले डेटा में परिवर्तन लागू करने से कोई फर्क नहीं पड़ता।

बेतरतीब जंगल सिर्फ निर्णय पेड़ों का एक गुच्छा हैं, इसलिए यह इस तर्क को नहीं बदलता है।

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

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

कब फर्क पड़ता है? जब आप सिग्मॉइड सक्रियण कार्यों के साथ पारंपरिक बैकप्रोपैजेशन का उपयोग कर रहे हैं, तो यह सिग्मायॉइड व्युत्पन्न को संतृप्त कर सकता है ।

सिग्मॉइड फ़ंक्शन (हरा) और इसके व्युत्पन्न (नीले) पर विचार करें:

अवग्रह

यदि आप अपने डेटा को सामान्य नहीं करते हैं तो क्या होता है कि आपका डेटा यादृच्छिक भार से गुणा किया जाता है और आपको चीजें मिलती हैं s(9999)=0। सिग्मॉइड का व्युत्पन्न शून्य (लगभग) शून्य है और प्रशिक्षण प्रक्रिया साथ नहीं चलती है। तंत्रिका नेटवर्क जिसे आप समाप्त करते हैं, केवल यादृच्छिक वजन (कोई प्रशिक्षण नहीं है) के साथ एक तंत्रिका नेटवर्क है।

क्या यह जानने में हमारी मदद करता है कि सबसे अच्छा सामान्यीकरण फ़ंक्शन क्या है? लेकिन निश्चित रूप से! सबसे पहले, एक सामान्यीकरण का उपयोग करना महत्वपूर्ण है जो आपके डेटा को केंद्र में रखता है क्योंकि अधिकांश कार्यान्वयन शून्य पर पूर्वाग्रह को आरंभ करते हैं। मैं -0.5 और 0.5 के बीच सामान्य करूंगा,XminXmaxXminX0.5। लेकिन मानक स्कोर भी अच्छा है।

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

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


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

उम्मीद है कि यह मदद करता है।


1
महान जवाब, मैं सिर्फ इतना जोड़ूंगा कि यह उस डेटा के विशेष वितरण पर निर्भर करता है जो आप के साथ काम कर रहे हैं और क्या आप आउटलेर्स को हटा रहे हैं। यदि आप इसे मानकीकृत करते हैं तो सामान्य डेटा बहुत अच्छा लगेगा। हालांकि, एक समान वितरण न्यूनतम / अधिकतम सामान्यीकरण के साथ बेहतर लग सकता है। इसके अलावा, सिग्मा = 10 के साथ एक लॉग नॉर्मल डिस्ट्रीब्यूशन शून्य के करीब दिलचस्प व्यवहार को छिपा सकता है यदि आप इसे न्यूनतम / अधिकतम करते हैं।
AN6U5

@ AN6U5 - बहुत अच्छी बात। मैंने ईमानदारी से विभिन्न अंतर्निहित वितरणों / आउटलेर्स पर स्केलिंग के प्रभावों के बारे में बहुत अधिक नहीं सोचा था। आज सुबह इसे पढ़ सकते हैं!
plumbus_bouquet
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.