簡單實現來自b站大神的視頻講解:https://www.bilibili.com/video/BV1qs411a7mT
詳情可以看視頻鏈接,講的非常好。
1 # coding=utf-8
2 from __future__ import division 3 from numpy import array 4
5 def naive_bs(failed_number, drunk_number, shopping_number, study_number, expected_drunk, expected_shopping, expected_study): 6
7 ex_failed = 0 8 ex_not_failed = 0 9
10 for i in range(0, len(failed_number)): 11 if study_number[i] == 0: 12 ex_failed = ex_failed + 1
13 elif study_number[i] == 1: 14 ex_not_failed = ex_not_failed + 1
15
16 # 統計p(x?|y)出現的概率
17 # 計算不同情況
18 aa = 0 19 bb = 0 20 for i in range(0, len(drunk_number)): 21 if expected_drunk == drunk_number[i] and failed_number[i] == 1: 22 aa = aa + 1
23 elif expected_drunk == drunk_number[i] and failed_number[i] == 0: 24 bb = bb + 1
25 p_aa = aa / ex_failed #x1|y x1=0,y=1
26 p_bb = bb / ex_not_failed#x1|y x1=0,y=0
27
28 aaa = 0 29 bbb = 0 30
31 for i in range(0, len(shopping_number)): 32 if expected_shopping == shopping_number[i] and failed_number[i] == 1: 33 aaa = aaa + 1
34 elif expected_shopping == shopping_number[i] and failed_number[i] == 0: 35 bbb = bbb + 1
36 p_aaa = aaa / ex_failed 37 p_bbb = bbb / ex_not_failed 38
39 a4 = 0 40 b4 = 0 41 for i in range(0, len(study_number)): 42 if expected_study == study_number[i] and failed_number[i] == 1: 43 a4 = a4 + 1
44 elif expected_study == study_number[i] and failed_number[i] == 0: 45 b4 = b4 + 1
46 p_a4 = a4 / ex_failed 47 p_b4 = b4 / ex_not_failed 48
49 # print("aa:%s , aaa=%s a4=%s" % ( aa,aaa,a4))
50 # print("p_aa:%s , aaa=%s a4=%s" % (p_aa, p_aaa, p_a4))
51 # print("bb:%s , bbb=%s b4=%s" % (bb, bbb, b4))
52 # print("p_bb:%s , bbb=%s b4=%s" % (p_bb, p_bbb, p_b4))
53 final_failed_p = p_aa * p_aaa* p_a4 * ex_failed / len(failed_number) 54 final_not_p = p_bb * p_bbb * p_b4* ex_not_failed / len(failed_number) 55 print("掛科的概率=%s"%(final_failed_p)) 56 print("不掛科的概率=%s"%(final_not_p)) 57 if final_not_p>final_not_p: 58 print("預測會掛科") 59 else: 60 print("預測不會掛科") 61
62
63 if __name__ == "__main__": 64 failed_number = [1, 0, 0, 1, 1, 0, 0, 1] 65 drunk_number = [1, 0, 1, 1, 0, 0, 0, 0] 66 shopping_number=[1, 0, 0, 0, 1, 1, 1, 0] 67 study_number = [0, 1, 1, 0, 0, 1, 0, 1] 68
69 expected_drunk = 0 70 expected_shopping = 0 71 expected_study = 1
72 #不喝酒 不逛街 學習 的掛科概率
73 print(drunk_number, study_number, shopping_number) 74 naive_bs(failed_number, drunk_number, shopping_number,study_number, 75 expected_drunk, expected_shopping,expected_study)
代碼和自己做的PPT百度雲鏈接:
鏈接:https://pan.baidu.com/s/1WKn9sY295Qp9JSn3It0yxg
提取碼:23cd
復制這段內容后打開百度網盤手機App,操作更方便哦--來自百度網盤超級會員V5的分享