训练时:通过学习先验概率分布
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=x∣Y=ck),得到联合概率分布
P
(
X
,
Y
)
=
P
(
Y
)
P
(
X
∣
Y
)
P(X,Y)=P(Y)P(X|Y)
P(X,Y)=P(Y)P(X∣Y)
分类时:使用学习到的模型对输入
x
x
x计算后验概率分布
P
(
Y
=
c
k
∣
X
=
x
)
P(Y=c_k|X=x)
P(Y=ck∣X=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)=N∑i=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)=ajl∣Y=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=1∏nP(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)=ajl∣Y=ck)>0,∑l=1SjP(X(j)=ajl∣Y=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)=ajl∣Y=ck)=∑i=1NI(yi=ck)+Sjλ∑i=1NI(xi(j)=ajl,yi=ck)+λ
4.代码实现
#利用库数据,导入需要数据
from sklearn import datasets
iris = datasets.load_iris()