1. 程式人生 > 實用技巧 >樸素貝葉斯分類學習總結

樸素貝葉斯分類學習總結

寫在前面:還是筆記的總結輸出,大佬看了笑笑就好


樸素貝葉斯

  • 首先我們在小學二年級就學過先驗概率,百度百科給出的解釋:先驗概率(prior probability)是指根據以往經驗和分析得到的概率,個人理解上來說其實先驗概率沒那複雜,它本質就是一個概率,p(X=x),事件X=x發生的概率,追根溯源計算的方式是用事件X=x發生的次數/總樣本事件發生的次數,就是數頻數,然而在試題中,一般分子上的先驗概率已知,而分母的先驗概率一般是通過全概率公式計算得到的,即其先驗概率不能直接得到,要通過∑(完備事件組發生的概率×對應的條件概率)計算得到。

  • 後驗概率:p(X|H)=在假定事件H發生的條件下,X發生的概率,稱為X的後驗概率

  • p(X|H) 計算公式 p(X,H) / p(H)。其中p(X,H)為聯合概率,從某種程度上來說,通過聯合概率計算把計算p(X|H)轉化為計算p(H|X),或者簡單一點的題目p(H|X)都不用算,直接通過計數的方式把聯合概率數出來了。說到底,後驗概率計算的本質還是把它都轉化先驗概率計算問題。

如何理解先驗和後驗概率,這裡給個例子,直接引用下知乎的吧:

如何理解先驗概率與後驗概率 https://zhuanlan.zhihu.com/p/26464206

樸素貝葉斯分類,假設有屬性集U{A1,A2,A3,…,An,C},這裡給個圖比較好理解,圖片來自資料探勘課本,這裡的A1,A2…代表的是attribute(屬性),在下面例子中A1代表outlook,A2代表temperature,A3代表humidity,A4代表wind,C代表class(分類),play ball。用tenserflow的角度來看A1,A2,A3,…,An就是feature(輸入x),維度是[data_size * n],C對應的就是y(label),用輸入x去預測y。

在這裡插入圖片描述

基本思想

說回樸素貝葉斯分類,給一個未知C的樣本X,其中樣本X={a1,a2,a3,…,an},(這裡A可以是向量,但是為了化簡就用小寫的a作標量)我們的目標就是為樣本X預測C,那我們要求的 C = a r g m a x C i P ( C i ∣ X ) C=argmax_{C_i}P(Ci|X) C=argmaxCiP(CiX),換句話說就是求出使得P(C|X)取得最大值所對應的變數點C,這裡的C就作為預測結果,預測一次要計算的次數為class_size次,因為你要找出最大值,你得把所有的類別都算一次,這是基本思想。

計算要點

(p和P都是計算概率的意思,下面一致)

  • 計算 P ( C i ∣ X ) = P ( X ∣ C i ) ⋅ P ( C i ) P ( X ) P(Ci|X)=\frac{P(X|C_i)·P(C_i)}{P(X)}
    P(CiX)=P(X)P(XCi)P(Ci)
    ,為了計算這個式子,樸素貝葉斯作了獨立性假設的前提,即p(X) = p(x1,x2,x3…,xn)=p(x1)p(x2)…p(xn),那麼用小學二年級計算知識 P ( X ∣ C i ) = Π j = 1 n p ( x j ∣ C i ) P(X|C_i) = Π_{j=1}^np(x_j|C_i) P(XCi)=Πj=1np(xjCi)
  • 如何計算P(Ci|X)還是會遇到的一個問題就是如何計算p(x|C),這要分兩種情況討論,一個是離散型,離散型的話就比較簡單了,直接數就行了,計算資料集中屬性為x並且類別為C的樣本點的個數/類別為C的樣本點的個數,但如果是數值型,樸素貝葉斯分類做出了第二個假設:屬性服從高斯分佈,公式太長不好打,放圖了

在這裡插入圖片描述

虛擬碼

虛擬碼來自課本
在這裡插入圖片描述

拉普拉斯平滑處理

laplace估計,主要是用來解決條件概率為0的問題,在計算條件概率P(X|Y),分母+l,分子+l*p,l為等價樣本大小的引數(一般l取原本分母的值),p為使用者指定引數,使用者進行調節。其實在深度學習中常用的還是分子+1,分母+對應類別樣本數

對數解決溢位為0

因為概率過於的小同時要進行累乘,計算機計算後會發現結果為0,某種程度上來說,我們計算貝葉斯分類最終目的不是得到真實值是多少,而是比較哪一個為最大值,為了解決溢位為0的問題可以採取的措施是在計算後驗概率前面加log,由累乘轉化為累加,進而解決溢位問題,機器學習的loss函式、語言模型概率計算都用了這個處理。

小結

優點:容易實現,大多數情況下效果較好
缺點:假設前提是滿足獨立性和高斯分佈,而在實際情況中會更為複雜。