某樣本如下:
問題:身高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...