1.贝叶斯分类的基础–贝叶斯定理
-
贝叶斯法则:假设数据遵循某种概率分布,通过对概率的分析推理以做出最优的决策
-
贝叶斯公式:根据先验概率和似然来计算后验概率
P ( c ∣ X ) = P ( X ∣ c ) P ( c ) P ( X ) P(c|X) = \frac{P(X|c)P(c)}{P(X)} P(c∣X)=P(X)P(X∣c)P(c)
利用了古典的数学理论,通过贝叶斯公式,由先验概率计算出后验概率,即是该假设属于某一类别的概率,然后选择后验概率最大的类作为该假设的目标值。 -
极大后验概率(MAP):用贝叶斯公式计算每个候选假设的后验概率,寻找给定数据D时可能性最大的假设
c M A P = a r g m a x c ∈ C P ( c ∣ x ) = a r g m a x c ∈ C P ( x ∣ c ) P ( c ) P ( x ) = a r g m a x c ∈ C P ( x ∣ c ) P ( c ) c_{MAP} = arg\ max_{c \in C} P(c|x) = arg\ max_{c \in C} \frac{P(x|c)P(c)}{P(x)} = arg\ max_{c \in C}P(x|c)P(c) cMAP=arg maxc∈CP(c∣x)=arg maxc∈CP(x)P(x∣c)P(c)=arg maxc∈CP(x∣c)P(c)
2.贝叶斯分类器
分类是机器学习和数据挖掘中最基础的一种工作。假设现在我们有一组训练样本,以及与其相对应的分类标签。每个元组都被表示为n维属性向量
x
=
(
x
1
,
x
1
,
.
.
.
,
x
n
)
x=(x_1,x_1,...,x_n)
x=(x1,x1,...,xn)的形式,一共有k个类别
c
1
,
c
2
,
.
.
.
,
c
k
c_1,c_2,...,c_k
c1,c2,...,ck。分类要做的就是模型可以预测数据属于哪个类别。
对于每个类别
c
i
c_i
ci,利用贝叶斯公式来估计在给定训练元组X时的条件概率
P
(
c
i
∣
x
)
P(c_i|x)
P(ci∣x)
P
(
c
i
∣
x
)
=
P
(
c
i
)
P
(
x
∣
c
i
)
P
(
x
)
P(c_i|x)=\frac{P(c_i)P(x|c_i)}{P(x)}
P(ci∣x)=P(x)P(ci)P(x∣ci)
当且仅当概率 P ( c i ∣ x ) P(c_i|x) P(ci∣x)在所有类别中取值最大时,数据 x x x属于 c i c_i ci。 P ( c i ) P(c_i) P(ci)是类先验概率, P ( x ∣ c i ) P(x|c_i) P(x∣ci)是样本 x x x相对于类 c i c_i ci的类条件概率,称为似然。因为 P ( x ) P(x) P(x)是用于归一化的证据因子,其对于所有的类别都是恒定的。所以只需要基于训练数据来估计 P ( c i ) P(c_i) P(ci)和 P ( x ∣ c i ) P(x|c_i) P(x∣ci)
2.1 极大似然估计
估计类条件概率的一种常用策略是先假定其具有某种确定的概率分布形式,再根据训练样本对概率分布的参数进行估计。记关于类别
c
c
c的类条件概率为
P
(
x
∣
c
)
P(x|c)
P(x∣c),假设其具有某种概率分布形式并且被参数向量
β
c
\beta_c
βc唯一确定,则我们就根据训练数据集来估计参数
β
c
\beta_c
βc,我们将
P
(
x
∣
c
)
P(x|c)
P(x∣c)记为
P
(
x
∣
β
c
)
P(x|\beta_c)
P(x∣βc)
另
D
c
D_c
Dc来表示训练集
D
D
D中第
c
c
c类样本组成的集合,假设这些样本是独立同分布的,则参数
β
c
\beta_c
βc对于数据集
D
c
D_c
Dc的似然是:
P
(
D
c
∣
β
c
)
=
∏
x
∈
D
c
P
(
x
∣
β
c
)
P(D_c|\beta_c)=\prod_{x\in{D_c}} P(x|\beta_c)
P(Dc∣βc)=x∈Dc∏P(x∣βc)
对
β
c
\beta_c
βc进行极大似然估计就是寻找能够最大化
P
(
D
c
∣
β
c
)
P(D_c|\beta_c)
P(Dc∣βc)的参数值
β
c
′
\beta_c'
βc′。也就是在
β
c
\beta_c
βc的所有可能的取值中,找到一个能够使数据出现的可能性最大的值。
上式的连乘操作容易造成下溢,通常使用对数似然:
L
L
(
β
c
)
=
l
o
g
P
(
D
c
∣
β
c
)
=
∑
x
∈
D
c
l
o
g
P
(
x
∣
β
c
)
LL(\beta_c)=logP(D_c|\beta_c)=\sum_{x\in{D_c}}logP(x|\beta_c)
LL(βc)=logP(Dc∣βc)=x∈Dc∑logP(x∣βc)
此时,参数
β
c
\beta_c
βc的极大似然估计为:
β
c
′
=
a
r
g
β
c
m
a
x
L
L
(
β
c
)
\beta_c'=arg _{\beta_c}maxLL(\beta_c)
βc′=argβcmaxLL(βc)
需要注意的是这种参数估计的方法虽然能够使类条件概率估计变得简单,但是结果的准确性严重依赖于所假设的概率分布形式是否符合潜在的真实数据分布。在现实应用中,想要做出较好的接近潜在真实分布的假设,往往需在一定会程度上利用关于任务本身的经验知识,否则若仅凭猜测来假设概率分布形式,很可能产生误导性的结果。
2.2 贝叶斯分类器存在的问题
- 对于类条件概率 P ( x ∣ c i ) P(x|c_i) P(x∣ci)来说,由于它涉及关于 x x x所有属性的联合概率,直接根据样本出现的频率来估计会遇到严重的困难,因为如果假设样本的d个属性都是二值的,则样本空间可能会有 2 d 2^d 2d种可能性。在现实中,这个值往往远大于训练样本数m,也就是说很多样本的取值可能在训练样本中可能根本没有出现,由于未被观测到和没有出现是两个不同的事件,所以直接根据样本频率来估计 P ( x ∣ c i ) P(x|c_i) P(x∣ci)是显然不可行的。
- 由统计学知,如果每个特征需要N个样本,那么对于10个特征就需要 N 10 N^{10} N10个样本,1000个特征的词汇表将需要 N 1 000 N^1000 N1000个样本。可以看到,所需样本数会随着特征数目增大而迅速增长。如果特征之间相互独立,那么样本数就可以从 N 1000 N^{1000} N1000减少到 1000 ∗ N 1000*N 1000∗N
3.朴素贝叶斯分类器
我们可以发现基于贝叶斯公式来计算后验概率
P
(
c
∣
x
)
P(c|x)
P(c∣x)的主要困难在于类条件概率
P
(
x
∣
c
)
P(x|c)
P(x∣c)是所有属性上的联合概率,难以从有限的训练样本中直接估计而得。
为了避开这个障碍,朴素贝叶斯分类器采用了属性条件独立性假设,即对于已知类别所有属性独立的对分类结果产生影响,也就是说所有属性都是条件独立的,联合概率就等于每个单独属性概率的乘积:
P
(
x
∣
c
k
)
=
∏
i
=
1
n
P
(
x
i
∣
c
k
)
=
P
(
x
1
∣
c
k
)
∗
P
(
x
2
∣
c
k
)
∗
.
.
.
∗
P
(
x
n
∣
c
k
)
P(x|c_k)=\prod_{i=1}^nP(x_i|c_k)=P(x_1|c_k)*P(x_2|c_k)*...*P(x_n|c_k)
P(x∣ck)=i=1∏nP(xi∣ck)=P(x1∣ck)∗P(x2∣ck)∗...∗P(xn∣ck)
P
(
c
k
∣
x
)
=
P
(
c
k
)
∏
i
=
1
n
P
(
x
i
∣
c
k
)
P
(
x
)
P(c_k|x)=\frac{P(c_k)\prod_{i=1}^n{P(x_i|c_k)}}{P(x)}
P(ck∣x)=P(x)P(ck)∏i=1nP(xi∣ck)
因为分母对于所有的类别都是一样的,所以我们的目标就是:
c
M
A
P
=
a
r
g
m
a
x
c
j
∈
C
P
(
x
1
,
x
2
,
x
n
∣
c
)
P
(
c
j
)
=
a
r
g
m
a
x
c
j
∈
C
P
(
c
j
)
∏
P
(
x
i
∣
c
j
)
c_{MAP} = arg max_{c_j \in C} P(x_1, x_2, x_n |c) P(c_j) = arg max_{c_j \in C} P(c_j) \prod P(x_i|c_j)
cMAP=argmaxcj∈CP(x1,x2,xn∣c)P(cj)=argmaxcj∈CP(cj)∏P(xi∣cj)
朴素贝叶斯分类器的训练过程就是基于训练数据集来计算类先验概率
P
(
c
i
)
P(c_i)
P(ci)和类条件概率。
3.1 特征属性的条件概率估计的计算
-
计算条件概率是朴素贝叶斯的关键步骤
- 当特征属性是离散值时,可以很方便的统计训练样本中各个特征属性在每个类别中出现的频率
- 当特征属性是连续值时,可以假定其值服从高斯分布
g ( x , μ , σ ) = 1 2 π e − ( x − μ ) 2 2 σ 2 g( x, \mu, \sigma) = \frac{1}{\sqrt{2\pi}} e^{\frac{-(x-\mu)^2}{2\sigma^2}} g(x,μ,σ)=2π1e2σ2−(x−μ)2
P ( x k ∣ c i ) = g ( x k , μ c i , σ c i ) P(x_k | c_i) = g(x_k, \mu_{c_i}, \sigma_{c_i}) P(xk∣ci)=g(xk,μci,σci)
只要计算出训练样本中各个类别中此特征项划分的各均值和标准差,带入上述公式即可得到需要的估计值。
3.2 需要注意的问题
1. Laplace校准
需要注意的是,若某个属性值在训练集中在某个类中没有出现过,则类条件概率
P
(
x
i
∣
y
)
P(x_i|y)
P(xi∣y)会等于零,导致练乘计算出的概率值为零。为了避免这个问题,在计算概率值时要进行平滑处理,常用拉普拉斯修正,避免因训练样本不充足导致概率估值为零的问题,对每个特征的出现数初始化为1,分母初始化为2,在训练集充分大时,修正过程所引入的额先验的影响也会变得可忽略,使得估计值逐渐趋向于实际概率值。
2. 取对数处理
联合概率的计算需要多个概率的乘积,概率值都在0-1之间,连乘操作可能会发生下溢出。取对数操作将连乘变为加法操作
I
n
(
a
∗
b
)
=
I
n
(
a
)
+
I
n
(
b
)
In(a*b) = In(a)+In(b)
In(a∗b)=In(a)+In(b) ,对数函数与原函数单调性一致不会产生任何损失
3.3. 优点
- 非常容易建立,并且能够很快作出决策。当有新增样本数据时,仅对新样本属性值所涉及的概率估值进行修正即可实现增量学习。
- 计算简单
- 可处理多类别数据
- 决策结果很容易解释
- 常用于文本分类
- 在进行其他复杂的分类技术前可以先应用朴素贝叶斯分类。
3.4 缺点
- 准确性降低(假设不成立)
- 不适用于特征之间相关的情况
4.使用朴素贝叶斯进行分类
4.1 数据集
Most Popular Data Set中的wine数据集,这是对意大利同一地区声场的三种不同品种的酒做大量分析所得出的数据;数据下载地址:https://archive.ics.uci.edu/ml/datasets/wine 该数据是一个多类别数据,一共包含三类。
可以看出该数据没有缺失项,其中第一列代表数据的类别,标签分为为1,2,3.每类数据分别有58, 71, 48个。下面给出算法的具体代码: