You want to know why we bother with smoothing at all in a Naive Bayes classifier (when we can throw away the unknown features instead).
The answer to your question is: not all words have to be unknown in all classes.
Say there are two classes M and N with features A, B and C, as follows:
M: A=3, B=1, C=0
(In the class M, A appears 3 times and B only once)
N: A=0, B=1, C=3
(कक्षा एन में , सी 3 बार और बी केवल एक बार दिखाई देता है )
आइए देखें कि जब आप शून्य बार दिखाई देने वाली सुविधाओं को फेंक देते हैं तो क्या होता है ।
ए) थ्रो अवे फीचर्स दैट अपियर जीरो टाइम्स इन एनी क्लास
यदि आप ए और सी की विशेषताओं को फेंक देते हैं क्योंकि वे किसी भी वर्ग में शून्य बार दिखाई देते हैं, तो आपके पास केवल दस्तावेज़ बी के साथ दस्तावेज़ों को वर्गीकृत करने के लिए छोड़ दिया जाता है।
और उस जानकारी को खोना एक बुरी बात है जैसा कि आप नीचे देखेंगे!
यदि आपको एक परीक्षण दस्तावेज के साथ प्रस्तुत किया जाता है:
बी = 1, सी = 3
(इसमें एक बार बी और तीन बार सी)
Now, since you've discarded the features A and B, you won't be able to tell whether the above document belongs to class M or class N.
So, losing any feature information is a bad thing!
B) Throw Away Features That Appear Zero Times In All Classes
Is it possible to get around this problem by discarding only those features that appear zero times in all of the classes?
No, because that would create its own problems!
The following test document illustrates what would happen if we did that:
A=3, B=1, C=1
एम और एन की संभावना दोनों शून्य हो जाएगी (क्योंकि हम कक्षा एन में ए की शून्य संभावना और कक्षा एम में सी की शून्य संभावना नहीं फेंकते हैं )।
सी) दूर कुछ भी मत फेंको - इसके बजाय चौरसाई का उपयोग करें
चौरसाई आपको उपरोक्त दोनों दस्तावेजों को सही ढंग से वर्गीकृत करने की अनुमति देती है क्योंकि:
- आप उन कक्षाओं में जानकारी नहीं खोते जहां ऐसी जानकारी उपलब्ध है और
- आपको शून्य गणना के साथ संघर्ष करने की आवश्यकता नहीं है।
Naive Bayes Classifiers अभ्यास में
NLTK में Naive Bayes क्लासिफायर ने उन विशेषताओं को फेंक दिया, जिनकी किसी भी कक्षा में शून्य गणना थी।
यह एक कठिन EM प्रक्रिया (जहाँ क्लासिफायर को बहुत कम प्रशिक्षण डेटा से बूटस्ट्रैप किया जाता है) का उपयोग करके प्रशिक्षित होने पर इसे खराब प्रदर्शन करने के लिए उपयोग किया जाता है।