樸素貝葉斯(Naive Bayes)模型

貝葉斯原理

貝葉斯為了解決一個叫“逆向概率”問題寫了一篇文章逃贝,嘗試解答在沒有太多可靠證據(jù)的情況下,怎樣做出更符合數(shù)學邏輯的推測

“逆向概率”是相對“正向概率”而言

正向概率抚芦,比較容易理解荞膘,比如我們已經(jīng)知道袋子里面有N 個球,不是黑球就是白球壤靶,其中M個是黑球,那么把手伸進去摸一個球惊搏,就能知道摸出黑球的概率是多少 => 這種情況往往是上帝視角贮乳,即了解了事情的全貌再做判斷

逆向概率,貝葉斯則從實際場景出發(fā)恬惯,提了一個問題:如果我們事先不知道袋子里面黑球和白球的比例向拆,而是通過我們摸出來的球的顏色,能判斷出袋子里面黑白球的比例么酪耳?

貝葉斯原理:

影響了接下來近200年的統(tǒng)計學理論

建立在主觀判斷的基礎(chǔ)上:在我們不了解所有客觀事實的情況下浓恳,同樣可以先估計一個值

先驗概率,通過經(jīng)驗來判斷事情發(fā)生的概率

后驗概率碗暗,就是發(fā)生結(jié)果之后颈将,推測原因的概率

條件概率,事件A 在另外一個事件B已經(jīng)發(fā)生條件下的發(fā)生概率言疗,表示為P(A|B)

似然函數(shù)晴圾,把概率模型的訓練過程理解為求參數(shù)估計的過程

比如,一個硬幣在10次拋落中正面均朝上 => 那么這個硬幣是均勻的可能性是多少噪奄?這里硬幣均勻就是個參數(shù)死姚,似然函數(shù)就是用來衡量這個模型的參數(shù)

經(jīng)過推導,貝葉斯推理告訴我們后驗概率是與先驗概率和似然函數(shù)成正比得勤篮,即

Thinking:假設(shè)有一種病叫做“貝葉死”都毒,它的發(fā)病率是萬分之一,即10000 人中會有1個人得病⌒鸾鳎現(xiàn)有一種測試可以檢驗一個人是否得病的準確率是99.9%温鸽,誤報率(假陽)是0.1%

那么,如果一個人被查出來患有“葉貝死”,實際上患有的可能性有多大涤垫?

查出患有“貝葉死”的準確率是99.9%姑尺,是不是實際上患“貝葉死”的概率也是99.9%?)

在10000個人中蝠猬,還存在0.1%的誤查的情況切蟋,也就是10個人沒有患病但是被診斷成陽性。當然10000個人中榆芦,也確實存在一個患有貝葉死的人柄粹,他有99.9%的概率被檢查出來

可以粗算下,患病的這個人實際上是這11個人里面的一員匆绣,即實際患病比例是1/11≈9%

貝葉斯原理就是求解后驗概率驻右,假設(shè):A 表示事件 “測出為陽性”, B1 表示“患有貝葉死”, B2 表示“沒有患貝葉死”

患有貝葉死的情況下,測出為陽性的概率為P(A|B1)=99.9%

沒有患貝葉死崎淳,但測出為陽性的概率為P(A|B2)=0.1%

患有貝葉死的概率為?P(B1)=0.01%

沒有患貝葉死的概率P(B2)=99.99%

那么我們檢測出來為陽性堪夭,而且是貝葉死的概率P(B1,A)=P(B1)*P(A|B1)=0.01%*99.9%=0.00999% ≈0.01%

P(B1,A)代表的是聯(lián)合概率拣凹,同樣我們可以求得P(B2,A)=P(B2)*P(A|B2)=99.99%*0.1%=0.09999% ≈0.1%

檢查為陽性的情況下森爽,患有貝葉死的概率,即P(B1|A)

檢查出是陽性的條件下嚣镜,但沒有患有貝葉死的概率為

0.01%+0.1%均出現(xiàn)在了P(B1|A)和P(B2|A)的計算中作為分母爬迟,稱之為論據(jù)因子,也相當于一個權(quán)值因子

我們可以總結(jié)出貝葉斯公式

從而我們可以得到通用的貝葉斯公式

樸素貝葉斯:

一種簡單但極為強大的預測建模算法

假設(shè)每個輸入變量是獨立的菊匿。這是一個強硬的假設(shè)付呕,實際情況并不一定,但是這項技術(shù)對于絕大部分的復雜問題仍然非常有效

樸素貝葉斯模型由兩種類型的概率組成:

每個類別的概率P(Cj)

每個屬性的條件概率P(Ai|Cj)

什么是類別概率:

假設(shè)我有7個棋子捧请,其中3個是白色的凡涩,4個是黑色的

那么棋子是白色的概率就是3/7棒搜,黑色的概率就是4/7 => 這個是類別概率

什么是條件概率:

假設(shè)我把這7個棋子放到了兩個盒子里疹蛉,其中盒子A里面有2個白棋,2個黑棋力麸;盒子B里面有1個白棋可款,2個黑棋

那么在盒子A中抓到白棋的概率就是1/2,抓到黑棋的概率也是1/2克蚂,這個就是條件概率闺鲸,也就是在某個條件(比如在盒子A中)下的概率

訓練樸素貝葉斯模型的過程:

在樸素貝葉斯中,我們要統(tǒng)計的是屬性的條件概率埃叭,也就是假設(shè)取出來的是白色的棋子摸恍,那么它屬于盒子A的概率是2/3

Step1:先給出訓練數(shù)據(jù),以及這些數(shù)據(jù)對應的分類

Step2,計算類別概率和條件概率

Step3立镶,使用概率模型(基于貝葉斯原理)對新數(shù)據(jù)進行預測

樸素貝葉斯分類(離散值):

如何根據(jù)身高壁袄,體重,鞋碼媚媒,判斷是否為男女嗜逻,比如一個新的數(shù)據(jù):身高“高”、體重“中”缭召,鞋碼“中” => 男 or 女栈顷?

求在A1、A2嵌巷、A3屬性下萄凤,Cj的概率

因為一共有2個類別,所以我們只需要求得P(C1|A1A2A3)和P(C2|A1A2A3)的概率即可搪哪,然后比較下哪個分類的可能性大蛙卤,就是哪個分類結(jié)果

分別求下這些條件下的概率:

P(A1|C1)=1/2, P(A2|C1)=1/2, P(A3|C1)=1/4

P(A1|C2)=0, P(A2|C2)=1/2, P(A3|C2)=1/2

所以P(A1A2A3|C1)=1/16, P(A1A2A3|C2)=0

因為P(A1A2A3|C1)P(C1)>P(A1A2A3|C2)P(C2),所以應該是C1類別噩死,即男性

樸素貝葉斯分類(連續(xù)值):


身高180颤难、體重120,鞋碼41已维,請問該人是男是女呢

可以假設(shè)男性和女性的身高行嗤、體重、鞋碼都是正態(tài)分布垛耳,通過樣本計算出均值和方差栅屏,也就是得到正態(tài)分布的密度函數(shù)。有了密度函數(shù)堂鲜,就可以把值代入栈雳,算出某一點的值

平均值 公式
方差公式
標準差公式

比如,男性的身高是均值179.5缔莲、標準差為3.697的正態(tài)分布哥纫。所以男性的身高為180的概率為0.1069

同理可以計算得出男性體重為120的概率為0.000382324,男性鞋碼為41號的概率為0.120304111

P(A1A2A3|C1)=P(A1|C1)P(A2|C1)P(A3|C1)=0.1069*0.000382324*0.120304111=4.9169e-6

P(A1A2A3|C2)=P(A1|C2)P(A2|C2)P(A3|C2)=0.00000147489*0.015354144*0.120306074=2.7244e-9

很明顯這組數(shù)據(jù)分類為男的概率大于分類為女的概率

求標準差和方差的方法

Excel中的NORMDIST函數(shù):

NORMDIST(x,mean,standard_dev,cumulative)

x:正態(tài)分布中痴奏,需要計算的數(shù)值蛀骇;

Mean:正態(tài)分布的平均值;

Standard_dev:正態(tài)分布的標準差读拆;

Cumulative:取值為邏輯值擅憔,即False或True,決定了函數(shù)的形式當為True時檐晕,函數(shù)結(jié)果為累積分布

當為False時暑诸,函數(shù)結(jié)果為概率密度

NORMDIST(180,179.5,3.697,0)=0.1069

Python中的概率密度:

stats.norm.pdf(x, mu, sigma)

返回參數(shù)為 \mu 和? \sigma ? 的正態(tài)分布密度函數(shù)在x處的值

from scipy import stats

mu = 179.5

sigma = 3.697

x = 180

prob = stats.norm.pdf(x, mu, sigma)

print(prob)

樸素貝葉斯分類:

常用于文本分類,文本過濾、情感預測个榕、推薦系統(tǒng)等啦逆,尤其是對于英文等語言來說,分類效果很好

準備階段笛洛,需要確定特征屬性夏志,屬性值以及l(fā)abel => 訓練集

訓練階段,輸入是特征屬性和訓練樣本苛让,輸出是分類器沟蔑,主要工作是計算每個類別在訓練樣本中的出現(xiàn)頻率及每個特征屬性劃分對每個類別的條件概率

應用階段,使用分類器對新數(shù)據(jù)進行分類

三種分布方式

sklearn工具使用:


from sklearn.naive_bayes import GaussianNB

高斯樸素貝葉斯:特征變量是連續(xù)變量狱杰,符合高斯分布(正太分布)瘦材,比如說人的身高,物體的長度

GaussianNB(priors=None) #模型創(chuàng)建

priors仿畸,先驗概率大小食棕,如果沒有給定,模型則根據(jù)樣本數(shù)據(jù)自己計算(利用極大似然法)

查看模型對象的屬性:

class_prior_:每個樣本的概率

class_count_:每個類別的樣本數(shù)量

theta_:每個類別中每個特征的均值

sigma_:每個類別中每個特征的方差


from sklearn.naive_bayes import MultinomialNB

多項式樸素貝葉斯:特征變量是離散變量错沽,符合多項分布簿晓,在文檔分類中特征變量體現(xiàn)在一個單詞出現(xiàn)的次數(shù),或者是單詞的TF-IDF值等

MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)

alpha:先驗平滑因子憔儿,默認等于1谒臼,當?shù)扔?時表示拉普拉斯平滑

fit_prior:是否去學習類的先驗概率蜈缤,默認是True

class_prior:各個類別的先驗概率底哥,如果沒有指定奶陈,則模型會根據(jù)數(shù)據(jù)自動學習吃粒, 每個類別的先驗概率相同,即類別數(shù)N分之一

模型對象的屬性:

class_count_: 訓練樣本中各類別對應的樣本數(shù)

feature_count_: 每個類別中各個特征出現(xiàn)的次數(shù)


from sklearn.naive_bayes import BernoulliNB

伯努利樸素貝葉斯:特征變量是布爾變量,符合0/1分布,在文檔分類中特征是單詞是否出現(xiàn)

BernoulliNB(alpha=1.0, fit_prior=True, class_prior=None)

alpha:平滑因子冀自,與多項式中的alpha一致

fit_prior:是否去學習類的先驗概率,默認是True

class_prior:各個類別的先驗概率,如果沒有指定含末,則模型會根據(jù)數(shù)據(jù)自動學習, 每個類別的先驗概率相同,即類別數(shù)N分之一

模型對象的屬性:

class_count_: 訓練樣本中各類別對應的樣本數(shù)

feature_count_: 每個類別中各個特征出現(xiàn)的次數(shù)

代碼

# MNIST手寫數(shù)字分類(多種分類方法)


# 分割數(shù)據(jù)务豺,將25%的數(shù)據(jù)作為測試集,其余作為訓練集

train_x, test_x, train_y, test_y = train_test_split(data, digits.target, test_size=0.25, random_state=33)


# 創(chuàng)建LR分類器

model = LogisticRegression()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('LR準確率: %0.4lf' % accuracy_score(predict_y, test_y))


# 創(chuàng)建GaussianNB分類器

model = GaussianNB()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('GaussianNB準確率: %0.4lf' % accuracy_score(predict_y, test_y))


# 創(chuàng)建MultinomialNB分類器

model = MultinomialNB()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('MultinomialNB準確率: %0.4lf' % accuracy_score(predict_y, test_y))


# 創(chuàng)建BernoulliNB分類器

model = BernoulliNB()

model.fit(train_x, train_y)

predict_y=model.predict(test_x)

print('BernoulliNB準確率: %0.4lf' % accuracy_score(predict_y, test_y))

根據(jù)訓練的結(jié)果選擇最接近的方案

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末汹桦,一起剝皮案震驚了整個濱河市舞骆,隨后出現(xiàn)的幾起案子脆霎,更是在濱河造成了極大的恐慌睛蛛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔑滓,死亡現(xiàn)場離奇詭異键袱,居然都是意外死亡褐健,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谎替,“玉大人挫掏,你說我怎么就攤上這事喷舀】潮簦” “怎么了淋肾?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵硫麻,是天一觀的道長爸邢。 經(jīng)常有香客問我,道長拿愧,這世上最難降的妖魔是什么杠河? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮浇辜,結(jié)果婚禮上券敌,老公的妹妹穿的比我還像新娘。我一直安慰自己柳洋,他們只是感情好待诅,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熊镣,像睡著了一般卑雁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绪囱,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天测蹲,我揣著相機與錄音,去河邊找鬼鬼吵。 笑死扣甲,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的齿椅。 我是一名探鬼主播琉挖,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼涣脚!你這毒婦竟也來了粹排?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涩澡,失蹤者是張志新(化名)和其女友劉穎顽耳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妙同,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡射富,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了粥帚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰耗。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芒涡,靈堂內(nèi)的尸體忽然破棺而出柴灯,到底是詐尸還是另有隱情卖漫,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布赠群,位于F島的核電站羊始,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏查描。R本人自食惡果不足惜突委,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望冬三。 院中可真熱鬧匀油,春花似錦、人聲如沸勾笆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窝爪。三九已至弛车,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間酸舍,已是汗流浹背帅韧。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留啃勉,地道東北人忽舟。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像淮阐,于是被迫代替她去往敵國和親叮阅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355