x1,x2,y
1,s,-1
1,m,-1
1,m,1
1,s,1
1,s,-1
2,s,-1
2,m,-1
2,m,1
2,l,1
2,l,1
3,l,1
3,m,1
3,m,1
3,l,1
3,l,-1
>>**x1 = 2,x2 = 's' 的類別
import pandas as pd
import numpy as np
# 定義寫key的函式,比如產生 'x1=3|y=1'
deftokey
(col_name, category, y)
:return col_name +
"="+
str(category)
+"|y="
+str
(y)# 去讀資料
df = pd.read_csv(
"../datas/bayes_lihang.txt"
)# 拉普拉斯 平滑因子
lam =
1# 用於儲存所有概率的字典
p =# 獲取類別種類的list
y = df[
"y"]
.value_counts(
).keys(
)# 獲取特徵列名
col_names = df.columns.tolist()[
:-1]
# 遍歷每個類別
for y in y:
# 獲取每個類別下的df
df2 = df[df[
"y"]
== y]
# 計算先驗概率
p =(df2.shape[0]
+ lam)
/(df.shape[0]
+len
(y)* lam)
# 將先驗概率加入p
p[y]
= p # 遍歷每個特徵
for col_name in col_names:
# 獲取每個特徵下特徵值種類的list
categorys = df2[col_name]
.value_counts(
).keys(
)# 遍歷每個特徵值
for category in categorys:
# 計算在某類別下,特徵=某特徵的條件概率
p =(df2[df2[col_name]
== category]
.shape[0]
+ lam)/(
df2.shape[0]
+len
(categorys)
* lam)
# 將條件概率加到p
p[tokey(col_name, category, y)
]= p
print
(p)# 待測資料
x =[2,
"s"]
# 用於儲存屬於某一類別的後驗概率
res =
# 遍歷類別
for y in y:
# 獲取先驗概率
p = p[y]
# 遍歷特徵
for i in
range
(len
(x))
:# 獲取條件概率
p *= p[tokey(col_names[i]
, x[i]
, y)
]print
(p)# 將後驗概率加入res
# 返回最大的後驗概率對應的類別
print
(y[np.argmax(res)
])
機器學習之樸素貝葉斯
寫在前面 本文寫自初學時,若後續學習過程中有新的理解,將不定期進行更新 若文中敘述有誤,望不吝賜教,也將及時修改 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而樸素樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。在理解樸素貝葉斯之前,需要對兩個數...
機器學習之樸素貝葉斯
樸素貝葉斯 1 樸素貝葉斯 2 一 高斯樸素貝葉斯 gaussiannb實現了高斯樸素貝葉斯分類演算法,設假設特徵的可能性是高斯的 p x i y 12 y 2exp xi y 22 y 2 p x i y frac exp frac p xi y 2 y2 exp 2 y2 xi y 2 1 引數...
機器學習 樸素貝葉斯
樸素貝葉斯原理 1.貝葉斯公式 2.樸素貝葉斯的模型 3.後驗概率最大化的含義 4.樸素貝葉斯的引數估計 4.1.特徵是離散值 假設符合多項式分布 4.2.特徵是稀疏的離散值 假設符合伯努利分布 4.3.特徵是連續值 假設符合正態分佈 5.樸素貝葉斯演算法過程 6.樸素貝葉斯演算法小結 scikit...