機器學習之樸素貝葉斯(三)手寫底層實現完整版

2021-09-26 03:57:27 字數 1915 閱讀 6507

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...