2012-11-19 78 views
6

我正在寫一個樸素貝葉斯分類器,用於執行WiFi信號強度的室內房間本地化。到目前爲止,它運行良好,但我有一些關於缺少功能的問題。這經常發生,因爲我使用WiFi信號,並且WiFi接入點在任何地方都不可用。處理樸素貝葉斯分類器中的缺失屬性

問題1:假設我有兩個類Apple和Banana,並且我想按以下方式對測試實例T1進行分類。

enter image description here

我完全瞭解樸素貝葉斯分類的作品。以下是我在分類器上從Wikipedia's article使用的公式。我使用統一的先驗概率P(C = c),所以我在我的實現中省略了它。

enter image description here

現在,當我計算公式,並遍歷所有的分類條件概率的功能,其設置的功能我用的右邊?測試實例T1使用功能1,3和4,但這兩個類沒有所有這些功能。因此,當我執行我的循環來計算概率乘積時,我看到我正在循環的幾個選項:

  1. 循環遍歷來自訓練的所有要素,即要素1,2,3,4。由於測試實例T1不具有特徵2,因此使用人造小概率。
  2. 只循環測試實例的功能,即1,3和4.
  3. 循環遍歷每個類可用的功能。爲了計算'蘋果'的類別條件概率,我將使用特徵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的線性概率,這顯然是錯誤的。有什麼更好的方式來處理這個問題?

回答

6

對於樸素貝葉斯分類器,等式的右邊應該遍歷所有屬性。如果您擁有人口稀少的屬性,通常使用的方法是使用等效樣本大小計算您的概率的概率爲m估計值。這將防止當您的訓練數據缺少屬性值時,類別條件概率變爲零。做一個網上搜索上面的兩個大膽的術語,你會發現m估計公式的許多描述。描述這一點的很好的參考文本是Tom Mitchell的Machine Learning。基本公式是

P_I =(n_i個+ M * P_I)/(N + M)

n_i個是訓練實例的數目,其中該屬性具有值f_i,n是訓練實例的數目(與當前分類),m是等效樣本大小,並且p_i是f_i的先驗概率。如果設置m = 0,則只會回到標準概率值(對於缺少的屬性值,可能爲零)。隨着m變得非常大,P_i接近p_i(即,概率由先驗概率支配)。如果您沒有先驗概率使用,則將其設爲1/k,其中k是屬性值的數量。

如果您使用這種方法,那麼對於您的實例T2,在訓練數據中沒有任何屬性,結果將是訓練數據中最經常出現的類別。這是有道理的,因爲培訓數據中沒有相關信息可以用來做出更好的決策。

+0

謝謝。 m估計方法適用於離散數據,對嗎?類似拉普拉斯平滑?我的問題是這些特徵都是連續的,我使用高斯PDF來計算似然概率密度。是否有連續特徵的m估計等價物? – stackoverflowuser2010

+0

啊,我沒有意識到你正在使用pdf的副計算概率。是的,m估計值用於離散數據。如果用n_i * pdf_i替換公式中的n_i,則可能仍然可以使用m估計,其中pdf_i是針對給定屬性值計算的高斯pdf值。那麼,對於非零m,它會阻止你的後驗概率變爲零,並且你仍然可以使用m的值來平衡你的計算概率和假設的先驗概率。 – bogatron

+0

我對m估計並不熟悉,但我正在考慮類似於Laplace add-1平滑的另一種方法:只給出一個小概率來丟失要素,以使產品不爲零。對於我的示例中的測試實例T1,要素2將被賦予一個很小的概率,如0.000001或其他。我已經實現了它,它似乎運作良好。但這是一個合理的方法嗎? – stackoverflowuser2010

1

我會試圖簡單地忽略所有類別在培訓中找不到的功能。如果您選擇不這樣做,那麼您基本上會幻覺數據,然後將其同等對待於分類步驟中確實存在的數據。所以我對問題1的簡單回答就是僅僅根據特徵3做出決定(你只是沒有足夠的信息去做其他事情)。這是@ bogatron提到的m估計值的一部分。

對於某些功能缺失的培訓班來說,這有一個更復雜的答案,但這需要更多的工作。第m的估計是真正結束P_I(在你的情況是mu_i,sigma_i)給定訓練數據,這是在P_I(分數n_i個/ n)的組成的現有的和似然函數p的後驗分佈的點估計(data | p_i)。在你沒有觀察到數據點的情況下,你可以基本上恢復到預先分配該特徵的先驗。

現在,你如何去估計之前呢?那麼,如果問題中類的數量很少,相對於缺少某些特徵值的數量,則可以從具有數據的類中推斷先驗參數,並考慮缺失類的預測分佈數據就像之前一樣(對於有數據的類,你的預測分佈是後驗)。對你來說有用的指針是,因爲你似乎假設你的數據是正態分佈的(或者至少用它們的平均值和標準偏差來表徵),爲了共軛,平均值的先驗值也應該是正常的。我可能希望避免對標準偏差的事先分佈做出推斷,因爲如果你是新手的話,這有點費勁。

但是,請注意,如果您有足夠的類與該功能的觀察值,分數缺失值很小,這是唯一有意義的。特別是,在你的例子中,你只有一個觀測類,所以你可能爲班級「香蕉」中的特徵1做的最好的做法是假定關於mu_1的不確定性是由以「蘋果」爲中心的分佈表示的具有一些任意方差。或者你可以假設他們的音樂是平等的,在這種情況下,它對這個決定沒有任何影響,你可能會忽略它!

因此,不幸的是,您的問題2的答案是您的代碼正在做正確的事情。如果您的新測試實例僅具有在培訓中從未觀察到的功能,您希望如何選擇一個課程?你根本無法做到比選擇更好。

+0

感謝您的解釋。關於前輩,我目前假設等概率的前輩。事實上,維基百科關於樸素貝葉斯分類的文章說:「一個類的先驗可以通過假設等概率類或者通過計算訓練集中類概率的估計來計算」。做這個等概率的假設可以嗎?如果不是,那麼計算前面的#Apple /#allClasses似乎相當隨意。如果培訓數據碰巧有1000個蘋果和10個香蕉,因爲雜貨店恰巧在香蕉上出售,他們全都不見了? – stackoverflowuser2010

+0

這是一個經常出現混淆的地方---我不是在談論班級事先,而是事先對每個特徵的參數進行討論。如果你的特徵是正態分佈的,它有參數mu_i(mean)和sigma_i(標準dev)。我在mu_i上提出了一個預先的建議,它在您看例子之前對您認爲mu_i將看起來像*的想法進行了編碼。如果你沒有看到的例子,那麼就回到以前的樣子。關於貝葉斯方法的優秀教科書將闡明:David Mackay的書,可在線獲取:http://www.inference.phy.cam.ac.uk/mackay/itila/book.html –