文章首发于 朴素贝叶斯分类器详解 | 隐舍
分类问题定义
已知集合: C = { y 1 , y 2 , . . . , y n } C=\{y_1, y_2, ..., y_n\} C={y1,y2,...,yn}和 I = { x 1 , x 2 , . . . , x m } I=\{x_1, x_2, ..., x_m\} I={x1,x2,...,xm},确定映射规则 y = f ( x ) y=f(x) y=f(x), 使得任意 x i ∈ I x_i\in I xi∈I 有且仅有一个 y j ∈ C y_j\in C yj∈C使得 y j = f ( x i ) y_j=f(x_i) yj=f(xi)成立。
贝叶斯定理
条件概率: P ( A ∣ B ) P(A|B) P(A∣B)表示事件B发生的前提下事件A发生的概率——条件概率。计算方式: P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B)=\frac{P(AB)}{P(B)} P(A∣B)=P(B)P(AB)
贝叶斯定理定义如下:
P
(
B
∣
A
)
=
P
(
A
∣
B
)
P
(
B
)
P
(
A
)
P(B|A)=\frac{P(A|B)P(B)}{P(A)}
P(B∣A)=P(A)P(A∣B)P(B)
朴素贝叶斯分类
定义如下:
- 设 x = { a 1 , a 2 , . . . , a m } x=\{a_1, a_2, ..., a_m\} x={a1,a2,...,am}为一个待分类项, a i a_i ai为 x x x的一个特征属性。
- 有类别集合 C = { y 1 , y 2 , . . . , y n } C=\{y_1, y_2, ..., y_n\} C={y1,y2,...,yn}.
- 计算 P ( y 1 ∣ x ) , P ( y 2 ∣ x ) , . . . , P ( y n ∣ x ) P(y_1|x), P(y_2|x), ..., P(y_n|x) P(y1∣x),P(y2∣x),...,P(yn∣x).
- 如果 P ( y k ∣ x ) = m a x { P ( y 1 ∣ x ) , P ( y 2 ∣ x ) , . . . , P ( y n ∣ x ) } P(y_k|x)=max\{P(y_1|x), P(y_2|x), ..., P(y_n|x)\} P(yk∣x)=max{P(y1∣x),P(y2∣x),...,P(yn∣x)}, 则 x ∈ y k x\in y_k x∈yk
主要过程在于如何计算第三步中的条件概率,如下:
- 找到一个已知分类的待分类项集合,此集合为训练集。
- 统计各个类别下各个特征属性的条件概率估计,即:
P ( a 1 ∣ y 1 ) , P ( a 2 ∣ y 1 ) , … , P ( a m ∣ y 1 ) ; P ( a 1 ∣ y 2 ) , P ( a 2 ∣ y 2 ) , … , P ( a m ∣ y 2 ) ; … , P ( a 1 ∣ y n ) , P ( a 2 ∣ y n ) , … , P ( a m ∣ y n ) P\left(a_{1} | y_{1}\right), P\left(a_{2} | y_{1}\right), \ldots, P\left(a_{m} | y_{1}\right) ; P\left(a_{1} | y_{2}\right), P\left(a_{2} | y_{2}\right), \ldots, P\left(a_{m} | y_{2}\right) ; \ldots, P\left(a_{1} | y_{n}\right), P\left(a_{2} | y_{n}\right), \ldots, P\left(a_{m} | y_{n}\right) P(a1∣y1),P(a2∣y1),…,P(am∣y1);P(a1∣y2),P(a2∣y2),…,P(am∣y2);…,P(a1∣yn),P(a2∣yn),…,P(am∣yn) - 如果各个特征属性是条件独立的,根据贝叶斯定理,可以进行以下推导:
P ( y i ∣ x ) = P ( x ∣ y i ) P ( y i ) P ( x ) P\left(y_{i} | x\right)=\frac{P\left(x | y_{i}\right) P\left(y_{i}\right)}{P(x)} P(yi∣x)=P(x)P(x∣yi)P(yi)
因为分母对于所有类别为常数,因为我们只要将分子最大化皆可。又因为各特征属性是条件独立的,所以有:
P ( x ∣ y i ) P ( y i ) = P ( a 1 ∣ y i ) P ( a 2 ∣ y i ) … P ( a m ∣ y i ) P ( y i ) = P ( y i ) ∏ j = 1 m P ( a j ∣ y i ) P\left(x | y_{i}\right) P\left(y_{i}\right)=P\left(a_{1} | y_{i}\right) P\left(a_{2} | y_{i}\right) \ldots P\left(a_{m} | y_{i}\right) P\left(y_{i}\right)=P\left(y_{i}\right) \prod_{j=1}^{m} P\left(a_{j} | y_{i}\right) P(x∣yi)P(yi)=P(a1∣yi)P(a2∣yi)…P(am∣yi)P(yi)=P(yi)j=1∏mP(aj∣yi)
存在的问题
-
特征属性为离散值时可以直接统计计算,当属性特征为连续值时如何处理?
当特征属性为连续值时,通常假定其值服从高斯分布(也称正态分布)。即:
g ( x , η , σ ) = 1 2 π σ e − ( x − η ) 2 2 σ 2 g(x, \eta, \sigma)=\frac{1}{\sqrt{2 \pi} \sigma} e^{-} \frac{(x-\eta)^{2}}{2 \sigma^{2}} g(x,η,σ)=2πσ1e−2σ2(x−η)2
则条件概率为:
P ( a k ∣ y i ) = g ( a k , η y i , σ y i ) P\left(a_{k} | y_{i}\right)=g\left(a_{k}, \eta_{y_{i}}, \sigma_{y_{i}}\right) P(ak∣yi)=g(ak,ηyi,σyi) -
当训练样本中某个类别没出现过某种特征, P ( a i ∣ y k ) = 0 P\left(a_i | y_k\right)=0 P(ai∣yk)=0?
解决这个问题的办法是给每个特征和类别的组合加上给定个数的虚假样本(“hallucinated” examples)。
假设特征 a i a_i ai 的取值有 J J J个,并假设为每个 x i x_i xi 对应的概率增加 s s s个虚假样本,这样得到的估计称为平滑估计(smoothed estimate):
P ^ ( X i = x i ∣ C = c k ) = P { X i = x i ∧ C = c k } + s P { C = c k } + s J \hat{P}\left(X_{i}=x_{i} | C=c_{k}\right)=\frac{P\left\{X_{i}=x_{i} \wedge C=c_{k}\right\}+s}{P\left\{C=c_{k}\right\}+s J} P^(Xi=xi∣C=ck)=P{C=ck}+sJP{Xi=xi∧C=ck}+s
特别的,当 s = 1 s=1 s=1时,上述平滑称为拉普拉斯平滑(Laplace smoothing)。 -
为何假设属性之间条件独立?
减少模型参数量,否则贝叶斯定理不成立。
算法参考: https://wizardforcel.gitbooks.io/dm-algo-top10/content/naive-bayes.html