嫁不嫁问题让你通俗易懂的了解朴素贝叶斯分类
概述
貝葉斯分類算法是統(tǒng)計學(xué)的一種概率分類方法,樸素貝葉斯分類是貝葉斯分類中最簡單的一種。其分類原理就是利 用貝葉斯公式根據(jù)某特征的先驗概率計算出其后驗概率,然后選擇具有最大后驗概率的類作為該特征所屬的類。之 所以稱之為”樸素”,是因為貝葉斯分類只做最原始、最簡單的假設(shè):所有的特征之間是統(tǒng)計獨立的。
1.條件概率公式
條件概率(Condittional probability),就是指在事件B發(fā)生的情況下,事件A發(fā)生的概率,用P(A|B)來表示。
根據(jù)文氏圖可知:在事件B發(fā)生的情況下,事件A發(fā)生的概率就是P(A∩B)除以P(B)。
同理可得:
所以
全概率公式:如果事件 構(gòu)成一個完備事件且都有正概率,那么對于任意一個事件B則 有:
2.貝葉斯推斷
根據(jù)條件概率和全概率公式,可以得到貝葉斯公式如下 :
P(A)稱為"先驗概率”(Prior probability),即在B事件發(fā)生之前,我們對A事件概率的一個判斷。
P(A| B)稱為"后驗概率" (Posterior probability),即在B事件發(fā)生之后,我們對A事件概率的重新評估。
P(B |A)/P(B)稱為"可能性函數(shù)”(Likely hood), 這是一個調(diào)整因子,使得預(yù)估概率更接近真實概率。
所以條件概率可以理解為:后驗概率=先驗概率*調(diào)整因子
如果”可能性函數(shù)">1,意味著"先驗概率"被增強,事件A的發(fā)生的可能性變大;
如果"可能性函數(shù)"=1,意味著B事件無助于判斷事件A的可能性;
如果”可能性函數(shù)"<1,意味著"先驗概率"被削弱,事件A的可能性變小。
3.案例分析(帥,高,上進,性格好,嫁不嫁問題?。。。)
假如:不帥,性格不好,個子矮,不上進的男生,女生選擇嫁的概率是多少?
即求出:
P(嫁|不帥, 性格不好,不高,不上進)
根據(jù)貝葉斯定理,拆成了三個概率的問題
1.P1=P(不帥,性格不好,不高,不上進|嫁)=P(嫁)*P(不帥|嫁)*P(性格不好|嫁)*P(不高|
嫁)*P(不上進|嫁)
2.P(嫁)
3.P2=P (不帥,性格不好,不高,不上進) =P(不帥)*P(性格不好)*P(矮)*P(不上進)
結(jié)果: P(嫁|不帥, 性格不好,不高,不上進)=P1*P(嫁)/P2
5.案例代碼實現(xiàn)
生成樣本(兩個方法:隨機生成,靜態(tài)手動插入,選其一即可)
1 # 方法1,隨機生成樣本 2 import random 3 def create_Data1(): 4 looks=['帥','不帥'] 5 characters=['好','不好'] #性格 6 heights=['高','矮'] 7 progress=['上進','不上進'] 8 marriages=['嫁','不嫁'] 9 datasets=[] 10 for i in range(0,20): 11 dataset = []#創(chuàng)建樣本 12 dataset.append(random.choice(looks)) #每個樣本隨機選擇長相 13 dataset.append(random.choice(characters))#每個樣本隨機選擇性格 14 dataset.append(random.choice(heights)) #每個樣本隨機選擇高矮 15 dataset.append(random.choice(progress))#每個樣本隨機選擇上不上進 16 dataset.append(random.choice(marriages))#每個樣本隨機選擇嫁不嫁 17 print(dataset) 18 datasets.append(dataset)#將每一組樣本加入到樣本集中 19 print(datasets) 20 return datasets
1 # 方法2 指定數(shù)據(jù)樣本 2 import random 3 def create_Data(): 4 datasets=[ 5 ['帥','不好','矮','不上進','不嫁'], 6 ['不帥','好','矮','上進','不嫁'], 7 ['帥','好','矮','上進','嫁'], 8 ['不帥','好','高','上進','嫁'], 9 ['帥','不好','矮','上進','不嫁'], 10 ['不帥','不好','矮','不上進','不嫁'], 11 ['帥','好','高','不上進','嫁'], 12 ['不帥','好','高','上進','嫁'], 13 ['帥','好','高','上進','嫁'], 14 ['不帥','不好','高','上進','嫁'], 15 ['帥','好','矮','不上進','不嫁'], 16 ['帥','好','矮','不上進','不嫁'] 17 ] 18 return datasets
1 # 計算函數(shù)
2 def compute_threeProb(datasets,c1,c2,c3,c4,c5):# 傳入訓(xùn)練數(shù)據(jù)集,需要判斷的數(shù)據(jù)(帥不帥,性格好不好,高還是矮,上不上進,嫁不嫁)
3 C5_count=0 #滿足c5條件的數(shù)據(jù)條數(shù)
4 Result_count=0 #滿足c5條件下且滿足需要判斷的四個特征的個數(shù)
5 p3_count=0 #計算樣本中符合要判斷的四個特征的個數(shù)
6 Allcount=len(datasets) #數(shù)據(jù)樣本條數(shù)
7 for dataset in datasets:
8 #滿足c5條件的數(shù)據(jù)條數(shù)
9 if dataset[4]==c5:
10 C5_count+=1
11 #該類別下滿足需要判斷的四個特征的個數(shù)
12 if dataset[0]==c1 and dataset[1]== c2 and dataset[2]==c3 and dataset[3]==c4:
13 Result_count+=1
14 #計算樣本中符合要判斷的四個特征的個數(shù)
15 if dataset[0] == c1 and dataset[1] == c2 and dataset[2] == c3 and dataset[3] == c4:
16 p3_count+=1
17
18 p1=(C5_count/Allcount)*(Result_count/C5_count) #類似 P(不帥,性格不好,不高,不上進|嫁)
19 p2=C5_count/Allcount #類似 P(嫁)
20 p3=p3_count/Allcount #類似 P(不帥,性格不好,不高,不上進)
21 if p3!=0:
22 prob_marriage=p1*p2/p3
23 print(prob_marriage)
24 return prob_marriage
25 else:
26 print("不存在!")
27 return 0
1 # 調(diào)用
2 datasets=create_Data()
3 rel=compute_threeProb(datasets,c1='帥',c2='好',c3='矮',c4='上進',c5='嫁')
4 print(f'此情況嫁的概率為:{rel}')
運行結(jié)果:
6.優(yōu)缺點:
優(yōu)點:
(1) 算法邏輯簡單,易于實現(xiàn)(算法思路很簡單,只要使用貝葉斯公式轉(zhuǎn)化即可!)
(2)分類過程中時空開銷小(假設(shè)特征相互獨立,只會涉及到二維存儲)
缺點:
(1)理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率,但是實際上并非總是如此,
這是因為樸素貝葉斯模型假設(shè)屬性之間相互獨立,這個假設(shè)在實際應(yīng)用中往往是不成立的,在
屬性個數(shù)比較多或者屬性之間相關(guān)性較大時,分類效果不好。
(2)在屬性相關(guān)性較小時,樸素貝葉斯性能最為良好,對于這一點,有半樸素貝葉斯之類的算法
通過考慮部分關(guān)聯(lián)性適度改進。
總結(jié)
以上是生活随笔為你收集整理的嫁不嫁问题让你通俗易懂的了解朴素贝叶斯分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。