2012-08-25 24 views
5

मुझे लगता है कि मैंने इसे सबसे अधिक सही ढंग से लागू किया है। एक भाग ने मुझे भ्रमित कर दिया:बेवकूफ Bayesian और शून्य आवृत्ति मुद्दा

शून्य आवृत्ति समस्या: प्रत्येक विशेषता मूल्य-वर्ग संयोजन (लैपलेस अनुमानक) के लिए गणना में 1 जोड़ें, जब प्रत्येक वर्ग मान के साथ एक विशेषता मान नहीं होता है।

//Clasify 
string text = "Claim your free Macbook now!"; 
double posteriorProbSpam = classifier.Classify(text, "spam"); 
Console.WriteLine("-------------------------"); 
double posteriorProbHam = classifier.Classify(text, "ham"); 

अब कहते हैं कि 'निःशुल्क' शब्द कहीं प्रशिक्षण डेटा में मौजूद है

//Training 
classifier.Train("ham", "Attention: Collect your Macbook from store."); 
*Lot more here* 
classifier.Train("spam", "Free macbook offer expiring."); 

लेकिन शब्द श्रेणी के लिए अपने प्रशिक्षण डेटा में मौजूद है:

यहाँ मेरे मुवक्किल कोड के कुछ है 'स्पैम' केवल 'हैम' में नहीं है। तो जब मैं posteriorProbHam की गणना करने के लिए जाता हूं, जब मैं 'मुक्त' शब्द में आता हूं तो मैं क्या करता हूं।

enter image description here

उत्तर

5

फिर भी एक जोड़ें। कारण: बेवकूफ बेयस मॉडल P("free" | spam) और P("free" | ham) पूरी तरह से स्वतंत्र होने के नाते, इसलिए आप प्रत्येक को पूरी तरह से स्वतंत्र रूप से अनुमानित करना चाहते हैं। P("free" | spam) के लिए आप जिस लैपलेस अनुमानक का उपयोग कर रहे हैं वह (count("free" | spam) + 1)/count(spam) है; P("ham" | spam) वही है।

यदि आप सोचते हैं कि इसका कोई मतलब नहीं है, तो यह वास्तव में समझ में नहीं आता है: हैम में "फ्री" एक बार देखकर स्पैम में "मुक्त" देखने की संभावना कम हो जाएगी।

+0

धन्यवाद। मैंने अभी सूत्र का उपयोग करने के लिए संपादित किया है जिसका मैं अनुसरण कर रहा हूं। तो उदाहरण के लिए पी (वियाग्रा | स्पैम), यदि प्रशिक्षण डेटा में 'स्पैम' श्रेणी में वियाग्रा के लिए 0 गिनती है, तो मुझे केवल 1 जोड़ना चाहिए? –

+0

यदि आप लैपलासिअन स्मूथिंग का उपयोग करना चाहते हैं, तो संख्याओं और denominators के * सभी * में जोड़ें, केवल शून्य-गणना नहीं। तो यदि आपके पास 10 नि: शुल्क | स्पैम, 5 नि: शुल्क | गैर-स्पैम, 50 स्पैम कुल, 100 गैर-स्पैम कुल था, तो आप अनुमान लगाएंगे कि 'पी (फ्री | स्पैम) = (10 + 1)/(50 + 1) ' , 'पी (स्पैम) = (50 + 1)/(150 + 1) ',' पी (फ्री) = (15 + 1)/(150 + 1) '। आप 1 से छोटे नंबर का उपयोग भी कर सकते हैं (उदाहरण के लिए 0.1, जिसे आमतौर पर "अल्फा" कहा जाता है, क्योंकि यह एक [Dirichlet-alpha] (http://en.wikipedia.org/wiki/Dirichlet_distribution) वितरण का उपयोग करने से संबंधित है [आपके पहले ] (http://en.wikipedia.org/wiki/Prior_probability) इन संभावनाओं पर।) – Dougal

+0

हाँ, यही वह है जो मैंने किया। चीजें कुछ बार अच्छी लगती हैं, हालांकि अन्य मैं 1 से अधिक संभावनाओं के साथ समाप्त होता हूं। उपरोक्त सूत्र को देखते हुए, यह denominator के परिणाम के आधार पर आसानी से संभव है। –