\[P(A\mid B) = \frac{P(B\mid A)P(A)}{P(B)}\]python
咱們把P(A)稱爲"先驗機率"(Prior probability),即在B事件發生以前,對A事件機率的一個判斷。P(A|B)稱爲"後驗機率"(Posterior probability),即在B事件發生以後,對A事件機率的從新評估。P(B|A)/P(B)稱爲"可能性函數"(Likelyhood),這是一個調整因子,使得預估機率更接近真實機率。算法
因此,條件機率能夠理解成式子:後驗機率 = 先驗機率 x 調整因子。這就是貝葉斯推斷的含義。先預估一個"先驗機率",而後加入實驗結果,看這個實驗究竟是加強仍是削弱了"先驗機率",由此獲得更接近事實的"後驗機率"。函數
而分類問題的目標是,根據給定特徵得出類別。代入到貝葉斯公式中就是:學習
\[P(類別\mid 特徵) = \frac{P(特徵\mid 類別)P(類別)}{P(特徵)}\]spa
需求:當用戶輸入一個不在字典中的單詞,推測他想輸入的單詞code
猜想用戶想輸入的單詞爲h,而實際輸入的單詞D,根據公式有:事件
\[P(h\mid D) = \frac{P(h)P(D\mid h)}{P(D)}\]string
對於不一樣的猜想詞h一、h二、h3...,P(h)爲詞頻,P(D|h)可用不一樣字母的個數 / 鍵盤上的字母鍵位距離等評估,P(D)爲一常數,在比較時可忽略。it
因而有 \(P(h\mid D) \propto{P(h)P(D\mid h)}\) ,比較多種猜想中哪一個機率最大則能夠判斷糾正爲這個正確的單詞。io
import re, collections def words(text): return re.findall('[a-z]+', text.lower()) #findall(pattern, string, flags=0) 返回string中全部與pattern相匹配的所有子串 def train(features): model = collections.defaultdict(lambda: 1) #py2.7中的經常使用集合模塊collections for f in features: model[f] += 1 return model NWORDS = train(words(open('big.txt').read())) alphabet = 'abcdefghijklmnopqrstuvwxyz' #兩個詞之間的編輯距離定義爲 使用了幾回插入、刪除、交換、替換 def edits1(word): #編輯距離爲1 n = len(word) return set([word[0:i]+word[i+1:] for i in range(n)] + #刪除 [word[0:i]+word[i+1]+word[i]+word[i+2:] for i in range(n)] + #交換 [word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet] + #替換 [word[0:i]+c+word[i:] for i in range(n) for c in alphabet] #插入 ) def edits2(word): #編輯距離爲2 return set(e2 for e1 in edits1(word) for e2 in edits1(e1)) #只返回正確的單詞 def known(words): return set(w for w in words if w in NWORDS) #若是known(set)非空 則再也不計算後面的 def correct(word): candidates = known([word]) or known(edits1(word)) or known(edits2(word)) or [word] return max(candidates, key=lambda w: NWORDS[w]) #返回機率最大的值 # argmaxc P(c|w) -> argmaxc P(w|c)P(c)/P(w) # P(c) c的詞頻 P(w|c) 在想鍵入c的狀況下敲成w的機率
這是一個典型的二分類問題。設郵件內容爲D,h+表示垃圾郵件 h-表示正常郵件。
因而有
P(h+|D) = P(h+)P(D|h+)/P(D)
P(h-|D) = P(h-)P(D|h-)/P(D)
假設D裏面含有N個單詞d1,d2,d3...,
P(D|h+) = P(d1,d2,...,dn|h+) = P(d1|h+) * P(d2|d1,h+) * P(d3|d2,d1,h+) * ...
因爲樸素貝葉斯分類器基於一個簡單的假定:給定目標值時屬性之間相互條件獨立,因而可化爲 P(d1|h+) * P(d2|h+) * P(d3|h+) * ... 也即統計詞頻