朴素贝叶斯代码_机器学习 第44集 朴素贝叶斯如何求得样本特征对应的类别的概率?( 含有笔记、代码、注释 )...

朴素贝叶斯如何求得样本特征对应的类别的概率?

① 朴素贝叶斯公式可以使得贝叶斯公式展开为:

be275867123b68a808ae73be95887cb3.png

② 展开式中对每一个局部的进行统计计算。

注:因为在数据量很大的时候,根据中心极限定理,频率是等于概率的。

③ 统计 p(嫁) =

  • 首先,整理训练数据,嫁的样本数如下,一共有6个:

d18c0b1e5f0af64e5cc05979d3f4a689.png
  • p(嫁) = 6/12(12是总样本数) = 1/2
  • p(不帅|嫁) 统计满足样本数如下,有3个:

c2a3730d2456e6c561e811d2c4cf2c88.png
  • 则 p(不帅|嫁) = 3/6 = 1/2
  • p(性格不好|嫁) 统计满足样本数如下,有一个:

cf9bfac82d632525aafceb9686c7eb7d.png
  • 则 p(性格不好|嫁) = 1/6
  • p(矮|嫁) 统计满足样本数如下,有一个:

eadb5f1ab5d0f1a3de6e7defbb6bd7a4.png
  • 则 p(矮|嫁) = 1/6
  • p(不上进|嫁) 统计满足样本数如下,有一个:

12c9dab3d12a8710b674686e740aa294.png
  • 则 p(不上进|嫁) = 1/6
  • 下面开始求分母,p(不帅)、p(性格不好)、p(矮)、p(不上进)
  • 统计样本如下:

81e04cfd646d8ada8e061dea6f37170a.png
  • 不帅统计如红色所示,占4个,p(不帅) = 4/12 = 1/3

2a3a0d20f1e0ec053a025c195d034c73.png
  • 性格不好统计如红色所示,占4个,那么p(性格不好) = 4/12 = 1/3

159196eb91e9bf7a3229625974b5bb1e.png
  • 身高矮统计如红色所示,占7个,那么p (身高矮) = 7/12

eeb182a8fc26b16b7864500b9f5c4aaa.png
  • 不上进统计如上红色所示,占4个,那么p(不上进) = 4/12 = 1/3

④ p(不帅、性格不好、身高矮、不上进|嫁) 的所需项全部求出来了,带入进去即可:

be275867123b68a808ae73be95887cb3.png

= (1/2*1/6*1/6*1/6*1/2)/(1/3*1/3*7/12*1/3)

⑤ 下面根据同样的方法来求p(不嫁|不帅,性格不好,身高矮,不上进),完全一样的做法。

注:公式如下:

b4396d4db541010a76e2e41630f53f8c.png

注:一个一个来进行统计计算,这里与上面公式中,分母是一样的,于是我们分母不需要重新统计计算。

  • p(不嫁) 根据统计计算如下(红色为满足条件):

533f7587abd1ff5847d2bf785a7c22a2.png
  • 则 p(不嫁)=6/12 = 1/2
  • p(不帅|不嫁) 统计满足条件的样本如下(红色为满足条件):

a7d5f2798cd79ed26d2d684d03607fa3.png
  • p(不帅|不嫁) = 1/6
  • p(性格不好|不嫁) 据统计计算如下(红色为满足条件):

3a59554152fc2faf449cd8116e71617a.png
  • p(性格不好|不嫁) =3/6 = 1/2
  • p(矮|不嫁) 据统计计算如下(红色为满足条件):

c0a3635526089df38a2a53aeaf07a7cb.png
  • p(矮|不嫁) = 6/6 = 1
  • p(不上进|不嫁) 据统计计算如下(红色为满足条件):

bc948cb741fafd0f6fe9edd85f2d37d7.png
  • 则 p(不上进|不嫁) = 3/6 = 1/2
  • 根据公式:

b4396d4db541010a76e2e41630f53f8c.png
  • p(不嫁|不帅、性格不好、身高矮、不上进) = ((1/6*1/2*1*1/2)*1/2)/(1/3*1/3*7/12*1/3)

注:可以通过比较 p(不嫁|不帅、性格不好、身高矮、不上进) 和 p(嫁|不帅、性格不好、身高矮、不上进) 的概率,来判断样本特征应该对应哪个类别。

Python基础积累(numpy)

numpy数组合并

import numpy as np
A = np.array([1,1,1])
B = np.array([2,2,2])

# 第一种方法:直接合并后打印
print(np.vstack((A,B)))

# 第二种方法:合并后赋值,然后打印
C = np.vstack((A,B))
print(C)

运行结果:

[[1 1 1]
[2 2 2]]
[[1 1 1]
[2 2 2]]

注:vertical stack 上下合并,组成一个多维数组。

print(A.shape,B.shape,C.shape)

运行结果:

(3,) (3,) (2, 3)

注:从shape中看出A,B均为拥有3项的数组(数列),C拥有2*3项的数组。

D = np.hstack((A,B))
print(D)
print(A.shape,B.shape,D.shape)

运行结果:

[1 1 1 2 2 2]
(3,) (3,) (6,)

注:horizontal stack 左右合并。

参考文献:

  1. 知乎/忆臻/带你理解朴素贝叶斯分类算法

"♥每天积累一点点♥"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值