2009-12-29 112 views
9

我正在研究一個樸素貝葉斯分類器的實現。理解貝葉斯定理

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B) 

除了相關文件分類的具體例子:Programming Collective Intelligence通過描述貝葉斯定理爲介紹這一主題

Pr(Category | Document) = Pr(Document | Category) x Pr(Category)/Pr(Document) 

我希望有人能向我解釋這裏使用的符號,是什麼做Pr(A | B)和Pr(A)是什麼意思?它看起來像某種功能,但那麼管道是什麼意思,等等? (我有點失落)

在此先感謝。

+1

絕對是一個http://mathoverflow.net/問題。 – 2009-12-29 12:02:07

+10

@Ofri Raviv:我懷疑這一點。 MathOverflow適用於專業數學家,這個問題將立即關閉。 – 2009-12-29 12:06:57

+1

請使用mathoverflow.net。我唯一擔心的是,這個問題在那裏會過於簡單。 – 2009-12-29 12:07:25

回答

11
  • PR(A | B)=給定甲發生的是乙已經發生
  • PR(A)=的情況發生

概率但上面的概率是相對於所述計算的條件概率。你想要的是一個分類器,它使用這個原則來決定某件事物是否屬於基於先前概率的類別。

爲一個完整的例子

+0

謝謝你,有道理。這裏描述的每個地方都有一定的數學知識,我不具備某些知識:-)。 – benofsky 2009-12-29 12:16:57

1

PR(A | B):A的條件概率:即A的概率,因爲我們都知道爲B

PR(A):的

1

先驗概率管道(|)的意思是「給定」。 (A)/ Pr(B)

1

根據你的問題,我可以強烈建議你先閱讀一些本科的關於概率論的書。如果沒有這個,你將無法在Naive Bayes分類器上正確處理你的任務。

我建議你這本書http://www.athenasc.com/probbook.html或看MIT OpenCourseWare

+0

謝謝,我一定會看看那個。 – benofsky 2009-12-29 12:28:01

0

貌似我寫完全按照你做:)

我試圖找到一個庫(紅寶石)使用樸素貝葉斯文檔分類同樣的事情。 發現了許多圖書館,但每個圖書館都有自己的一套問題。 所以我寫了我自己的實現。 維基百科的文章非常混亂,特別是如果你對這類事情不熟悉的話。 對我而言,Paul Graham關於實施垃圾郵件過濾器的文章要好得多。

我已經在這裏記錄了詳細信息:http://arubyguy.com/2011/03/03/bayes-classification-update/ 當我這樣做的時候,我也會發布我的實現的完成版本,如果你對Ruby解決方案感興趣,你可能想看看。

4

我認爲他們已經涵蓋了基礎知識。

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B) 

寫着:給定B的概率是一樣的給的時間A除以它通常使用時可以測量B的概率和你B的概率劃分的概率B的概率正在試圖弄清楚B是否讓我們相信A。換句話說,我們真的關心A,但是我們可以更直接地衡量B,所以讓我們從我們可以測量的東西開始。

讓我給你一個派生,這使得編寫代碼更容易。它來自Judea Pearl。我有點掙扎,但是當我意識到珍珠如何幫助我們將理論轉化爲代碼之後,燈就開啓了。

之前賠率:

O(H) = P(H)/1 - P(H) 

似然比:

L(e|H) = P(e|H)/P(e|¬H) 

後路賠率:

O(H|e) = L(e|H)O(H) 

在英語中,我們說的東西的機率你有興趣(H代表假設)就是你找到某事的次數除以你的次數發現它不是真的。所以,說一個房子每天都被搶劫了一萬。這意味着你有1/10000被搶劫的機會,而沒有考慮任何其他證據。

下一個是測量你正在查看的證據。當你的問題是真實的時候看到你所看到的證據的概率除以看到你的問題不真實時你看到的證據的概率。假設你聽到你的防盜報警器響起。當它應該熄滅時(有人在鬧鐘開啓時打開一個窗口)與不應該關閉的時間(風將鬧鐘設置爲關閉)相比,您多久會發出一次鬧鐘。如果你有95%的可能性發生了防盜,並有1%的機會發出警報,那麼你有95.0的可能性。

您的整體信念只是可能性*先驗賠率。在這種情況下,它是:

((0.95/0.01) * ((10**-4)/(1 - (10**-4)))) 
# => 0.0095009500950095 

我不知道這使得任何更加清晰,但它往往更容易有一些代碼,保持前期差別的軌道,其他代碼來看看可能性,還有另外一段代碼來結合這些信息。

4

我已經在Python中實現了它。這很容易理解,因爲貝葉斯定理的所有公式都在不同的功能:

#Bayes Theorem 

def get_outcomes(sample_space, f_name='', e_name=''): 
    outcomes = 0 
    for e_k, e_v in sample_space.items(): 
     if f_name=='' or f_name==e_k: 
      for se_k, se_v in e_v.items(): 
       if e_name!='' and se_k == e_name: 
        outcomes+=se_v 
       elif e_name=='': 
        outcomes+=se_v 
    return outcomes 

def p(sample_space, f_name): 
    return get_outcomes(sample_space, f_name)/get_outcomes(sample_space, '', '') 

def p_inters(sample_space, f_name, e_name): 
    return get_outcomes(sample_space, f_name, e_name)/get_outcomes(sample_space, '', '') 

def p_conditional(sample_space, f_name, e_name): 
    return p_inters(sample_space, f_name, e_name)/p(sample_space, f_name) 

def bayes(sample_space, f, given_e): 
    sum = 0; 
    for e_k, e_v in sample_space.items(): 
     sum+=p(sample_space, e_k) * p_conditional(sample_space, e_k, given_e) 
    return p(sample_space, f) * p_conditional(sample_space, f, given_e)/sum 

sample_space = {'UK':{'Boy':10, 'Girl':20}, 
       'FR':{'Boy':10, 'Girl':10}, 
       'CA':{'Boy':10, 'Girl':30}} 

print('Probability of being from FR:', p(sample_space, 'FR')) 
print('Probability to be French Boy:', p_inters(sample_space, 'FR', 'Boy')) 
print('Probability of being a Boy given a person is from FR:', p_conditional(sample_space, 'FR', 'Boy')) 
print('Probability to be from France given person is Boy:', bayes(sample_space, 'FR', 'Boy')) 

sample_space = {'Grow' :{'Up':160, 'Down':40}, 
       'Slows':{'Up':30, 'Down':70}} 

print('Probability economy is growing when stock is Up:', bayes(sample_space, 'Grow', 'Up')) 
3

我個人覺得這個解釋best

0

管道是用來表示條件概率。 Pr(A | B)=給定B的概率

例如: 假設您感覺不舒服,並且您在網上搜索症狀。互聯網告訴你,如果你有這些症狀,那麼你有XYZ疾病。

在這種情況下: Pr(A | B)是你試圖找出,即: 你有XYZ的概率,你有一定的症狀。

PR(A)是具有疾病XYZ

PR(B)的概率是有那些症狀

的概率

PR(B | A)是您從互聯網上發現什麼,這是: 出現症狀的可能性給你帶來疾病。