朴素贝叶斯(Naive Bayes)

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

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

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

输入:

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

输出:

        xix_ixi 的类别,其中 i=1,2,⋯ ,Ni=1,2,\cdots,Ni=1,2,,N

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

        如何得到xix_ixi 的类别?其实就是判断P(Y=C1∣X=xi)P(Y=C_1|X=x_i)P(Y=C1X=xi)P(Y=C2∣X=xi)P(Y=C_2|X=x_i)P(Y=C2X=xi)的大小,其中i=1,2,⋯ ,Ni=1,2,\cdots,Ni=1,2,,N。 根据贝叶斯公式,可以得到:P(Y=C1∣X=xi)=P(X=xi,Y=C1)P(X=xi)=P(X=xi∣Y=C1)P(Y=C1)P(X=xi)P(Y=C2∣X=xi)=P(X=xi,Y=C2)P(X=xi)=P(X=xi∣Y=C2)P(Y=C2)P(X=xi)\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=xi∣Y=C1)P(Y=C1)P(X=x_i|Y=C_1)P(Y=C_1)P(X=xiY=C1)P(Y=C1)P(X=xi∣Y=C2)P(Y=C2)P(X=x_i|Y=C_2)P(Y=C_2)P(X=xiY=C2)P(Y=C2)的大小,其中

P(X=xi∣Y=Ck)=P(X1=wi1,X2=wi2,⋯ ,Xn=win∣Y=Ck)=∏j=1nP(Xj=wij∣Y=Ck)(相互独立)\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(Xj=wij∣Y=Ck)P(X_j=w_{ij}|Y=C_k)P(Xj=wijY=Ck)可以用简单的出现次数来计算,即
P(Xj=wij∣Y=Ck)=邮件xi中单词wij出现的次数样本中所有属于Ck的邮件中单词wij出现的总次数=count(wij,xi)count(wij,Ck)\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(Xj=wij∣Y=Ck)=count(wij,xi)+1count(wij,Ck)+count(Ck)\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其中 count(Ck)count(C_k)count(Ck) 表示属于 CkC_kCk 类的邮件中的总单词数。然后,我们可以算出先验概率:P(Ck)=样本中属于Ck的邮件数量样本总量P(C_k)=\frac{样本中属于C_k的邮件数量}{样本总量}P(Ck)=Ck至此,我们可以得到:ifP(X=xi∣Y=C1)P(Y=C1)>P(X=xi∣Y=C2)P(Y=C2),xi∈C1ifP(X=xi∣Y=C1)P(Y=C1)<P(X=xi∣Y=C2)P(Y=C2),xi∈C2\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、付费专栏及课程。

余额充值