朴素贝叶斯简述
朴素贝叶斯用于分类,是一种生成模型。它利用特征条件独立假设学习联合概率分布,再通过贝叶斯定理求后验概率最大的输出。
基本概念
- 先验概率、后验概率、条件概率
先验概率也叫事前概率,也就是没有新数据进来计算的事件的概率。而后验概率理所当然是新信息加入后更新的概率。后验概率是事件A在事件B发生前提下发生的概率。A在朴素贝叶斯中表示特征,B表示标签。至于条件概率,后验概率就是一种条件概率,某某事情发生的前提下另一件事情发生的概率。 - 联合概率分布
联合概率分布是指两个及以上变量组成的随机变量的分布。 - 贝叶斯定理
贝叶斯定理是根据先验概率求后验概率的公式
P ( B i ∣ A ) = P ( B i ) P ( A ∣ B i ) ∑ j = 1 n P ( B j ) P ( A ∣ B j ) P\left( {{B_i}|A} \right) = \frac{{P\left( {{B_i}} \right)P\left( {A|{B_i}} \right)}}{{\sum\nolimits_{j = 1}^n {P\left( {{B_j}} \right)P\left( {A|{B_j}} \right)} }} P(Bi∣A)=∑j=1nP(Bj)P(A∣Bj)P(Bi)P(A∣Bi) - 条件独立假设
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , . . . , X ( n ) = x ( n ) ∣ Y = c k ) = ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P\left( {X = x|Y = {c_k}} \right) = P\left( {{X^{\left( 1 \right)}} = {x^{\left( 1 \right)}},...,{X^{\left( n \right)}} = {x^{\left( n \right)}}|Y = {c_k}} \right) = \prod\limits_{j = 1}^n {P\left( {{X^{\left( j \right)}} = {x^{\left( j \right)}}|Y = {c_k}} \right)} P(X=x∣Y=ck)=P(X(1)=x(1),...,X(n)=x(n)∣Y=ck)=j=1∏nP(X(j)=x(j)∣Y=ck)
朴素贝叶斯分类器
根据先验概率和条件独立假设以及贝叶斯定理可以得到贝叶斯分类器:
y
=
a
r
g
m
a
x
c
k
P
(
Y
=
c
k
)
∏
j
P
(
X
(
j
)
=
x
(
j
)
∣
Y
=
c
k
)
y = \mathop {argmax}\limits_{{c_k}} P\left( {Y = {c_k}} \right)\prod\nolimits_j {P\left( {{X^{\left( j \right)}} = {x^{\left( j \right)}}|Y = {c_k}} \right)}
y=ckargmaxP(Y=ck)∏jP(X(j)=x(j)∣Y=ck)
sklearn中的朴素贝叶斯
'''
sklearn中有三个不同的朴素贝叶斯算法:
GaussianNB——适合特征大部分是连续值
MultinominalNB——适合特征大部分是多元离散值
BernoulliNB——适合特征是二元离散值或者稀疏的多元离散值
'''
from sklearn.naive_bayes import GaussianNB
#GaussianNB的参数特别少,基本上不必设置
clf= GaussianNB()
clf.fit(data,label)
朴素贝叶斯面试
- 朴素贝叶斯优缺点
优点:
小规模数据表现很好;可以批量训练;算法简单,经常用于NLP;对缺失值不敏感
缺点:
条件独立性假设不容易满足;对数据格式很敏感 - 朴素贝叶斯是如何处理连续值特征的
如果特征是连续值,可以假设特征服从某种概率分布,然后估计参数。 - 测试集里面某个特征的取值和它的标签值没有在训练集中同时出现过怎么办
没有同时出现在训练集中不表示它不会发生,因此需要使用拉普拉斯平滑,在随机变量各个取值的频数上赋予一个正数 λ \lambda λ