这里写自定义目录标题
- 贝叶斯分类器原理
- 三个重要知识点
- 训练朴素贝叶斯的过程
- 朴素贝叶斯分类器
贝叶斯分类器原理
已知样本集,求新样本的分类结果:
比较各个分类结果下,哪个后验概率大,后验概率大的便是分类结果
三个重要知识点
先验概率:通过经验来判断事情发生的概率
后验概率:根据事情发生的结果,来推测原因的概率
条件概率:指事件A在事件B发生的前提下发生的概率,记为P(A|B)
后验概率公式为:(朴素贝叶斯分类器主要运用到的公式)
训练朴素贝叶斯的过程
step1.给出训练数据
step2.计算类别概率和条件概率
step3.对新数据进行预测
朴素贝叶斯分类器
根据身高,体重,鞋码,判断是男是女?假设,身高为高,体重为中,鞋码为中。
step1.设P(A1)为身高为高;P(A2)为体重为中;P(A3)为鞋码为中,P(B1)为男,P(B2)为女生。
step2.计算已知分类结果下,各个特征的概率
P(A1|B1)=1/2
P(A2|B1)=1/2
P(A3|B1)=1/4
P(A1|B2)=0
P(A2|B2)=1/2
P(A3|B2)=1/2
P(A1A2A3|B1)=1/16
P(A1A2A3|B2)=0
step3.比较后验概率大小
P(A1A2A3|B1)P(B1)>P(A1A2A3|B2)P(B2)
即为男生
原理如下:
from pandas import DataFrame
#step1 导入数据
data = DataFrame({
'身高':['高','高','中','中','矮','矮','矮','中'],'体重':['重','重','中','中','轻','轻','中','中'],'鞋码':['大','大','大','中','小','小','中','中'],'性别':['男','男','男','男','女','女','女','女']})
#print(data)#样本数
N = data.shape[0]#step2 计算已知分类结果下,各个特征的概率
p_b1 = data[ data['性别'] == '男'].shape[0]/N
p_b2 = data[ data['性别'] == '女'].shape[0]/N
p_a1_b1 = data[(data['身高'] == '高')& (data['性别'] == '男')].shape[0]/N
p_a2_b1 = data[(data['体重'] == '中')& (data['性别'] == '男')].shape[0]/N
p_a3_b1 = data[(data['鞋码'] == '中')& (data['性别'] == '男')].shape[0]/N
p_a1_b2 = data[(data['身高'] == '高')& (data['性别'] == '女')].shape[0]/N
p_a2_b2 = data[(data['体重'] == '中')& (data['性别'] == '女')].shape[0]/N
p_a3_b2 = data[(data['鞋码'] == '中')& (data['性别'] == '女')].shape[0]/N
#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('男'))
elif p1 == p2:print('当身高为高,体重为中,鞋码为中时,男生女生概率一样大')
else:print('当身高为高,体重为中,鞋码为中时,性别为{}'.format('女'))