二十.朴素贝叶斯原理和sklearn实现

1.判别模型和生成模型

判别模型:判别模型直接学习自变量 x x x和因变量 y y y之间的关系,这种关系可能是函数 y = f ( x ) y=f(x) y=f(x),也可能是条件概率 P ( y ∣ x ) P(y|x) P(yx)
生成模型:生成模型需要先求出自变量和因变量的联合概率分布 P ( x , y ) P(x,y) P(x,y),再通过联合概率分布求出条件概率 P ( y ∣ x ) = P ( x , y ) P ( x ) P(y|x)=\frac{P(x,y)}{P(x)} P(yx)=P(x)P(x,y)。朴素贝叶斯属于生成模型。

2.贝叶斯公式

随机变量 X , Y X,Y X,Y相互独立,它们的联合概率分布为:
P ( X , Y ) = P ( X ) P ( Y ) P(X,Y)=P(X)P(Y) P(X,Y)=P(X)P(Y)
条件概率为:
P ( Y ∣ X ) = P ( X , Y ) P ( X ) = P ( X ∣ Y ) P ( X ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)}=\frac{P(X|Y)P(X)}{P(X)} P(YX)=P(X)P(X,Y)=P(X)P(XY)P(X)
全概率公式为:
P ( X ) = ∑ k P ( X ∣ Y k ) P ( Y k ) , ∑ k P ( Y k ) = 1 P(X)=\sum_{k}P(X|Y_{k})P(Y_{k}),\sum_{k}P(Y_{k})=1 P(X)=kP(XYk)P(Yk),kP(Yk)=1
综上,可以推导出贝叶斯公式:
P ( Y k ∣ X ) = P ( X ∣ Y k ) P ( Y k ) ∑ k P ( X ∣ Y k ) P ( Y k ) P(Y_{k}|X)=\frac{P(X|Y_{k})P(Y_{k})}{\sum_{k}P(X|Y_{k})P(Y_{k})} P(YkX)=kP(XYk)P(Yk)P(XYk)P(Yk)

3.朴素贝叶斯模型

m m m个样本,每个样本有 n n n个特征和一个标签,一共有共有 C C C种类别。

(1)先验概率

类别 C k C_{k} Ck出现的频率 P ( Y = C k ) P(Y=C_{k}) P(Y=Ck)称为先验分布,可以从数据中求出:
P ( Y = C k ) = ∣ C k ∣ m P(Y=C_{k})=\frac{|C_{k}|}{m} P(Y=Ck)=mCk
∣ C k ∣ |C_{k}| Ck为类别为 C k C_{k} Ck的样本数量。

(2)条件概率

当样本的类别为 C k C_{k} Ck时,它的各项维度是确定数值的概率为:
P ( X = x ∣ Y = C k ) = P ( X 1 = x 1 , X 2 = x 2 , . . . , X n = x n ∣ Y = C k ) P(X=x|Y=C_{k})=P(X_{1}=x_{1},X_{2}=x_{2},...,X_{n}=x_{n}|Y=C_{k}) P(X=xY=Ck)=P(X1=x1,X2=x2,...,Xn=xnY=Ck)
上式求解的要求高,求解过程复杂。因此,在朴素贝叶斯中,假设条件相互独立,则条件概率变为:
P ( X = x ∣ Y = C k ) = P ( X 1 = x 1 ∣ Y = C k ) P ( X 2 = x 2 ∣ Y = C k ) . . . P ( X n = x n ∣ Y = C k ) P(X=x|Y=C_{k})=P(X_{1}=x_{1}|Y=C_{k})P(X_{2}=x_{2}|Y=C_{k})...P(X_{n}=x_{n}|Y=C_{k}) P(X=xY=Ck)=P(X1=x1Y=Ck)P(X2=x2Y=Ck)...P(Xn=xnY=Ck)

(3)联合概率分布

可以通过先验分布和条件概率求出联合概率分布:
P ( X = x , Y = C k ) = P ( X = x ∣ Y = C k ) P ( Y = C k ) = P ( X 1 = x 1 ∣ Y = C k ) P ( X 2 = x 2 ∣ Y = C k ) . . . P ( X n = x n ∣ Y = C k ) P ( Y = C k ) P(X=x,Y=C_{k})=P(X=x|Y=C_{k})P(Y=C_{k})=P(X_{1}=x_{1}|Y=C_{k})P(X_{2}=x_{2}|Y=C_{k})...P(X_{n}=x_{n}|Y=C_{k})P(Y=C_{k}) P(X=x,Y=Ck)=P(X=xY=Ck)P(Y=Ck)=P(X1=x1Y=Ck)P(X2=x2Y=Ck)...P(Xn=xnY=Ck)P(Y=Ck)

(4)后验概率

当给定一个新样本 X n e w X^{new} Xnew时,只需要求出后验概率 P ( Y = C k ∣ X = X n e w ) P(Y=C_{k}|X=X^{new}) P(Y=CkX=Xnew)最大的即为新样本的类别。

4.目标函数推导

样本 X = X t e s t X=X^{test} X=Xtest,在此条件下,求样本的标签 Y t e s t Y^{test} Ytest概率最大的类别:
C r e s u l t = arg ⁡ max ⁡ C k P ( Y = C k ∣ X = X t e s t ) = arg ⁡ max ⁡ C k P ( Y = C k , X = X t e s t ) P ( X = X t e s t ) = arg ⁡ max ⁡ C k P ( X = X t e s t ∣ Y = C k ) P ( Y = C k ) P ( X = X t e s t ) \begin{aligned} C_{result}&=\arg\max_{C_{k}} P(Y=C_{k}|X=X^{test}) \\ &= \arg\max_{C_{k}}\frac{P(Y=C_{k},X=X^{test})}{P(X=X^{test})}\\ &=\arg\max_{C_{k}}\frac{P(X=X^{test}|Y=C_{k})P(Y=C_{k})}{P(X=X^{test})} \end{aligned} Cresult=argCkmaxP(Y=CkX=Xtest)=argCkmaxP(X=Xtest)P(Y=Ck,X=Xtest)=argCkmaxP(X=Xtest)P(X=XtestY=Ck)P(Y=Ck)
由于分母 P ( X = X t e s t ) P(X=X^{test}) P(X=Xtest)是一个固定的常数,省略后最大化过程变为:
C r e s u l t = arg ⁡ max ⁡ C k P ( X = X t e s t ∣ Y = C k ) P ( Y = C k ) C_{result}=\arg\max_{C_{k}} P(X=X^{test}|Y=C_{k})P(Y=C_{k}) Cresult=argCkmaxP(X=XtestY=Ck)P(Y=Ck)
朴素贝叶斯假设变量之间条件独立,上式可进一步简化为:
C r e s u l t = arg ⁡ max ⁡ C k P ( Y = C k ) ∏ i = 1 m P ( X i = X i t e s t ∣ Y = C k ) C_{result}=\arg\max_{C_{k}} P(Y=C_{k})\prod_{i=1}^{m}P(X_{i}=X_{i}^{test}|Y=C_{k}) Cresult=argCkmaxP(Y=Ck)i=1mP(Xi=XitestY=Ck)

5.算法流程

(1)求先验概率

先验概率 P ( Y = C k ) P(Y=C_{k}) P(Y=Ck),即类别 C k C_{k} Ck出现的概率:
P ( Y = C k ) = m k + λ m + λ k P(Y=C_{k})=\frac{m_{k}+\lambda}{m+\lambda k} P(Y=Ck)=m+λkmk+λ
其中, m k m_{k} mk为类别 C k C_{k} Ck出现的次数, m m m为总样本数, k k k为总类别数, λ \lambda λ为0或者1,它的作用是防止结果为0。

(2)选择条件概率

选择条件概率 P ( X j = X j t e s t ∣ Y = C k ) P(X_{j}=X_{j}^{test}|Y=C_{k}) P(Xj=XjtestY=Ck)的计算公式。
a.当特征 X j X_{j} Xj为离散值时:
P ( X j = X j t e s t ∣ Y = C k ) = m k j t e s t + λ m k + O j λ P(X_{j}=X_{j}^{test}|Y=C_{k})=\frac{m_{kj}^{test}+\lambda}{m_{k}+O_{j}\lambda} P(Xj=XjtestY=Ck)=mk+Ojλmkjtest+λ
其中, m k j t e s t m_{kj}^{test} mkjtest为类别为 C k C_{k} Ck的样本中,第 j j j个维度的特征值等于 X j t e s t X_{j}^{test} Xjtest的样本数, O j O_{j} Oj为第 j j j个特征的取值个数。
b.当特征 X j X_{j} Xj为连续值时:
P ( X j = X j t e s t ∣ Y = C k ) = 1 2 σ k 2 exp ⁡ − ( X j − μ k ) 2 σ k 2 P(X_{j}=X_{j}^{test}|Y=C_{k})=\frac{1}{\sqrt{2\sigma_{k}^{2}}}\exp-\frac{(X_{j}-\mu _{k})^{2}}{\sigma_{k}^{2}} P(Xj=XjtestY=Ck)=2σk2 1expσk2(Xjμk)2
其中, μ k \mu _{k} μk为类别为 C k C_{k} Ck的所有样本的均值, σ k \sigma_{k} σk为方差。

(3)选择类别

求要本概率最大的类别作为样本的类别:
C r e s u l t = arg ⁡ max ⁡ C k P ( Y = C k ) ∏ i = 1 n P ( X i = X i t e s t ∣ Y = C k ) C_{result}=\arg\max_{C_{k}} P(Y=C_{k})\prod_{i=1}^{n}P(X_{i}=X_{i}^{test}|Y=C_{k}) Cresult=argCkmaxP(Y=Ck)i=1nP(Xi=XitestY=Ck)

6.sklearn实现朴素贝叶斯算法

(1)数据预处理

导入数据,划分数据,标准化数据

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
iris = load_iris()
x,y=iris.data,iris.target
x_train,x_test,y_train,y_test = train_test_split(x,y)
std = StandardScaler()
x_train=std.fit_transform(x_train)
x_test = std.fit_transform(x_test)
print(x_train.shape,x_test.shape)

输出:

(112, 4) (38, 4)

(2)训练和预测

使用先验分布为高斯分布的贝叶斯分类器:

from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score
model=GaussianNB()
model.fit(x_train,y_train)
y_pred = model.predict(x_test)
print(accuracy_score(y_pred,y_test))

输出:

0.9210526315789473
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值