朴素贝叶斯
利用朴素贝叶斯解决邮件分类(文本分析)问题(监督学习)
模型的输入是 P ( 邮 件 内 容 ∣ 正 常 ) P(邮件内容|正常) P(邮件内容∣正常), P ( 邮 件 内 容 ∣ 垃 圾 ) P(邮件内容|垃圾) P(邮件内容∣垃圾)(似然概率);先验概率 P ( 垃 圾 ) P(垃圾) P(垃圾), P ( 正 常 ) P(正常) P(正常)
任务内容是计算 P ( 垃 圾 o r 正 常 ∣ 邮 件 内 容 ) P(垃圾or正常|邮件内容) P(垃圾or正常∣邮件内容)(后验概率)
联合概率分布 P ( X 1 , X 2 , ⋯   , X n ∣ Y ) = ∏ i = 1 N P ( X i ∣ Y ) P(X_1,X_2,\cdots,X_n|Y)=\prod_{i=1}^{N}P(X_i|Y) P(X1,X2,⋯,Xn∣Y)=∏i=1NP(Xi∣Y)(其中 X i X_i Xi是相互独立的)
贝叶斯定理:
P
(
A
∣
B
)
=
P
(
B
∣
A
)
P
(
A
)
P
(
B
)
P(A|B)=\frac{P(B|A)P(A)}{P(B)}
P(A∣B)=P(B)P(B∣A)P(A)
- 处理似然概率为0的情况?
Smoothing:
- Add-one smoothing (分子加一,分母加词库大小)
p = x + 1 y + V p=\frac{x+1}{y+V} p=y+Vx+1 V:词库大小
文本的处理
文本的数据需要转换成向量形式(vector)
即计算 P ( 邮 件 内 容 ∣ 正 常 ) P(邮件内容|正常) P(邮件内容∣正常), P ( 邮 件 内 容 ∣ 垃 圾 ) P(邮件内容|垃圾) P(邮件内容∣垃圾)(似然概率)的两种方法
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
- 词频计算
图源来自GreedyAIAcademy
- Tfidf
t f i d f ( w ) = t f ( d , w ) ∗ i d f ( w ) tfidf(w) = tf(d,w)*idf(w) tfidf(w)=tf(d,w)∗idf(w) t f ( d , w ) tf(d,w) tf(d,w)是 w w w在 d d d字典中的词频;
i d f ( w ) = l o g N N ( w ) idf(w)=log\frac{N}{N(w)} idf(w)=logN(w)N, N N N是文档总数, N ( w ) N(w) N(w)是 w w w在几个文档中出现
同样要进行平滑处理。
问题
- 当特征为实数型时,例如w2v的向量一般为float型,连乘导致结果出现underfloor,如何解决?
A:1. 取 l o g ( P ) log(P) log(P) 2. kenerl函数 - 为什么叫朴素贝叶斯?
A:因为各项条件独立 - 生成模型和判别模型
- 朴素贝叶斯的最大似然函数
exercise
# 待完成