knitr::opts_chunk$set(echo = TRUE)
朴素贝叶斯直观上倒是很容易理解,无非就是求后验概率最大化,但是损失函数、参数求解都是一知半解。本文以离散型朴素贝叶斯为例,做一些简单的探讨。
前置知识
主要是概率论的一些知识:
条件概率
全概率公式
贝叶斯公式
基本方法
符号标记
设输出空间
X
X
是维向量的集合,输出空间为类标记集合
Y={c1,c2,...,ck}
Y
=
{
c
1
,
c
2
,
.
.
.
,
c
k
}
。
输入特征:
x∈X
x
∈
X
输出:
y∈Y
y
∈
Y
,
y
y
取值为
联合分布:
P(X,Y)
P
(
X
,
Y
)
训练集:
T={(x1,y1),...,(xN,yN)}
T
=
{
(
x
1
,
y
1
)
,
.
.
.
,
(
x
N
,
y
N
)
}
,样本独立同分布
先验分布:
P(Y=ck)=θk
P
(
Y
=
c
k
)
=
θ
k
条件独立性假设
Naive Bayes中有一个很强且不太符合直觉的假设,类内独立性或者说条件独立性。具体如下:
目标函数
预测新样本,我们希望求出
P(Y=ck|X=x)
P
(
Y
=
c
k
|
X
=
x
)
最大的类
ck
c
k
,作为
X
X
的类标记,则:
根据类内独立性:
因为分母对于所有的 ck c k 都是相同的,所以有目标函数:
损失函数
此处大谬,周末过来改一下~2018-04-12
上节的想法是后验概率最大化,那么从损失函数怎么理解呢?
假设朴素贝叶斯的损失函数是
0−1
0
−
1
损失函数:
其中 f(X) f ( X ) 是分类决策函数,此时期望风险函数为:
那么损失函数最小化即:
参数求解
回到后验概率最大,我们需要求解
P(X=x|Y=ck)
P
(
X
=
x
|
Y
=
c
k
)
和
P(Y=ck)
P
(
Y
=
c
k
)
,参数求解利用极大似然估计,新增一下若干符号标记:
nk
n
k
是类
ck
c
k
出现的次数
P(Y=ck)=θk
P
(
Y
=
c
k
)
=
θ
k
为先验分布
xj
x
j
为第
j
j
的特征,其取值为,其中
j=1,2,...J
j
=
1
,
2
,
.
.
.
J
,即特征共
m
m
维,即第
j
j
维的特征共个取值
P(xj=ajl|y=ck)
P
(
x
j
=
a
j
l
|
y
=
c
k
)
用
θajlck
θ
c
k
a
j
l
表示
nj,l,k
n
j
,
l
,
k
指第
k
k
类中第个特征取值为
ajl
a
j
l
的频数
1、似然函数
取对数:
分别记:
分别求 f1,f2 f 1 , f 2 的极值即可,对于 f1 f 1 ,使用拉格朗日乘子法求解:
对于 f2 f 2 同样使用拉格朗日乘子法:
优缺点
1、优点
模型容易构造,参数估计无需任何迭代框架,适用于大数据集
容易解释
分类效果往往很好,非常稳健
2、缺点
条件独立性的假设太强
对输入数据的表达形式很敏感
Summary
引入的拉普拉斯平滑等内容暂且不提,相关内容见李航的《统计学习方法》。
Ref
[1] 李航《统计学习方法》
[2] https://zhuanlan.zhihu.com/p/25006836?refer=carefree0910-pyml
2018-03-15 与杭州