朴素贝叶斯(Naive Bayes)

本文介绍朴素贝叶斯算法在垃圾邮件分类中的应用,详细解析了算法原理,包括特征独立性假设、概率计算及如何避免零频问题,通过计算条件概率和先验概率来判断邮件类别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为涉及到概率论,我实在是一脸懵逼,就以垃圾邮件分类来说明朴素贝叶斯怎么做。

输入:

        一系列邮件及其标签—— { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\} {(x1,y1),(x2,y2),,(xN,yN)},其中邮件 x i = ( w i 1 , w i 2 , ⋯   , w i n ) T x_i=(w_{i1},w_{i2},\cdots,w_{in})^T xi=(wi1,wi2,,win)T,那么邮件的特征 w i j w_{ij} wij就是文章中的特征单词(假设是英文邮件), y i ∈ { C 1 , C 2 } y_i\in\{C_1,C_2\} yi{C1,C2}表示邮件类别, C 1 C_1 C1 表示垃圾邮件, C 2 C_2 C2 表示不是垃圾邮件

输出:

         x i x_i xi 的类别,其中 i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N

假设前提:
  1. 输入数据每个特征维度是离散的
  2. 输入数据每个特征维度相互独立
学习:

        如何得到 x i x_i xi 的类别?其实就是判断 P ( Y = C 1 ∣ X = x i ) P(Y=C_1|X=x_i) P(Y=C1X=xi) P ( Y = C 2 ∣ X = x i ) P(Y=C_2|X=x_i) P(Y=C2X=xi)的大小,其中 i = 1 , 2 , ⋯   , N i=1,2,\cdots,N i=1,2,,N。 根据贝叶斯公式,可以得到: P ( Y = C 1 ∣ X = x i ) = P ( X = x i , Y = C 1 ) P ( X = x i ) = P ( X = x i ∣ Y = C 1 ) P ( Y = C 1 ) P ( X = x i ) P ( Y = C 2 ∣ X = x i ) = P ( X = x i , Y = C 2 ) P ( X = x i ) = P ( X = x i ∣ Y = C 2 ) P ( Y = C 2 ) P ( X = x i ) \begin{aligned} P(Y=C_1|X=x_i)=\frac{P(X=x_i,Y=C_1)}{P(X=x_i)}=\frac{P(X=x_i|Y=C_1)P(Y=C_1)}{P(X=x_i)} \\ \\ P(Y=C_2|X=x_i)=\frac{P(X=x_i,Y=C_2)}{P(X=x_i)}=\frac{P(X=x_i|Y=C_2)P(Y=C_2)}{P(X=x_i)} \end{aligned} P(Y=C1X=xi)=P(X=xi)P(X=xi,Y=C1)=P(X=xi)P(X=xiY=C1)P(Y=C1)P(Y=C2X=xi)=P(X=xi)P(X=xi,Y=C2)=P(X=xi)P(X=xiY=C2)P(Y=C2)
所以我们的目标转化为比较 P ( X = x i ∣ Y = C 1 ) P ( Y = C 1 ) P(X=x_i|Y=C_1)P(Y=C_1) P(X=xiY=C1)P(Y=C1) P ( X = x i ∣ Y = C 2 ) P ( Y = C 2 ) P(X=x_i|Y=C_2)P(Y=C_2) P(X=xiY=C2)P(Y=C2)的大小,其中

P ( X = x i ∣ Y = C k ) = P ( X 1 = w i 1 , X 2 = w i 2 , ⋯   , X n = w i n ∣ Y = C k ) = ∏ j = 1 n P ( X j = w i j ∣ Y = C k ) ( 相 互 独 立 ) \begin{aligned} P(X=x_i|Y=C_k)=&P(X_1=w_{i1},X_2=w_{i2},\cdots,X_n=w_{in}|Y=C_k)\\ \\ =&\prod_{j=1}^nP(X_j=w_{ij}|Y=C_k)\qquad(相互独立) \end{aligned} P(X=xiY=Ck)==P(X1=wi1,X2=wi2,,Xn=winY=Ck)j=1nP(Xj=wijY=Ck)()
垃圾邮件中, P ( X j = w i j ∣ Y = C k ) P(X_j=w_{ij}|Y=C_k) P(Xj=wijY=Ck)可以用简单的出现次数来计算,即
P ( X j = w i j ∣ Y = C k ) = 邮 件 x i 中 单 词 w i j 出 现 的 次 数 样 本 中 所 有 属 于 C k 的 邮 件 中 单 词 w i j 出 现 的 总 次 数 = c o u n t ( w i j , x i ) c o u n t ( w i j , C k ) \begin{aligned} P(X_j=w_{ij}|Y=C_k)=&\frac{邮件x_i中单词w_{ij}出现的次数}{样本中所有属于C_k的邮件中单词w_{ij}出现的总次数}\\\\=&\frac{count(w_{ij},x_i)}{count(w_{ij},C_k)} \end{aligned} P(Xj=wijY=Ck)==Ckwijxiwijcount(wij,Ck)count(wij,xi)但是这种计算会带来一个问题,要是训练样本中没有出现这个单词,而测试样本中有,则会导致分类错误,故可以对此稍加改进: P ( X j = w i j ∣ Y = C k ) = c o u n t ( w i j , x i ) + 1 c o u n t ( w i j , C k ) + c o u n t ( C k ) \begin{aligned} P(X_j=w_{ij}|Y=C_k)=\frac{count(w_{ij},x_i)+1}{count(w_{ij},C_k)+count(C_k)} \end{aligned} P(Xj=wijY=Ck)=count(wij,Ck)+count(Ck)count(wij,xi)+1其中 c o u n t ( C k ) count(C_k) count(Ck) 表示属于 C k C_k Ck 类的邮件中的总单词数。然后,我们可以算出先验概率: P ( C k ) = 样 本 中 属 于 C k 的 邮 件 数 量 样 本 总 量 P(C_k)=\frac{样本中属于C_k的邮件数量}{样本总量} P(Ck)=Ck至此,我们可以得到: i f P ( X = x i ∣ Y = C 1 ) P ( Y = C 1 ) > P ( X = x i ∣ Y = C 2 ) P ( Y = C 2 ) , x i ∈ C 1 i f P ( X = x i ∣ Y = C 1 ) P ( Y = C 1 ) < P ( X = x i ∣ Y = C 2 ) P ( Y = C 2 ) , x i ∈ C 2 \begin{aligned} if \quad P(X=x_i|Y=C_1)P(Y=C_1)>P(X=x_i|Y=C_2)P(Y=C_2),\quad x_i\in C_1\\\\ if \quad P(X=x_i|Y=C_1)P(Y=C_1)<P(X=x_i|Y=C_2)P(Y=C_2),\quad x_i\in C_2 \end{aligned} ifP(X=xiY=C1)P(Y=C1)>P(X=xiY=C2)P(Y=C2),xiC1ifP(X=xiY=C1)P(Y=C1)<P(X=xiY=C2)P(Y=C2),xiC2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值