量化投資學習筆記24——貝葉斯方法

隨機試驗:可重複性,可觀察性,不確定性。
條件概率
P(B|A) = P(AB)/P(A),爲事件A發生的條件下事件B的發生概率。
概率乘法公式:
P(AB) = P(B|A)P(A) = P(A|B)P(B)
事件獨立:兩事件的發生沒有影響。P(B|A) = P(B)。
P(AB) = P(B|A)P(A) = P(A)P(B)
全概率公式
如果事件A1,A2,…,An是完備事件組,且都有正概率,則有P(B) = P(A1)P(B|A1) + P(A2)P(B|A2) + … + P(An)P(B|An)
貝葉斯公式,對一完備事件組A1,A2,…,An,對仍一事件B,P(B)>0,則有
P(Ai|B) = P(AiB)/P(B),對P(B)應用全概率公式,
P(Ai|B) = P(Ai)P(B|Ai)/ΣP(Ai)P(B|Ai)
已知某事件已發生,可以通過貝葉斯公式考察引發該事件的各種原因和可能性的大小。
貝葉斯推斷
應用觀察到的現象對主觀概率(先驗概率)進行修正。支持某項屬性的事件發生得越多,該屬性成立的可能性越大。
先驗概率:由以往經驗和分析中得到的概率,作爲“由因求果”問題中“因”出現的概率。一般是單獨的概率,如患病概率,下雨概率,購物概率等。
後驗概率:在得到“結果”的信息後重新修正的概率,是“執果索因”中的“果”。後驗概率的計算要以先驗概率爲基礎。形式一般和條件概率相同。
最大似然估計:以當前樣本的分佈參數作爲總體的參數的最佳估計。

P(H|E) 後驗概率
P(H) 先驗概率
P(E|H), P(E) 證據。
最大後驗概率估計:融入了要估計的先驗分佈,是最大似然估計的規則化。
樸素貝葉斯
一種分類算法,通過計算樣本歸屬於不同類別的概率進行分類。
貝葉斯理論:基於能獲得的最好證據,來計算信念度的有效方法。信念度即爲對事物真實性和正確性所具有的信心。
樸素:單純、簡單假設給定目標值時屬性之間相互條件獨立。如果這個條件不成立,不能用樸素貝葉斯。
樸素貝葉斯模型
m個樣本,每個樣本n個特徵,輸出爲k個類。
通過樣本學習得到先驗概率,即分類爲某個值的概率。
通過樣本學習條件概率,即分類爲某值時樣本爲某個的概率。
計算聯合概率,分類爲某項時樣本爲某個分佈的概率。
一個例子

課程是用手算的,我試試用sklearn。
sklearn主要提供GaussianNB(高斯樸素貝葉斯)、MultinomialNB(多項式樸素貝葉斯)、BernoulliNB(伯努利樸素貝葉斯)。後兩者主要用於離散特徵分類。
手工將數據輸入csv文件,讀入以後再將數據數值化,最後建模,輸出。
樸素貝葉斯的例子

import pandas as pd
from sklearn.naive_bayes import MultinomialNB

數據轉換
def transform(data):
data.loc[data.Age == "青少年", "Age"] = 1
data.loc[data.Age == "中年", "Age"] = 2
data.loc[data.Age == "老年", "Age"] = 3
data.loc[data.Income == "高", "Income"] = 1
data.loc[data.Income == "中", "Income"] = 2
data.loc[data.Income == "低", "Income"] = 3
data.loc[data.Alone == "是", "Alone"] = 1
data.loc[data.Alone == "否", "Alone"] = 2
data.loc[data.Credit == "良好", "Credit"] = 1
data.loc[data.Credit == "一般", "Credit"] = 2
data.loc[data.Buy == "是", "Buy"] = 1
data.loc[data.Buy == "否", "Buy"] = 2
return data

if name == "main":
data = pd.read_csv("data.csv")
print(data)
data = transform(data)
print(data)
train_data = data[["Age", "Income", "Alone", "Credit"]]
test_data = data["Buy"]

test = np.array([3, 3, 2, 2])
print(test)

print("測試輸出")
print(data.values)
進行樸素貝葉斯分類模型訓練
clf = MultinomialNB(alpha = 2.0)
clf.fit(data.values, test_data)
print(clf.class_log_prior_)
用模型預測
print(clf.predict(test))
print(clf.predict_proba(test))

運行結果
[1]
[[0.66684573 0.33315427]]
拉普拉斯平滑
有時會碰到零概率的問題,由於其中某個概率爲0,相乘導致整個概率爲0。拉普拉斯平滑通過在分子分母上加上調整解決這一問題。即上面程序裏的alpha參數。
優點
有統計理論背書,分類效率穩定。
支持多分類任務。
對缺失數據不敏感。
算法簡單,模型容易解釋。
計算量小,支持海量數據。
支持增量式計算,可做在線預測。
缺點
需要有先驗概率,不同值對結果有影響。
分類決策存在錯誤率。
對輸入數據表達形式敏感。
"樸素"的假設對結果影響大。
接下來,試試用這個算法來解決泰坦尼克號問題吧。
課程也看完了,好像不全,還有其它方法沒講。再找找看有沒有其它課程。
本文代碼:
https://github.com/zwdnet/MyQuant/tree/master/21

我發文章的四個地方,歡迎大家在朋友圈等地方分享,歡迎點“在看”。
我的個人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的博客園博客地址: https://www.cnblogs.com/zwdnet/
我的微信個人訂閱號:趙瑜敏的口腔醫學學習園地

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章