天天看點

量化投資學習筆記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)

已知某事件已發生,可以通過貝葉斯公式考察引發該事件的各種原因和可能性的大小。

貝葉斯推斷

應用觀察到的現象對主觀機率(先驗機率)進行修正。支援某項屬性的事件發生得越多,該屬性成立的可能性越大。

先驗機率:由以往經驗和分析中得到的機率,作為“由因求果”問題中“因”出現的機率。一般是單獨的機率,如患病機率,下雨機率,購物機率等。

後驗機率:在得到“結果”的資訊後重新修正的機率,是“執果索因”中的“果”。後驗機率的計算要以先驗機率為基礎。形式一般和條件機率相同。

最大似然估計:以目前樣本的分布參數作為總體的參數的最佳估計。

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

P(H|E) 後驗機率

P(H) 先驗機率

P(E|H), P(E) 證據。

最大後驗機率估計:融入了要估計的先驗分布,是最大似然估計的規則化。

樸素貝葉斯

一種分類算法,通過計算樣本歸屬于不同類别的機率進行分類。

貝葉斯理論:基于能獲得的最好證據,來計算信念度的有效方法。信念度即為對事物真實性和正确性所具有的信心。

樸素:單純、簡單假設給定目标值時屬性之間互相條件獨立。如果這個條件不成立,不能用樸素貝葉斯。

樸素貝葉斯模型

m個樣本,每個樣本n個特征,輸出為k個類。

通過樣本學習得到先驗機率,即分類為某個值的機率。

通過樣本學習條件機率,即分類為某值時樣本為某個的機率。

計算聯合機率,分類為某項時樣本為某個分布的機率。

一個例子

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

課程是用手算的,我試試用sklearn。

sklearn主要提供GaussianNB(高斯樸素貝葉斯)、MultinomialNB(多項式樸素貝葉斯)、BernoulliNB(伯努利樸素貝葉斯)。後兩者主要用于離散特征分類。

手工将資料輸入csv檔案,讀入以後再将資料數值化,最後模組化,輸出。

coding:utf-8

樸素貝葉斯的例子

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 = pd.Series({"Age":3, "Income":3, "Alone":2, "Credit":2})
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/

我的微信個人訂閱号:趙瑜敏的口腔醫學學習園地