में गायब विशेषताओं को संभालना मैं वाईफाई सिग्नल शक्ति से इनडोर रूम स्थानीयकरण करने के लिए एक बेवकूफ बेयस वर्गीकरण लिख रहा हूं। अब तक यह अच्छी तरह से काम कर रहा है, लेकिन मेरे पास गायब सुविधाओं के बारे में कुछ सवाल हैं। यह अक्सर होता है क्योंकि मैं वाईफाई सिग्नल का उपयोग करता हूं, और वाईफाई एक्सेस पॉइंट्स हर जगह उपलब्ध नहीं हैं।नाइव बेयस क्लासिफायर
प्रश्न 1: मान लीजिए कि मेरे पास दो वर्ग, ऐप्पल और केले हैं, और मैं नीचे परीक्षण उदाहरण टी 1 वर्गीकृत करना चाहता हूं।
मैं पूरी तरह से समझ कैसे अनुभवहीन Bayes वर्गीकारक काम करता है। नीचे वह सूत्र है जिसका मैं वर्गीकरण पर Wikipedia's article से उपयोग कर रहा हूं। मैं वर्दी पूर्व संभावनाओं का उपयोग कर रहा हूं पी (सी = सी), इसलिए मैं इसे अपने कार्यान्वयन में छोड़ रहा हूं।
, जब मैं समीकरण और सभी वर्ग सशर्त सुविधा संभावनाओं से अधिक पाश, सुविधाओं के सेट जो मैं प्रयोग करते हैं की दाएँ हाथ की ओर की गणना? टेस्ट इंस्टेंस टी 1 फीचर्स 1, 3, और 4 का उपयोग करता है, लेकिन दोनों कक्षाओं में ये सभी सुविधाएं नहीं हैं। तो जब मैं संभावना उत्पाद की गणना करने के लिए अपने पाश प्रदर्शन, मैं क्या मैं पाशन कर रहा हूँ पर कई विकल्प दिखाई: प्रशिक्षण से सभी सुविधाओं के मिलन से अधिक
- लूप, अर्थात् सुविधाओं 1, 2, 3, 4। चूंकि परीक्षण उदाहरण टी 1 में सुविधा 2 नहीं है, फिर कृत्रिम छोटी संभावना का उपयोग करें।
- परीक्षण उदाहरण की केवल विशेषताओं, अर्थात् 1, 3, और 4.
- प्रत्येक वर्ग के लिए उपलब्ध सुविधाओं पर लूप। 'एप्पल' के लिए वर्ग सशर्त संभावना की गणना करने के लिए, मैं सुविधाओं 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 की रैखिक संभावना, जो स्पष्ट रूप से गलत है। इसे संभालने का बेहतर तरीका क्या है?
धन्यवाद। एम-अनुमान दृष्टिकोण अलग डेटा के लिए है, है ना? लेपलेस चिकनाई के समान? मेरी समस्या यह है कि विशेषताएं सभी निरंतर हैं, और मैं संभावना संभाव्यता घनत्व की गणना करने के लिए एक गाऊशियन पीडीएफ का उपयोग कर रहा हूं। निरंतर सुविधाओं के लिए एम-अनुमान के बराबर है? – stackoverflowuser2010
आह, मुझे एहसास नहीं हुआ कि आप पीडीएफ की उपाबद्ध संभावनाओं का उपयोग कर रहे थे। हां, एम-अनुमान का उपयोग असतत डेटा के साथ किया जाता है। यदि आप n_i * pdf_i के साथ सूत्र में n_i को प्रतिस्थापित करते हैं, तो आप शायद एम-अनुमान का उपयोग कर सकते हैं, जहां pdf_i गॉसियन पीडीएफ मान है जिसे आप दिए गए विशेषता मान के लिए गणना करते हैं। फिर, गैर-शून्य मीटर के लिए, यह आपकी पिछली संभावना शून्य होने से रोक देगा और आप अभी भी अपनी गणना की संभावना और अनुमानित पूर्व के बीच संतुलन के लिए एम के मान का उपयोग कर सकते हैं। – bogatron
मैं एम-अनुमानों से परिचित नहीं हूं, लेकिन मैं लैपलेस ऐड-1 स्मूथिंग के समान एक अलग दृष्टिकोण के बारे में सोच रहा हूं: केवल सुविधाओं को याद करने की एक छोटी संभावना दें ताकि उत्पाद शून्य न हो। मेरे उदाहरण में परीक्षण उदाहरण टी 1 के लिए, फीचर 2 को एक छोटी संभावना दी जाएगी, जैसे कि 0.000001 या कुछ। मैंने इसे लागू किया है, और ऐसा लगता है कि यह अच्छी तरह से काम करता है। लेकिन क्या यह एक अच्छा दृष्टिकोण है? – stackoverflowuser2010