2012-11-19 11 views
6

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

प्रश्न 1: मान लीजिए कि मेरे पास दो वर्ग, ऐप्पल और केले हैं, और मैं नीचे परीक्षण उदाहरण टी 1 वर्गीकृत करना चाहता हूं।

enter image description here

मैं पूरी तरह से समझ कैसे अनुभवहीन Bayes वर्गीकारक काम करता है। नीचे वह सूत्र है जिसका मैं वर्गीकरण पर Wikipedia's article से उपयोग कर रहा हूं। मैं वर्दी पूर्व संभावनाओं का उपयोग कर रहा हूं पी (सी = सी), इसलिए मैं इसे अपने कार्यान्वयन में छोड़ रहा हूं।

enter image description here

अब

, जब मैं समीकरण और सभी वर्ग सशर्त सुविधा संभावनाओं से अधिक पाश, सुविधाओं के सेट जो मैं प्रयोग करते हैं की दाएँ हाथ की ओर की गणना? टेस्ट इंस्टेंस टी 1 फीचर्स 1, 3, और 4 का उपयोग करता है, लेकिन दोनों कक्षाओं में ये सभी सुविधाएं नहीं हैं। तो जब मैं संभावना उत्पाद की गणना करने के लिए अपने पाश प्रदर्शन, मैं क्या मैं पाशन कर रहा हूँ पर कई विकल्प दिखाई: प्रशिक्षण से सभी सुविधाओं के मिलन से अधिक

  1. लूप, अर्थात् सुविधाओं 1, 2, 3, 4। चूंकि परीक्षण उदाहरण टी 1 में सुविधा 2 नहीं है, फिर कृत्रिम छोटी संभावना का उपयोग करें।
  2. परीक्षण उदाहरण की केवल विशेषताओं, अर्थात् 1, 3, और 4.
  3. प्रत्येक वर्ग के लिए उपलब्ध सुविधाओं पर लूप। 'एप्पल' के लिए वर्ग सशर्त संभावना की गणना करने के लिए, मैं सुविधाओं 1, 2 का प्रयोग करेंगे, और 3, और 'केला' के लिए, मैं 2, 3, और 4.

का प्रयोग करेंगे में से कौन सा ऊपर मैं चाहिए उपयोग?

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

Double bestLogProbability = -100000; 
ClassLabel bestClassLabel = null; 

for (ClassLabel classLabel : allClassLabels) 
{ 
    Double logProbabilitySum = 0.0; 

    for (Feature feature : allFeatures) 
    { 
     Double logProbability = getLogProbability(classLabel, feature); 

     if (logProbability != null) 
     { 
      logProbabilitySum += logProbability; 
     } 
    } 

    if (bestLogProbability < logProbability) 
    { 
     bestLogProbability = logProbabilitySum; 
     bestClassLabel = classLabel; 
    } 
} 

समस्या है कि अगर वर्गों में से कोई भी परीक्षण उदाहरण की सुविधाओं (उदाहरण में सुविधा 5) है, तो logProbabilitySum 0.0, रहेगा जिसके परिणामस्वरूप: मैं कुछ इस तरह (जावा की तरह स्यूडोकोड में) कर रहा हूँ 0.0 की सर्वोत्तम लॉगप्रोबैबिलिटी में, या 1.0 की रैखिक संभावना, जो स्पष्ट रूप से गलत है। इसे संभालने का बेहतर तरीका क्या है?

उत्तर

6

बेवकूफ बेयस वर्गीकृत के लिए, आपके समीकरण के दाएं हाथ की तरफ सभी विशेषताओं पर फिर से चलना चाहिए। यदि आपके पास ऐसे गुण हैं जो कम आबादी वाले हैं, तो m-estimate का उपयोग करके समकक्ष नमूना आकार का उपयोग करने की संभावनाओं की गणना करने के लिए इसका उपयोग करने का सामान्य तरीका है। यह आपके प्रशिक्षण डेटा में अनुपलब्ध विशेषता मान होने पर कक्षा-सशर्त संभावनाएं शून्य होने से रोकेंगी। उपर्युक्त दो बोल्ड शर्तों के लिए एक वेब खोज करें और आपको एम-अनुमान फॉर्मूला के कई विवरण मिलेंगे। टॉम मिशेल द्वारा इसका वर्णन करने वाला एक अच्छा संदर्भ पाठ Machine Learning है।मूलभूत फार्मूला

p_i = (n_i + m * p_i)/(n + m)

n_i जहां विशेषता मान f_i है प्रशिक्षण उदाहरणों की संख्या है, एन प्रशिक्षण उदाहरणों की संख्या है (के साथ वर्तमान वर्गीकरण), एम बराबर नमूना आकार है, और p_i f_i के लिए पूर्व संभावना है। यदि आप m = 0 सेट करते हैं, तो यह केवल मानक संभावना मानों (जो शून्य हो सकता है, अनुपलब्ध विशेषता मानों के लिए) पर वापस आ जाता है। चूंकि एम बहुत बड़ा हो जाता है, पी_आई पी_आई (यानी, संभावना पूर्व संभावना से प्रभुत्व है) तक पहुंचता है। यदि आपके पास उपयोग करने की पूर्व संभावना नहीं है, तो बस इसे 1/के बनाएं, जहां के गुण गुणों की संख्या है।

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

+0

धन्यवाद। एम-अनुमान दृष्टिकोण अलग डेटा के लिए है, है ना? लेपलेस चिकनाई के समान? मेरी समस्या यह है कि विशेषताएं सभी निरंतर हैं, और मैं संभावना संभाव्यता घनत्व की गणना करने के लिए एक गाऊशियन पीडीएफ का उपयोग कर रहा हूं। निरंतर सुविधाओं के लिए एम-अनुमान के बराबर है? – stackoverflowuser2010

+0

आह, मुझे एहसास नहीं हुआ कि आप पीडीएफ की उपाबद्ध संभावनाओं का उपयोग कर रहे थे। हां, एम-अनुमान का उपयोग असतत डेटा के साथ किया जाता है। यदि आप n_i * pdf_i के साथ सूत्र में n_i को प्रतिस्थापित करते हैं, तो आप शायद एम-अनुमान का उपयोग कर सकते हैं, जहां pdf_i गॉसियन पीडीएफ मान है जिसे आप दिए गए विशेषता मान के लिए गणना करते हैं। फिर, गैर-शून्य मीटर के लिए, यह आपकी पिछली संभावना शून्य होने से रोक देगा और आप अभी भी अपनी गणना की संभावना और अनुमानित पूर्व के बीच संतुलन के लिए एम के मान का उपयोग कर सकते हैं। – bogatron

+0

मैं एम-अनुमानों से परिचित नहीं हूं, लेकिन मैं लैपलेस ऐड-1 स्मूथिंग के समान एक अलग दृष्टिकोण के बारे में सोच रहा हूं: केवल सुविधाओं को याद करने की एक छोटी संभावना दें ताकि उत्पाद शून्य न हो। मेरे उदाहरण में परीक्षण उदाहरण टी 1 के लिए, फीचर 2 को एक छोटी संभावना दी जाएगी, जैसे कि 0.000001 या कुछ। मैंने इसे लागू किया है, और ऐसा लगता है कि यह अच्छी तरह से काम करता है। लेकिन क्या यह एक अच्छा दृष्टिकोण है? – stackoverflowuser2010

1

मैं में कक्षाओं में सभी सुविधाओं को आसानी से अनदेखा करने का लुत्फ उठाऊंगा। यदि आप अन्यथा करना चुनते हैं, तो आप अनिवार्य रूप से डेटा को हेलुसिनेट कर रहे हैं और उसके बाद वर्गीकरण चरण में वास्तव में मौजूद डेटा के समान व्यवहार कर रहे हैं। तो प्रश्न 1 का मेरा सरल जवाब केवल सुविधा 3 के आधार पर निर्णय लेना होगा (आपके पास बस कुछ और करने के लिए पर्याप्त जानकारी नहीं है)। यह @bogatron द्वारा उल्लिखित एम अनुमान का हिस्सा है।

प्रशिक्षण में कक्षाओं के लिए इसका एक और जटिल जवाब है जहां कुछ विशेषताओं की कमी है, लेकिन यह एक अच्छा सौदा अधिक काम करेगा। एम-अनुमान वास्तव में पी_आई (जो आपके मामले में mu_i, sigma_i) पर पिछले वितरण का एक बिंदु अनुमान है, जो आपके प्रशिक्षण डेटा को दिया गया है, जो पहले p_i (अंश n_i/n) से पहले से बना है और संभावना फ़ंक्शन पी (डेटा | पी_आई)। ऐसे मामले में जहां आप कोई डेटापॉइंट्स नहीं देखते हैं, आप अनिवार्य रूप से उस सुविधा के पूर्वानुमानित वितरण के लिए पूर्व में वापस आ सकते हैं।

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

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

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

+0

धन्यवाद। प्रियर के बारे में, मैं वर्तमान में equiprobable priors मान रहा हूँ। वास्तव में, बेवकूफ बेयस वर्गीकरण पर विकिपीडिया लेख कहता है: "कक्षा" को पहले इक्विप्रोबल वर्ग मानकर, या प्रशिक्षण सेट से कक्षा की संभावना के अनुमान के आधार पर गणना की जा सकती है। क्या यह समझदार धारणा बनाना ठीक होगा? यदि नहीं, तो यह # एप्पल/# allClasses के रूप में पहले की गणना करने के लिए काफी मनमाना लगता है। क्या होगा यदि प्रशिक्षण डेटा में 1000 सेब और 10 केले हों क्योंकि किराने की दुकान केले पर बिक्री हुई थी और वे सब चले गए थे? – stackoverflowuser2010

+0

यह लगातार भ्रम का एक बिंदु है --- मैं कक्षा के बारे में पहले बात नहीं कर रहा हूं, बल्कि प्रत्येक सुविधा के लिए पैरामीटर पर पहले। यदि आपकी सुविधा सामान्य रूप से वितरित की जाती है, तो इसमें पैरामीटर mu_i (माध्य) और sigma_i (मानक dev) है। मैंने mu_i पर एक पूर्व सुझाव दिया है, जो इस विचार को एन्कोड करता है कि आपको उम्मीद है कि mu_i जैसा दिखता है * इससे पहले कि आप उदाहरण देखें। यदि आपके पास देखने के लिए कोई उदाहरण नहीं है, तो पहले वापस गिरें। बेयसियन विधियों पर एक अच्छी पाठ्यपुस्तक स्पष्ट करेगी: डेविड मैके की पुस्तक, ऑनलाइन उपलब्ध: http://www.inference.phy.cam.ac.uk/mackay/itila/book.html –

संबंधित मुद्दे