第4章--朴素贝叶斯(naive Bayes)---(4)

1.概述

  • 是典型的生成学习方法
  • 是基于贝叶斯理论和特征条件独立假设的分类方法
  • 训练时:通过学习先验概率分布 P ( Y = c k ) P(Y=c_k) P(Y=ck) 和条件概率分布 P ( X = x ∣ Y = c k ) P(X=x|Y=c_k) P(X=xY=ck),得到联合概率分布 P ( X , Y ) = P ( Y ) P ( X ∣ Y ) P(X,Y)=P(Y)P(X|Y) P(X,Y)P(Y)P(XY)
  • 分类时:使用学习到的模型对输入 x x x计算后验概率分布 P ( Y = c k ∣ X = x ) P(Y=c_k|X=x) P(Y=ckX=x),将验概率最大的类作为 x x x的分类
  • 原理:期望风险最小化得到后验概率最大
  • 模型:高斯模型、多项式模型、伯努利模型

2. 朴素贝叶斯算法

  • 输入:训练集 T T T(训练集数量为 N N N,特征数量为 n n n x i ( j ) x_i^{(j)} xi(j)表示第 i i i个样本的第 j j j个特征, a j l a_{jl} ajl表示第 j j j个特征可能取的第 l l l个值),实例 x x x
  • 输出:实例 x x x的分类
  • 计算步骤:
    1)计算先验概率及条件概率 P ( Y = c k ) = ∑ i = 1 N ( y i = c k ) N , k = 1 , 2 , . . . , K P(Y=c_k)=\frac{\sum_{i=1}^N(y_i=c_k)}{N},\quad k=1,2,...,K P(Y=ck)=Ni=1N(yi=ck),k=1,2,...,K P ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) ∑ i = 1 N I ( y i = c k ) , j = 1 , 2 , . . . , n ; l = 1 , 2 , . . . , S j ; k = 1 , 2 , . . . , K P(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^NI(x_i^{(j)}=a_{jl},y_i=c_k)}{\sum_{i=1}^NI(y_i=c_k)},\quad j=1,2,...,n;\quad l=1,2,...,S_j;\quad k=1,2,...,K P(X(j)=ajlY=ck)=i=1NI(yi=ck)i=1NI(xi(j)=ajl,yi=ck),j=1,2,...,n;l=1,2,...,Sj;k=1,2,...,K
    2)计算给定实例 x = ( x ( 1 ) , x ( 2 ) , . . . , x ( n ) ) x=(x^{(1)},x^{(2)},...,x^{(n)}) x=(x(1),x(2),...,x(n))的后验概率 P ( Y = c k ) ∏ j = 1 n P ( X ( j ) = x ( j ) ∣ Y = c k ) P(Y=c_k)\prod_{j=1}^{n} P(X^{(j)}=x^{(j)} | Y=c_{k}) P(Y=ck)j=1nP(X(j)=x(j)Y=ck)
    3)确定实例 x x x的类: y = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ j = 1 n P ( X j = x ( j ) ∣ Y = c k ) y=\arg \max _{c_{k}} P\left(Y=c_{k}\right) \prod_{j=1}^{n} P\left(X_{j}=x^{(j)} | Y=c_{k}\right) y=argckmaxP(Y=ck)j=1nP(Xj=x(j)Y=ck)

3.贝叶斯估计

  • 用极大似然估计可能会出现所要估计的概率值为0的情况,使分类产生偏差,而贝叶斯估计可以解决这个问题
  • 方法是:在随机变量各个取之的频数上加上一个正数 λ \lambda λ
  • λ = 0 \lambda=0 λ=0时就是极大似然估计
  • λ = 1 \lambda=1 λ=1时就是拉普拉斯平滑
  • 保证了所有的 P λ ( X ( j ) = a j l ∣ Y = c k ) > 0 , ∑ l = 1 S j P ( X ( j ) = a j l ∣ Y = c k ) = 1 P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)>0,\sum_{l=1}^{S_j}P(X^{(j)}=a_{jl}|Y=c_k)=1 Pλ(X(j)=ajlY=ck)>0,l=1SjP(X(j)=ajlY=ck)=1
  • P λ ( X ( j ) = a j l ∣ Y = c k ) = ∑ i = 1 N I ( x i ( j ) = a j l , y i = c k ) + λ ∑ i = 1 N I ( y i = c k ) + S j λ P_{\lambda}(X^{(j)}=a_{jl}|Y=c_k)=\frac{\sum_{i=1}^NI(x_i^{(j)}=a_{jl},y_i=c_k)+\lambda}{\sum_{i=1}^NI(y_i=c_k)+S_j\lambda} Pλ(X(j)=ajlY=ck)=i=1NI(yi=ck)+Sjλi=1NI(xi(j)=ajl,yi=ck)+λ

4.代码实现

#利用库数据,导入需要数据
from sklearn import datasets
iris = datasets.load_iris()

1)Multinomial Naive Bayes(多项式模型,MNB)

  • 多项分布数据的朴素贝叶斯算法
  • 是用于文本分类的两种经典朴素贝叶斯变体之一
  • 其中数据通常表示为单词向量计数
# 导包
from sklearn.naive_bayes import MultinomialNB

mnb = MultinomialNB()
mnb.fit(iris.data, iris.target)
MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True)
print(mnb.score(iris.data, iris.target))
print(mnb.predict([[4.4,  3.2,  1.3,  0.2]]))
# 输出结果:
#0.9533333333333334
#[0]

2)Gaussian Naive Bayes(高斯模型)

# 导包
from sklearn.naive_bayes import GaussianNB

gnb = GaussianNB()
gnb.fit(iris.data, iris.target)
print(gnb.score(iris.data, iris.target))
print(gnb.predict([[4.4,  3.2,  1.3,  0.2]]))
# 输出结果:
#0.96
#[0]

3)Complement Naive Bayes(标准多项式朴素贝叶斯,CNB)

  • CNB是标准多项式朴素贝叶斯(MNB)算法的改编
  • 特别适用于不平衡数据集。
  • 使用来自每个类的补集的统计来计算模型的权重。
  • 参数估计比MNB的参数估计更稳定。
  • 在文本分类任务上的表现通常优于MNB
# 导包
from sklearn.naive_bayes import ComplementNB

clf = ComplementNB()
clf.fit(iris.data, iris.target)
ComplementNB(alpha=1.0, class_prior=None, fit_prior=True, norm=False)
print(clf.score(iris.data, iris.target))
print(clf.predict([[4.4,  3.2,  1.3,  0.2]]))
# 输出结果:
#0.6666666666666666
#[0]

4)Bernoulli Naive Bayes

  • 可能存在多个特征,但每个特征被假定为二进制值(伯努利布尔值)变量。
  • 该类要求将样本表示为二进制值特征向量。
  • 如果传递任何其他类型的数据,binarize参数的设置决定是否将其输入二值化。
  • 在文本分类的情况下,可以使用单词出现向量(而不是单词计数向量)来训练和使用该分类器。
  • 可能在某些数据集上表现更好,特别是文档较短的数据集。
# 导包
from sklearn.naive_bayes import BernoulliNB

bnb = BernoulliNB()
bnb.fit(iris.data, iris.target)
print(bnb.score(iris.data, iris.target))
print(bnb.predict([[4.4,  3.2,  1.3,  0.2]]))
# 输出结果:
#0.3333333333333333
#[0]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值