我正在寫一個樸素貝葉斯分類器,用於執行WiFi信號強度的室內房間本地化。到目前爲止,它運行良好,但我有一些關於缺少功能的問題。這經常發生,因爲我使用WiFi信號,並且WiFi接入點在任何地方都不可用。處理樸素貝葉斯分類器中的缺失屬性
問題1:假設我有兩個類Apple和Banana,並且我想按以下方式對測試實例T1進行分類。
我完全瞭解樸素貝葉斯分類的作品。以下是我在分類器上從Wikipedia's article使用的公式。我使用統一的先驗概率P(C = c),所以我在我的實現中省略了它。
現在,當我計算公式,並遍歷所有的分類條件概率的功能,其設置的功能我用的右邊?測試實例T1使用功能1,3和4,但這兩個類沒有所有這些功能。因此,當我執行我的循環來計算概率乘積時,我看到我正在循環的幾個選項:
- 循環遍歷來自訓練的所有要素,即要素1,2,3,4。由於測試實例T1不具有特徵2,因此使用人造小概率。
- 只循環測試實例的功能,即1,3和4.
- 循環遍歷每個類可用的功能。爲了計算'蘋果'的類別條件概率,我將使用特徵1,2和3,對於'香蕉',我會使用2,3和4.
上面哪個應該是我使用?
問題2:比方說,我想測試實例T2,其中T2在任一類沒有找到功能分類。我使用日誌概率來幫助消除下溢,但我不確定循環的細節。我做這樣的事情(在類似Java的僞代碼):
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的bestLogProbability中,或1.0的線性概率,這顯然是錯誤的。有什麼更好的方式來處理這個問題?
謝謝。 m估計方法適用於離散數據,對嗎?類似拉普拉斯平滑?我的問題是這些特徵都是連續的,我使用高斯PDF來計算似然概率密度。是否有連續特徵的m估計等價物? – stackoverflowuser2010
啊,我沒有意識到你正在使用pdf的副計算概率。是的,m估計值用於離散數據。如果用n_i * pdf_i替換公式中的n_i,則可能仍然可以使用m估計,其中pdf_i是針對給定屬性值計算的高斯pdf值。那麼,對於非零m,它會阻止你的後驗概率變爲零,並且你仍然可以使用m的值來平衡你的計算概率和假設的先驗概率。 – bogatron
我對m估計並不熟悉,但我正在考慮類似於Laplace add-1平滑的另一種方法:只給出一個小概率來丟失要素,以使產品不爲零。對於我的示例中的測試實例T1,要素2將被賦予一個很小的概率,如0.000001或其他。我已經實現了它,它似乎運作良好。但這是一個合理的方法嗎? – stackoverflowuser2010