日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[机器学习] 分类 --- Naive Bayes(朴素贝叶斯)

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [机器学习] 分类 --- Naive Bayes(朴素贝叶斯) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、概率知識點復習

(1)條件概率

就是事件A在另外一個事件B已經發生條件下的發生概率。條件概率表示為P(A|B),讀作“在B條件下A的概率”。

(2)聯合概率

可以簡單的理解為事件A與事件B都發生的概率,記為P(AB)或P(A, B)。

此處就有 ?P(A, B) = P(A|B) * P(B)

若事件A與事件B獨立,則有 P(A, B) = P(A) * P(B),這也說明了此時?P(A|B) = P(A)。

(3)全概率

如果事件B1,B2,B3,…,Bn 構成一個完備事件組,即它們兩兩互不相容,其和為全集;并且P(Bi)大于0,則對任一事件A有:

P(A)=P(A|B1)*P(B1) + P(A|B2)*P(B2) + ... + P(A|Bn)*P(Bn)

(這里我就只介紹這么多,大家如果對全概率不太理解的可以去補充補充!這點很重要,對后面理解貝葉斯很重要!!今天我重點在講貝葉斯,所以此處就不在多講全概率啦~~~后面的例子會涉及到!)

二、貝葉斯定理

我們在生活中經常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關心P(B|A),貝葉斯定理就為我們打通從P(A|B)求得P(B|A)的道路。

此處我就給出貝葉斯定理的公式(其推導沒必要知道)

便于大家記憶,可以這樣記P(A, B) = P(A|B) * P(B) 且P(A, B) = P(B|A) * P(A),大家將兩式子合并會有P(A|B) * P(B) = ?P(B|A) * P(A)

現有校準過的槍5把,沒校準過的3把。現在某人用校準過的槍打靶中靶概率為0.8,用沒校準過的槍中靶概率只為0.3。現在已知拿起一把槍打靶中靶了,請問這個槍是校準過的槍的概率?

(分析:直接套用上面的公式,但做P(A)的時候是要用到全概率的!!(全概率的重要性體現出來了))

?? 令中靶的事件為A,選中校準過的槍的事件為B1,選中未校準過的搶的事件為B2

? ? 則: P(B1) = 5 / 8 ? ? ? ?P(B2) = 3 / 8

? ?????????? P(A|B1) = 8 / 10?? P(A|B2) = 3 / 10

? ?????????? P(A) = P(A|B1)P(B1) + P(A|B2)P(B2) = 49 / 80

? ? ? ? ? ? ? ? 上面的都做出來后,你會發現根據貝葉斯定理的公式是不是就可以求出P(B1|A)啦~

? ? ? ? ? ? ? ? 得: ? ? ?P(B1|A) = P(B1)P(A|B1) / P(A) = 40 / 49

思考:

通過這個例子我們可以看到貝葉斯定理的作用,他就是打通了P(A|B1)求得P(B1|A)的道路,也可清晰理解到貝葉斯定理用來可分類!!

?

三、Naive Bayes-樸素貝葉斯

在概率論和統計學中,Bayes’ theorem(貝葉斯法則)根據事件的先驗知識描述事件的概率。貝葉斯法則表達式如下所示

  • P(A|B) – 在事件B下事件A發生的條件概率
  • P(B|A) – 在事件A下事件B發生的條件概率
  • P(A), P(B) – 獨立事件A和獨立事件B的邊緣概率

順便提一下,上式中的分母P(B)可以根據全概率公式分解為:

Bayesian inferenc(貝葉斯推斷)

貝葉斯定理的許多應用之一就是貝葉斯推斷,一種特殊的統計推斷方法,隨著信息增加,貝葉斯定理可以用于更新假設的概率。在決策理論中,貝葉斯推斷與主觀概率密切相關,通常被稱為“Bayesian probability(貝葉斯概率)”。

貝葉斯推斷根據 prior probability(先驗概率) 和統計模型導出的“likelihood function(似然函數)”的結果,再由貝葉斯定理計算 posterior probability(后驗概率):

  • P(H) – 已知的先驗概率
  • P(H|E) – 我們想求的后驗概率,即在B事件發生后對于事件A概率的評估
  • P(E|H) – 在事件H下觀測到E的概率
  • P(E) – marginal likelihood(邊際似然),對于所有的假設都是相同的,因此不參與決定不同假設的相對概率
  • P(E|H)/P(E) – likelihood function(可能性函數),這是一個調整因子,通過不斷的獲取信息,可以使得預估概率更接近真實概率

貝葉斯推斷例子

假設我們有兩個裝滿了餅干的碗,第一個碗里有10個巧克力餅干和30個普通餅干,第二個碗里兩種餅干都有20個。我們隨機挑一個碗,再在碗里隨機挑餅干。那么我們挑到的普通餅干來自一號碗的概率有多少?

我們用 H1 代表一號碗,H2 代表二號碗,而且 P(H1) = P(H2) = 0.5。事件 E 代表普通餅干。由上面可以得到 P(E|H1) = 30 / 40 = 0.75,P(E|H2) = 20 / 40 = 0.5。由貝葉斯定理我們得到

  • P(E|H1)P(H1), P(E|H2)P(H2) – 分別表示拿到來自一號碗的普通餅干、來自二號碗的普通餅干的概率
  • P(E|H1)P(H1) + P(E|H2)P(H2) – 表示拿到普通餅干的概率

在我們拿到餅干前,我們會選到一號碗的概率是先驗概率 P(H1),在拿到了餅干后,我們要得到是后驗概率 P(H1|E)

?

特征條件獨立假設

這一部分開始樸素貝葉斯的理論推導,從中你會深刻地理解什么是特征條件獨立假設。
?

樸素貝葉斯分類的正式定義如下:

1、設為一個待分類項,而每個a為x的一個特征屬性。

2、有類別集合。

3、計算。

4、如果,則。

?

那么現在的關鍵就是如何計算第3步中的各個條件概率。我們可以這么做:

1、找到一個已知分類的待分類項集合,這個集合叫做訓練樣本集。

2、統計得到在各類別下各個特征屬性的條件概率估計。即:

3、如果各個特征屬性是條件獨立的,則根據貝葉斯定理有如下推導:

??????

?因為分母對于所有類別為常數,因為我們只要將分子最大化皆可。又因為各特征屬性是條件獨立的,所以有:

??????

------------------------------------------------------------------------

給定訓練數據集(X,Y),其中每個樣本x都包括n維特征,即x=(x1,x2,x3,...,xn),類標記集合含有k種類別,即y=(y1,y2,...,yk)。

如果現在來了一個新樣本x,我們要怎么判斷它的類別?從概率的角度來看,這個問題就是給定x,它屬于哪個類別的概率最大。那么問題就轉化為求解P(y1|x),P(y2|x),...,P(yk|x)中最大的那個,即求后驗概率最大的輸出:arg max ykP(yk|x)

?

那P(yk|x)怎么求解?答案就是貝葉斯定理:


根據全概率公式,可以進一步地分解上式中的分母:

??? 【公式1】

先不管分母,分子中的P(yk)

是先驗概率,根據訓練集就可以簡單地計算出來。

而條件概率P(x|yk)=P(x1,x2,...,xn|yk)

它的參數規模是指數數量級別的,假設第i維特征xi可取值的個數有Si個,類別取值個數為k個,那么參數個數為:k∏ni=1Si

這顯然不可行。針對這個問題,樸素貝葉斯算法對條件概率分布作出了獨立性的假設,通俗地講就是說假設各個維度的特征x1,x2,...,xn互相獨立,在這個假設的前提上,條件概率可以轉化為:

【公式2】

這樣,參數規模就降到∑ni=1Sik

以上就是針對條件概率所作出的特征條件獨立性假設,至此,先驗概率P(yk)

和條件概率P(x|yk)的求解問題就都解決了,那么我們是不是可以求解我們所要的后驗概率P(yk|x)了?

答案是肯定的。我們繼續上面關于P(yk|x)

的推導,將【公式2】代入【公式1】得到:

于是樸素貝葉斯分類器可表示為:

因為對所有的yk,上式中的分母的值都是一樣的(為什么?注意到全加符號就容易理解了),所以可以忽略分母部分,樸素貝葉斯分類器最終表示為:


四 Naive Bayes Classifiers(樸素貝葉斯分類器)

在機器學習中,樸素貝葉斯分類器是一個基于貝葉斯定理的比較簡單的概率分類器,其中 naive(樸素)是指的對于模型中各個 feature(特征) 有強獨立性的假設,并未將 feature 間的相關性納入考慮中。

樸素貝葉斯分類器一個比較著名的應用是用于對垃圾郵件分類,通常用文字特征來識別垃圾郵件,是文本分類中比較常用的一種方法。樸素貝葉斯分類通過選擇 token(通常是郵件中的單詞)來得到垃圾郵件和非垃圾郵件間的關聯,再通過貝葉斯定理來計算概率從而對郵件進行分類。

由單個單詞分類郵件

假設可疑消息中含有“sex”這個單詞,平時大部分收到郵件的人都會知道,這封郵件可能是垃圾郵件。然而分類器并不知道這些,它只能計算出相應的概率。假設在用戶收到的郵件中,“sex”出現在在垃圾郵件中的頻率是5%,在正常郵件中出現的概率是0.5%。

我們用 S 表示垃圾郵件(spam),H 表示正常郵件(healthy)。兩者的先驗概率都是50%,即:

P(S)=P(H)=50%

我們用 W 表示這個詞,那么問題就變成了計算 P(S|W) 的值,根據貝葉斯定理我們可以得到:

P(W|S)和P(W|H)的含義是,這個詞語在垃圾郵件和正常郵件中,分別出現的概率。通過計算可以得到 P(S|W) = 99.0%,說明“sex”的判斷能力很強,將50%的先驗概率提高到了99%的后驗概率。

結合獨立概率

大多數貝葉斯垃圾郵件分類器基于這樣的假設:郵件中的單詞是獨立的事件,實際上這種條件一般不被滿足,這也是為什么被稱作樸素貝葉斯。這是對于應用情景的理想化,在此基礎上,我們可以通過貝葉斯定理得到以下公式:

  • p 是可疑郵件是垃圾郵件的概率
  • pN 當郵件中包含第 Nth 個單詞時郵件是垃圾郵件的概率 p(S|WN)

對于輸出的概率,我們將它和一個 threshold(閾值)相比較,小于閾值的是正常郵件,否則認為它是垃圾郵件。

?

五 scikit-learn 樸素貝葉斯類庫概述

  樸素貝葉斯是一類比較簡單的算法,scikit-learn中樸素貝葉斯類庫的使用也比較簡單。相對于決策樹,KNN之類的算法,樸素貝葉斯需要關注的參數是比較少的,這樣也比較容易掌握。在scikit-learn中,一共有3個樸素貝葉斯的分類算法類。分別是GaussianNB,MultinomialNB和BernoulliNB。其中GaussianNB就是先驗為高斯分布的樸素貝葉斯,MultinomialNB就是先驗為多項式分布的樸素貝葉斯,而BernoulliNB就是先驗為伯努利分布的樸素貝葉斯。

這三個類適用的分類場景各不相同:

  • 高斯樸素貝葉斯:sklearn.naive_bayes.GaussianNB(priors=None) 用于樣本特征的分布大部分是連續值
  • 多項式樸素貝葉斯:sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)主要用于離散特征分類,例如文本分類單詞統計,以出現的次數作為特征值
  • 伯努利樸素貝葉斯:sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True,class_prior=None)類似于多項式樸素貝葉斯,也主要用戶離散特征分類,和MultinomialNB的區別是:MultinomialNB以出現的次數為特征值,BernoulliNB為二進制或布爾型特性

1.?GaussianNB類使用總結

    GaussianNB假設特征的先驗概率為正態分布,即如下式:

?

????? 其中Ck為Y的第k類類別。μk和σ2k 為需要從訓練集估計的值

  GaussianNB會根據訓練集求出μk和σ2k。 μk為在樣本類別Ck中,所有Xj的平均值。σ2k為在樣本類別Ck中,所有Xj的方差。

  GaussianNB類的主要參數僅有一個,即先驗概率priors?,對應Y的各個類別的先驗概率P(Y=Ck)。這個值默認不給出,如果不給出此時P(Y=Ck)=mk/m。其中m為訓練集樣本總數量,mk為輸出為第k類別的訓練集樣本數。如果給出的話就以priors 為準。

  高斯模型假設每一維特征都服從高斯分布(正態分布):

μyk,i表示類別為yk的樣本中,第i維特征的均值。
σ2yk,i表示類別為yk的樣本中,第i維特征的方差。

??? 在使用GaussianNB的fit方法擬合數據后,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。 predict方法就是我們最常用的預測方法,直接給出測試集的預測類別輸出。predict_proba則不同,它會給出測試集樣本在各個類別上預測的概率。容易理解,predict_proba預測出的各個類別概率里的最大值對應的類別,也就是predict方法得到類別。predict_log_proba和predict_proba類似,它會給出測試集樣本在各個類別上預測的概率的一個對數轉化。轉化后predict_log_proba預測出的各個類別對數概率里的最大值對應的類別,也就是predict方法得到類別。

???? 當特征是連續變量的時候,運用多項式模型就會導致很多P(xi|yk)=0(不做平滑的情況下),此時即使做平滑,所得到的條件概率也難以描述真實情況。所以處理連續的特征變量,應該采用高斯模型。

????

下面是一組人類身體特征的統計資料。

性別身高(英尺)體重(磅)腳掌(英寸)
618012
5.9219011
5.5817012
5.9216510
51006
5.51508
5.421307
5.751509

已知某人身高6英尺、體重130磅,腳掌8英寸,請問該人是男是女?
根據樸素貝葉斯分類器,計算下面這個式子的值。

P(身高|性別) x P(體重|性別) x P(腳掌|性別) x P(性別)

????? 困難在于,由于身高、體重、腳掌都是連續變量,不能采用離散變量的方法計算概率。而且由于樣本太少,所以也無法分成區間計算。怎么辦?
????? 這時,可以假設男性和女性的身高、體重、腳掌都是正態分布,通過樣本計算出均值和方差,也就是得到正態分布的密度函數。有了密度函數,就可以把值代入,算出某一點的密度函數的值。

????? 比如,男性的身高是均值5.855、方差0.035的正態分布。所以,男性的身高為6英尺的概率的相對值等于1.5789(大于1并沒有關系,因為這里是密度函數的值,只用來反映各個值的相對可能性)

?

對于腳掌和體重同樣可以計算其均值與方差。有了這些數據以后,就可以計算性別的分類了。

P(身高=6|男) x P(體重=130|男) x P(腳掌=8|男) x P(男) = 6.1984 x e-9P(身高=6|女) x P(體重=130|女) x P(腳掌=8|女) x P(女) = 5.3778 x e-4

可以看到,女性的概率比男性要高出將近10000倍,所以判斷該人為女性。

2.?MultinomialNB類使用總結

    MultinomialNB假設特征的先驗概率為多項式分布,即如下式:

   

  ? 其中,P(Xj=xjl|Y=Ck)是第k個類別的第j維特征的第l個個取值條件概率。mk是訓練集中輸出為第k類的樣本個數。λ

為一個大于0的常數,常常取為1,即拉普拉斯平滑。也可以取其他值。

 ?? MultinomialNB參數比GaussianNB多,但是一共也只有僅僅3個。其中,參數alpha即為上面的常數λ,如果你沒有特別的需要,用默認的1即可。如果發現擬合的不好,需要調優時,可以選擇稍大于1或者稍小于1的數。布爾參數fit_prior表示是否要考慮先驗概率,如果是false,則所有的樣本類別輸出都有相同的類別先驗概率。否則可以自己用第三個參數class_prior輸入先驗概率,或者不輸入第三個參數class_prior讓MultinomialNB自己從訓練集樣本來計算先驗概率,此時的先驗概率為P(Y=Ck)=mk/m。其中m為訓練集樣本總數量,mk為輸出為第k類別的訓練集樣本數。

  在使用MultinomialNB的fit方法或者partial_fit方法擬合數據后,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。由于方法和GaussianNB完全一樣,這里就不累述了。

多項式模型在計算先驗概率P(yk)和條件概率P(xi|yk)時,會做一些平滑處理,具體公式為:

N是總的樣本個數,k是總的類別個數,Nyk是類別為yk的樣本個數,α是平滑值。

Nyk是類別為yk的樣本個數,n是特征的維數,Nyk,xi是類別為yk的樣本中,第i維特征的值是xi的樣本個數,α是平滑值。

當α=1時,稱作Laplace平滑,當0<α<1時,稱作Lidstone平滑,α=0時不做平滑。

如果不做平滑,當某一維特征的值xi

沒在訓練樣本中出現過時,會導致P(xi|yk)=0,從而導致后驗概率為0。加上平滑就可以克服這個問題。

?

2.1 舉例

有如下訓練數據,15個樣本,2維特征X1,X2

,2種類別-1,1。給定測試樣本x=(2,S)T

,判斷其類別。

解答如下:

運用多項式模型,令α=1

  • 計算先驗概率

  • 計算各種條件概率

  • 對于給定的x=(2,S)T計算:

由此可以判定y=-1。

3.?BernoulliNB類使用總結

BernoulliNB假設特征的先驗概率為二元伯努利分布,即如下式:

此時l只有兩種取值。xjl只能取值0或者1。

 ?? BernoulliNB一共有4個參數,其中3個參數的名字和意義和MultinomialNB完全相同。唯一增加的一個參數是binarize。這個參數主要是用來幫BernoulliNB處理二項分布的,可以是數值或者不輸入。如果不輸入,則BernoulliNB認為每個數據特征都已經是二元的。否則的話,小于binarize的會歸為一類,大于binarize的會歸為另外一類。

 在使用BernoulliNB的fit或者partial_fit方法擬合數據后,我們可以進行預測。此時預測有三種方法,包括predict,predict_log_proba和predict_proba。由于方法和GaussianNB完全一樣,這里就不累述了。

?????? 與多項式模型一樣,伯努利模型適用于離散特征的情況,所不同的是,伯努利模型中每個特征的取值只能是1和0(以文本分類為例,某個單詞在文檔中出現過,則其特征值為1,否則為0).

伯努利模型中,條件概率P(xi|yk)的計算方式是:

當特征值xi為1時,P(xi|yk)=P(xi=1|yk);

當特征值xi為0時,P(xi|yk)=1?P(xi=1|yk);

?????? 伯努利模型和多項式模型是一致的,BernoulliNB需要比MultinomialNB多定義一個二值化的方法,該方法會接受一個閾值并將輸入的特征二值化(1,0)。當然也可以直接采用MultinomialNB,但需要預先將輸入的特征二值化。

六、樸素貝葉斯的優缺點

樸素貝葉斯的主要優點有:

  •  樸素貝葉斯模型發源于古典數學理論,有穩定的分類效率。
  •  對小規模的數據表現很好,能個處理多分類任務,適合增量式訓練,尤其是數據量超出內存時,我們可以一批批的去增量訓練。
  •  對缺失數據不太敏感,算法也比較簡單,常用于文本分類。
  • ?? 不存在過擬合的說法。
  • 樸素貝葉斯的主要缺點有:   

  •  理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上并非總是如此,這是因為樸素貝葉斯模型給定輸出類別的情況下,假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。而在屬性相關性較小時,樸素貝葉斯性能最為良好。對于這一點,有半樸素貝葉斯之類的算法通過考慮部分關聯性適度改進。
  •  需要知道先驗概率,且先驗概率很多時候取決于假設,假設的模型可以有很多種,因此在某些時候會由于假設的先驗模型的原因導致預測效果不佳。
  • ?? 由于我們是通過先驗和數據來決定后驗的概率從而決定分類,所以分類決策存在一定的錯誤率。
  •  對輸入數據的表達形式很敏感。
  • 參考:

    • 《統計學習方法》,李航
    • 《機器學習》,Tom M.Mitchell
    • 維基百科Sex classification
    • 樸素貝葉斯的三個常用模型:高斯、多項式、伯努利
    • 樸素貝葉斯分類器的應用
    • 數學之美番外篇:平凡而又神奇的貝葉斯方法
    • 樸素貝葉斯理論推導與三種常見模型

    • https://blog.csdn.net/weixin_42180810/article/details/81278326

    總結

    以上是生活随笔為你收集整理的[机器学习] 分类 --- Naive Bayes(朴素贝叶斯)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。