统计学习(李航)——朴素贝叶斯法(python代码)

朴素贝叶斯法中心思想:
对于给定的数据集,首先基于特征条件独立假设学习输入/输出的联合概率分布P(X,Y),具体地,学习以下先验概率及条件概率分布;然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。
先验概率分布:
P ( Y = c k ) , k = 1 , 2 , ⋯   , K P\left(Y=c_{k}\right), \quad k=1,2, \cdots, K P(Y=ck),k=1,2,,K

条件概率分布:
P ( X = x ∣ Y = c k ) = P ( X ( 1 ) = x ( 1 ) , ⋯   , X ( n ) = x ( n ) ∣ Y = c k ) , k = 1 , 2 , ⋯   , K P\left(X=x | Y=c_{k}\right)=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right), \quad k=1,2, \cdots, K P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck),k=1,2,,K
为什么叫朴素贝叶斯而不是叫贝叶斯呢,是因为对条件概率分布做了条件独立性假设。具体地,条件独立性假设是:
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 ) \begin{aligned} P\left(X=x | Y=c_{k}\right) &=P\left(X^{(1)}=x^{(1)}, \cdots, X^{(n)}=x^{(n)} | Y=c_{k}\right) \\ &=\prod_{j=1}^{n} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right) \end{aligned} P(X=xY=ck)=P(X(1)=x(1),,X(n)=x(n)Y=ck)=j=1nP(X(j)=x(j)Y=ck)
条件独立性假设等于是说用于分类的特征在类确定的条件下都是条件独立的。
分类:
朴素贝叶斯法分类时,对给定的输入x,通过学习到的模型计算后验概率分布 P ( Y = c k ∣ X = x ) P\left(Y=c_{k} | X=x\right) P(Y=ckX=x),将后验概率最大的类作为x的类输出,后验概率计算根据贝叶斯定理进行:
P ( Y = c k ∣ X = x ) = P ( X = x ∣ Y = c k ) P ( Y = c k ) ∑ k P ( X = x ∣ Y = c k ) P ( Y = c k ) P\left(Y=c_{k} | X=x\right)=\frac{P\left(X=x | Y=c_{k}\right) P\left(Y=c_{k}\right)}{\sum_{k} P\left(X=x | Y=c_{k}\right) P\left(Y=c_{k}\right)} P(Y=ckX=x)=kP(X=xY=ck)P(Y=ck)P(X=xY=ck)P(Y=ck)
将第三个公式代入上式有:
P ( Y = c k ∣ X = x ) = P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) , k = 1 , 2 , ⋯   , K P\left(Y=c_{k} | X=x\right)=\frac{P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}, \quad k=1,2, \cdots, K P(Y=ckX=x)=kP(Y=ck)jP(X(j)=x(j)Y=ck)P(Y=ck)jP(X(j)=x(j)Y=ck),k=1,2,,K
这是朴素贝叶斯法分类的基本公式,于是,朴素贝叶斯分类器可表示为:
y = f ( x ) = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) ∑ k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=f(x)=\arg \max _{c_{k}} \frac{P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)}{\sum_{k} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right)} y=f(x)=argckmaxkP(Y=ck)jP(X(j)=x(j)Y=ck)P(Y=ck)jP(X(j)=x(j)Y=ck)
又有,在上式中分母对所有 C k C_{k} Ck都是相同的,所以:
y = arg ⁡ max ⁡ c k P ( Y = c k ) ∏ j P ( X ( j ) = x ( j ) ∣ Y = c k ) y=\arg \max _{c_{k}} P\left(Y=c_{k}\right) \prod_{j} P\left(X^{(j)}=x^{(j)} | Y=c_{k}\right) y=argckmaxP(Y=ck)jP(X(j)=x(j)Y=ck)
后验概率最大化的含义:
朴素贝叶斯法将实例分到后验概率最大的类中,这等价于期望风险最小化,具体公式推导见《统计学习方法》49页。
极大似然估计:
在朴素贝叶斯法中,学习意味着估计先验概率 P ( Y = c k ) P\left(Y=c_{k}\right) P(Y=ck)和条件概率 P ( X = x ∣ Y = c k ) P\left(X=x | Y=c_{k}\right) P(X=xY=ck),可以用极大似然估计。
贝叶斯估计:
用极大似然估计可能会出现要估计的概率值为0的情况。这时会影响到后验概率的计算结果,使分类产生偏差。具体公式见《统计学习方法》51页。
Python代码:
统计学习(李航)——朴素贝叶斯法(python代码)_第1张图片
统计学习(李航)——朴素贝叶斯法(python代码)_第2张图片
统计学习(李航)——朴素贝叶斯法(python代码)_第3张图片

你可能感兴趣的:(统计学习(李航)——朴素贝叶斯法(python代码))