一、背景
看見這種以人名命名的理論我都會查一下這個人到底是誰,這是百度百科里貝葉斯的頭像:
這一身神甫打扮不禁讓我想起了豌豆狂魔孟德爾五慈,于是我又在網(wǎng)上搜索一下“貝葉斯生平”导而,發(fā)現(xiàn)了一篇奇文《貝葉斯身世之謎》,長篇大論地研究了一下貝葉斯到底是哪一年出生的洽沟,末尾還對貝葉斯的頭像真實性提出了質(zhì)疑。這還是發(fā)在《統(tǒng)計研究》(中文核心期刊)的正經(jīng)的期刊文獻。
我只想問一句哄孤,讀研期間發(fā)了這樣的論文給畢業(yè)嗎?吹截?瘦陈?
二、思路
貝葉斯公式
我在百度百科發(fā)現(xiàn)這么一張配圖:
我們就按照這張圖來講吧波俄,事件A發(fā)生的概率為P(A)晨逝;事件B發(fā)生的概率為P(B);在事件A發(fā)生的條件下事件B發(fā)生的概率為P(B|A)懦铺;在事件B發(fā)生的條件下事件A發(fā)生的概率為P(A|B)捉貌;事件A,B同時發(fā)生的概率為P(A∩B)。
可以得到P(A∩B)=P(A)×P(B|A)
趁窃,同樣的P(A∩B)=P(B)×P(A|B)
那么有P(A)×P(B|A)=P(B)×P(A|B)
轉化一下變成P(B|A)=P(A|B)×P(B)/P(A)
牧挣,這就是我們后面需要用到的公式。
樸素貝葉斯分類器
假設一個樣本醒陆,每個個體有四個特征參數(shù)瀑构,分別為F1,F(xiàn)2统求,F(xiàn)3检碗,F(xiàn)4,有兩個類別码邻,分別為C0折剃,C1。
那么對于某個特定的樣本像屋,其屬于C0類的概率為:P(C0|F1F2F3F4)=P(F1F2F3F4|C0)×P(C0)/P(F1F2F3F4)
屬于C1的概率為:P(C1|F1F2F3F4)=P(F1F2F3F4|C1)×P(C1)/P(F1F2F3F4)
樸素貝葉斯之所以有樸素兩個字怕犁,就是因為它把問題簡化了,假設所有特征參數(shù)均相互獨立己莺,這樣就有:
P(F1F2F3F4|C0)=P(F1|C0)×P(F2|C0)×P(F3|C0)×P(F4|C0)
我們把這個式子帶回去奏甫,樸素貝葉斯分類就變成了比較P(F1|C0)×P(F2|C0)×P(F3|C0)×P(F4|C0)×P(C0)
以及P(F1|C1)×P(F2|C1)×P(F3|C1)×P(F4|C1)×P(C1)
兩個量那個大的問題。
三凌受、代碼
這次的實例與上一篇k近鄰算法相同阵子,我們直接使用上次經(jīng)過歸一化處理之后的數(shù)據(jù)。
BallMillAbility OreGrade RateofMagnet TailGrade ConcentrateGrade
0 0.508755 0.526555 0.418244 0.325203 0.0
1 0.436707 0.481032 0.567986 0.443089 1.0
2 0.529417 0.412747 0.459552 0.483740 1.0
3 0.000000 0.613050 0.656627 0.609756 1.0
4 0.704730 0.464340 0.786575 0.723577 1.0
5 0.569675 0.429439 0.464716 0.686992 0.0
6 0.545946 0.347496 0.431153 0.752033 1.0
7 0.305294 0.391502 0.555077 0.609756 0.0
8 0.594509 0.335357 0.444062 0.776423 1.0
9 0.506505 0.074355 0.302926 0.691057 1.0
.. ... ... ... ... ...
處理數(shù)據(jù)
由于我們的數(shù)據(jù)是連續(xù)性數(shù)據(jù)胜蛉,所以要先對數(shù)據(jù)進行區(qū)間分級:
for i in range(149):
df['BallMillAbility'][i] = int(df['BallMillAbility'][i]/0.1)
df['OreGrade'][i] = int(df['OreGrade'][i]/0.1)
df['RateofMagnet'][i] = int(df['RateofMagnet'][i]/0.1)
df['TailGrade'][i] = int(df['TailGrade'][i]/0.1)
得到:
BallMillAbility OreGrade RateofMagnet TailGrade ConcentrateGrade
0 5.0 5.0 4.0 3.0 0.0
1 4.0 4.0 5.0 4.0 1.0
2 5.0 4.0 4.0 4.0 1.0
3 0.0 6.0 6.0 6.0 1.0
4 7.0 4.0 7.0 7.0 1.0
5 5.0 4.0 4.0 6.0 0.0
6 5.0 3.0 4.0 7.0 1.0
7 3.0 3.0 5.0 6.0 0.0
8 5.0 3.0 4.0 7.0 1.0
9 5.0 0.0 3.0 6.0 1.0
.. ... ... ... ... ...
我們假設一個樣本歸一化處理之后是這樣的:
(這里之所以不使用上一篇文章中的那個樣本是因為挠进,那個樣本最后預測出來的結果合格概率為0,太過絕對誊册,所以我換了一個測試樣本领突,應該是因為樣本數(shù)量不夠大才出現(xiàn)這種情況)
BallMillAbility OreGrade RateofMagnet TailGrade ConcentrateGrade
6.0 2.0 1.0 7.0 --
兩個變量的比較
指標合格的可能性:
P(F1|C=1)×P(F2|C=1)×P(F3|C=1)×P(F4|C=1)×P(C=1)
不合格的可能性:
P(F1|C=0)×P(F2|C=0)×P(F3|C=0)×P(F4|C=0)×P(C=0)
統(tǒng)計方法很簡單:
m = 0
for i in range(149):
if df['BallMillAbility'][i] == 6 and df['ConcentrateGrade'][i] == 1:
m+=1
print(m/149)
合格:0.0738×0.0469×0.0067×0.0402×0.3356=0.0000003128
不合格:0.1812×0.0604×0.0201×0.0738×0.6644=0.00001078
不合格的概率是合格的概率的34.46倍,基本可以確定這個樣本為不合格樣本案怯。
四君旦、總結
- 這次講的跟上次一樣,是一個沒有不包含模型訓練這一環(huán)節(jié)的簡單預測模型嘲碱,可以看到我們預測的結果比k近鄰算法得到的結果傾向性更強一些金砍。
- 使用這個方法最好數(shù)據(jù)量大一些,否則會出現(xiàn)某一項概率為零的情況麦锯,這樣就不好估計了捞魁。