機器學習之樸素貝葉斯(連續值)二

2021-10-25 05:00:28 字數 3339 閱讀 3637

某樣本如下:

問題:身高170,體重130,鞋碼42,請問是男是女?

當特徵為連續值時,直接求條件概率就比較困難。假設特徵均為正太分布,即身高、體重、鞋碼均為正太分布,正太分布的均值、標準差由樣本算出,根據正太分布算出某乙個特徵的具體值。

實現求正太分布中某一值的概率密度,如下:

from pandas import dataframe

from scipy import stats

#step1 匯入資料

data = dataframe(

)#print(data)

#求男性的均值和標準差

male_height_mean = data[data[

'性別']==

'男']

['身高'

].mean(

)male_height_std = data[data[

'性別']==

'男']

['身高'

].std(

)#求身高為170的概率密度

x =170

prob = stats.norm.pdf(x,loc = male_height_mean,scale =male_height_std)

print

(prob)

求。身高170,體重130,鞋碼42,請問是男是女?

#step1:設p(a1)為身高為170;p(a2)為體重為130;p(a3)為鞋碼為42,p(b1)為男,p(b2)為女生。匯入資料

from pandas import dataframe

from scipy import stats

#step1 匯入資料

data = dataframe(

)#print(data)

#求不同label下特徵的均值和標準差

male_height_mean = data[data[

'性別']==

'男']

['身高'

].mean(

)male_height_std = data[data[

'性別']==

'男']

['身高'

].std(

)famale_height_mean = data[data[

'性別']==

'女']

['身高'

].mean(

)famale_height_std = data[data[

'性別']==

'女']

['身高'

].std(

)male_weight_mean = data[data[

'性別']==

'男']

['體重'

].mean(

)male_weight_std = data[data[

'性別']==

'男']

['體重'

].std(

)famale_weight_mean = data[data[

'性別']==

'男']

['體重'

].mean(

)famale_weight_std = data[data[

'性別']==

'男']

['體重'

].std(

)male_shoesize_mean = data[data[

'性別']==

'男']

['鞋碼'

].mean(

)male_shoesize_std = data[data[

'性別']==

'男']

['鞋碼'

].std(

)famale_shoesize_mean = data[data[

'性別']==

'女']

['鞋碼'

].mean(

)famale_shoesize_std = data[data[

'性別']==

'女']

['鞋碼'

].std(

)#step2:計算已知分類結果下,各個特徵的概率

#stats.norm.pdf()求概率,loc為均值,scale 為標準差

p_b1 =1/

2p_b2 =1/

2p_a1_b1 = stats.norm.pdf(x =

170,loc = male_height_mean,scale = male_height_std )

p_a2_b1 = stats.norm.pdf(x =

130,loc = male_weight_mean,scale = male_weight_std )

p_a3_b1 = stats.norm.pdf(x =

42,loc = male_shoesize_mean,scale = male_shoesize_std )

p_a1_b2 = stats.norm.pdf(x =

170,loc = famale_height_mean,scale = famale_height_std )

p_a2_b2 = stats.norm.pdf(x =

130,loc = famale_weight_mean,scale = famale_weight_std )

p_a3_b2 = stats.norm.pdf(x =

42,loc = famale_shoesize_mean,scale = famale_shoesize_std )

#print(p_a1_b1,p_a2_b1,p_a3_b1,p_a1_b2,p_a2_b2,p_a3_b2)

#step3.計算後驗概率大小

p1 = p_a1_b1 * p_a2_b1 * p_a3_b1 * p_b1

p2 = p_a1_b2 * p_a2_b2 * p_a3_b2 * p_b2

if p1 > p2:

print

('當身高為高,體重為中,鞋碼為中時,性別為{}'

.format

('男'

),p1)

elif p1 == p2:

print

('當身高為高,體重為中,鞋碼為中時,男生女生概率一樣大'

,p1)

else

:print

('當身高為高,體重為中,鞋碼為中時,性別為{}'

.format

('女'

),p2)

機器學習之樸素貝葉斯

寫在前面 本文寫自初學時,若後續學習過程中有新的理解,將不定期進行更新 若文中敘述有誤,望不吝賜教,也將及時修改 貝葉斯分類是一類分類演算法的總稱,這類演算法均以貝葉斯定理為基礎,故統稱為貝葉斯分類。而樸素樸素貝葉斯分類是貝葉斯分類中最簡單,也是常見的一種分類方法。在理解樸素貝葉斯之前,需要對兩個數...

機器學習之樸素貝葉斯

樸素貝葉斯 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...