机器学习——贝叶斯分类器
1、贝叶斯决策论
贝叶斯决策论是概率框架下实施决策的基本方法。对分类任务来说,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些概率和误判损失来选择最优的类别标记。
假设有N种可能的类别标记,即 γ = { c 1 , c 2 , . . . , c N } \gamma =\{c_1,c_2,...,c_N\} γ={c1,c2,...,cN}, λ i j \lambda_{ij} λij是将一个真实标记为 c i c_i ci的样本误分类为 c j c_j cj所产生的的损失。基于后验概率 P ( c i ∣ x ) P(c_i|x) P(ci∣x)可获得将样本x分类为 c j c_j cj所产生的期望损失,即在样本x上的“条件风险” R ( c i ∣ x ) = ∑ j = 1 N λ i j P ( c j ∣ x ) R(c_i|x)=\sum_{j=1}^N\lambda_{ij}P(c_j|x) R(ci∣x)=j=1∑NλijP(cj∣x)我的理解是对于某一个样本,总共可以预测为N种不同的类别,预测为每种类别的概率为 P ( c n ∣ x ) P(c_n|x) P(cn∣x),其中只有一种类别为正确的类别,其余的N-1种为错误预测。期望损失就是求损失的平均,也就是预测错误的代价,现在知道预测错误的每一种代价为 λ i j \lambda_{ij} λij和对应的预测错误的概率 P ( c j ∣ x ) P(c_j|x) P(cj∣x),这样就可以得到期望损失。
我们的任务是寻找一个判定准则 h : χ → γ h:\chi \rightarrow\gamma h:χ→γ以最小化总体风险: R ( h ) = E x [ R ( h ( x ) ∣ x ) ] R(h)=E_x[R(h(x)|x)] R(h)=Ex[R(h(x)∣x)]显然,对每个样本x,若h能最小化条件风险 R ( h ( x ) ∣ x ) R(h(x)|x) R(h(x)∣x),则总体风险 R ( h ) R(h) R(h)也将被最小化,这就产生了贝叶斯判定准则:为最小化总体风险,只需在每个样本上选择能使条件风险 R ( c ∣ x ) R(c|x) R(c∣x)最小的类别标记,即: h ∗ ( x ) = a r g m i n c ∈ γ R ( c ∣ x ) h^*(x)=argmin_{c\in \gamma}R(c|x) h∗(x)=argminc∈γR(c∣x)此时, h ∗ h^* h∗称为贝叶斯最优分类器,与之对应的总体风险 R ( h ∗ ) R(h^*) R(h∗)称为贝叶斯风险。
与之对应, 1 − R ( h ∗ ) 1-R(h^*) 1−R(h∗)反映了分类器所能达到的最好性能,即通过机器学习所能产生的模型精度的理论上限。
具体来说,若目标是最小化分类错误,则误判损失 λ i j \lambda_{ij} λij可写为: λ i j = { 0 , i f i = j 1 , o t h e r w i s e \lambda_{ij}=\left\{\begin{matrix} 0, if\space \space\space \space\space \space i=j\\ 1,otherwise \end{matrix}\right. λij={0,if i=j1,otherwise此时条件风险为 R ( c ∣ x ) = 1 − P ( c ∣ x ) R(c|x)=1-P(c|x) R(c∣x)=1−P(c∣x)公式中的 P ( c ∣ x ) P(c|x) P(c∣x)是x被正确预测的概率,当正确预测的概率越大,则风险越小,也就是损失越小。
于是最小化分类错误率的贝叶斯最优分类器为 h ∗ ( x ) = a r g m a x c ∈ λ P ( c ∣ x ) h^*(x)=argmax_{c\in\lambda}P(c|x) h∗(x)=argmaxc∈λP(c∣x)即对每个样本x,选择能使后验概率 P ( c ∣ x ) P(c|x) P(c∣x)最大的类别标记。
要使用贝叶斯判定准则来最小化决策风险,首先要获得后验概率 P ( c ∣ x ) P(c|x) P(c∣x),这在现实人物中通常很难直接获得。从这个角度看,机器学习所要实现的是基于有限的训练样本尽可能准确地评估出后验概率 P ( c ∣ x ) P(c|x) P(c∣x)。
大体上来讲,主要有两种策略:
- 给定x,可通过直接建模 P ( c ∣ x ) P(c|x) P(c∣x)来预测c,这样得到的是“判别式模型”;
- 先对联合概率分布 P ( x , c ) P(x,c) P(x,c)建模,然后再由此获得 P ( c ∣ x ) P(c|x) P(c∣x),这样得到的是“生成式模型”;
对生成式模型来说,必然考虑: P ( c ∣ x ) = P ( x , c ) P ( x ) P(c|x)=\frac{P(x,c)}{P(x)} P(c∣x)=P(x)P(x,c)基于贝叶斯定理, P ( c ∣ x ) P(c|x) P(c∣x)可写为 P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) P(c|x)=\frac{P(c)P(x|c)}{P(x)} P(c∣x)=P(x)P(c)P(x∣c)其中, P ( c ) P(c) P(c)是类先验概率, P ( x ∣ c ) P(x|c) P(x∣c)是样本x相对于类标记c的类条件概率,或称为似然, P ( x ) P(x) P(x)是用于归一化的证据因子。
对于给定样本x,证据因子 P ( x ) P(x) P(x)与类标记无关,因此估计P(c|x)的问题就转化为如何基于训练数据D来估计先验 P ( c ) P(c) P(c)和似然 P ( x ∣ c ) P(x|c) P(x∣c)。
类先验概率 P ( c ) P(c) P(c)表达了样本空间中各类样本所占的比例,根据大数定律,当训练样本包含充足的独立同分布样本时, P ( c ) P(c) P(c)可通过各类样本出现的频率来进行估计。
对于类条件概率 P ( x ∣ c ) P(x|c) P(x∣c)来说,由于它涉及关于x所有属性的联合概率,直接根据样本出现的概率来估计将会遭到严重的困难。例如,假设样本的d个属性都是二值的,则样本空间将有 2 d 2^d 2d种可能的取值。在现实应用中,这个值往往远大于训练样本数m,也就是说,很多样本取值在训练集中根本没有出现,直接使用频率来估计 P ( x ∣ c ) P(x|c) P(x∣c)显然不可行,因为“未被观测到”与“出现概率为零”通常是不同的。
2、朴素贝叶斯分类器
基于贝叶斯公式来估计后验概率 P ( c ∣ x ) P(c|x) P(c∣x)的主要困难在于:类条件概率 P ( x ∣ c ) P(x|c) P(x∣c)是所有属性上的联合概率,难以从有限的训练样本直接估计而得。为避免这个障碍,朴素贝叶斯分类器采用了“属性条件独立性假设”:对于已知类别,假设所有属性相互独立,换言之,假设每种属性独立地对分类结果发生影响。
上面这段话,可以用一个例子说明,假设现在训练数据有3个特征 { x 1 , x 2 , x 3 } \{x_1,x_2,x_3\} {x1,x2,x3},每个特征中的类别都为2,那么一共有8种特征组合,当使用传统的贝叶斯公式计算后验概率的时候,需要训练样本中出现这八种训练数据才能有效计算其概率。
但如果是使用朴素贝叶斯概率公式,则只要分别计算 P ( x 1 ∣ c ) P(x_1|c) P(x1∣c)和 P ( x 2 ∣ c ) P(x_2|c) P(x2∣c)和 P ( x 3 ∣ c ) P(x_3|c) P(x3∣c)就可以计算 P ( x ∣ c ) P(x|c) P(x∣c),不用训练数据中一定要出现特定特征组合的训练样本。
因此,基于属性条件独立性假设,有: P ( c ∣ x ) = P ( c ) P ( x ∣ c ) P ( x ) = P ( c ) P ( x ) ∏ i = 1 d P ( x i ∣ c ) P(c|x)=\frac{P(c)P(x|c)}{P(x)}=\frac{P(c)}{P(x)}\prod _{i=1}^dP(x_i|c) P(c∣x)=P(x)P(c)P(x∣c)=P(x)P(c)i=1∏dP(xi∣c)其中d为属性数目,x_i为x在第i个属性上的取值。由于对所有类别来说 P ( x ) P(x) P(x)相同,因此基于上式的贝叶斯判定准则为: h n b ( x ) = a r g m a x c ∈ γ P ( c ) ∏ i = 1 d P ( x i ∣ c ) h_{nb}(x)=argmax_{c\in \gamma}P(c)\prod_{i=1}^dP(x_i|c) hnb(x)=argmaxc∈γP(c)i=1∏dP(xi∣c)这就是朴素贝叶斯分类器的表达式。
朴素贝叶斯分类器的训练过程就是基于训练集D来估计类先验概率 P ( c ) P(c) P(c),并为每个属性估计条件概率 P ( x i ∣ c ) P(x_i|c) P(xi∣c)。
令 D c D_c Dc表示训练集D中第c类样本组成的集合,若有充足的独立同分布样本,则可以容易地估计出类先验概率: P ( c ) = ∣ D c ∣ ∣ D ∣ P(c)=\frac{|D_c|}{|D|} P(c)=∣D∣∣Dc∣对于离散属性而言,令 D c , x i D_{c,x_i} Dc,xi表示 D c D_c Dc中在第i个属性上取值为 x i x_i xi的样本组成的集合,则条件概率 P ( x i ∣ c ) P(x_i|c) P(xi∣c)可估计为 P ( x i ∣ c ) = ∣ D c , x i ∣ ∣ D c ∣ P(x_i|c)=\frac{|D_{c,x_i}|}{|D_c|} P(xi∣c)=∣Dc∣∣Dc,xi∣对连续属性可考虑概率密度函数,假定 P ( x i ∣ c ) ∼ N ( μ c , i , σ c , i 2 ) P(x_i|c) \sim N(\mu_{c,i},\sigma^2_{c,i}) P(xi∣c)∼N(μc,i,σc,i2),其中 μ c , i \mu_{c,i} μc,i和 σ c , i 2 \sigma_{c,i}^2 σc,i2分别是第c类样本在第i个属性上取值的均值和方差,则有 P ( x i ∣ c ) = 1 2 π σ c , i e x p ( − ( x i − μ c , i ) 2 2 σ c , i 2 ) P(x_i|c)=\frac{1}{\sqrt{2\pi}\sigma_{c,i}}exp(-\frac{(x_i-\mu_{c,i})^2}{2\sigma^2_{c,i}}) P(xi∣c)=2πσc,i1exp(−2σc,i2(xi−μc,i)2)意思就是假设数据符合正态分布,然后使用训练数据中属于c类的数据来获得均值和标准差得到概率密度函数。
2.1 朴素贝叶斯理论基础
朴素贝叶斯模型在对未知类别的样本进行预测时具有几大优点,首先在算法运行过程中简单而高效;其次算法拥有古典概率的理论支撑,分类效率稳定;最后算法对缺失数据和异常数据不太敏感。
同时缺点也是存在的,例如模型的判断结果依赖于先验概率,所以分类结果存在一定的错误率;对输入的自变量X要求具有相同的特征(如变量均为数值型或离散型或0-1型);模型的前提假设在实际应用中很难满足等。
先回顾一下概率论与数理统计中的条件概率和全概率公式: P ( B ∣ A ) = P ( A B ) P ( A ) P(B|A)=\frac{P(AB)}{P(A)} P(B∣A)=P(A)P(AB)如上等式为条件概率的计算公式,表示在已知事件A的情况下事件B发生的概率,其中 P ( A B ) P(AB) P(AB)表示事件A与事件B同时发生的概率。所以,根据条件概率公式得到概率的乘法公式: P ( A B ) = P ( A ) P ( B ∣ A ) P(AB)=P(A)P(B|A) P(AB)=P(A)P(B∣A)全概率公式表示为: P ( A ) = ∑ i = 1 n P ( A B i ) = ∑ i = 1 n P ( B i ) P ( A ∣ B i ) P(A)=\sum_{i=1}^nP(AB_i)=\sum_{i=1}^nP(B_i)P(A|B_i) P(A)=i=1∑nP(ABi)=i=1∑nP(Bi)P(A∣Bi)其中事件 B 1 , B 2 , . . . , B n B_1,B_2,...,B_n B1,B2,...,Bn构成了一个完备的事件组,并且每一个 P ( B i ) P(B_i) P(Bi)均大于0。该公式表示,对于任意一个事件A来说,都可以表示成n个完备事件组与其乘积的和。
在具备上述的基础指点之后,来看看贝叶斯公式,贝叶斯公式的核心就是在已知X的情况下,计算样本属于某个类别的概率,故这个条件概率的计算可以表示为: P ( C i ∣ X ) = P ( C i X ) P ( X ) = P ( C i ) P ( X ∣ C i ) ∑ i = 1 k P ( C i ) P ( X ∣ C i ) P(C_i|X)=\frac{P(C_iX)}{P(X)}=\frac{P(C_i)P(X|C_i)}{\sum_{i=1}^kP(C_i)P(X|C_i)} P(Ci∣X)=P(X)P(CiX)=∑i=1kP(Ci)P(X∣Ci)P(Ci)P(X∣Ci)其中, C i C_i Ci表示样本所属的某个类别。假设数据集的因变量y一共包含k个不同的类别。对于上面的条件概率公式而言,样本最终属于哪个类别 C i C_i Ci,应该将计算所得的最大概率值 P ( C i ∣ X ) P(C_i|X) P(Ci∣X)对应的类别作为样本的最终分类,所以上式可以表示为: y = f ( X ) = P ( C i ∣ X ) = a r g m a x P ( C i ) P ( X ∣ C i ) ∑ i = 1 k P ( C i ) P ( X ∣ C i ) y=f(X)=P(C_i|X)=argmax\frac{P(C_i)P(X|C_i)}{\sum_{i=1}^kP(C_i)P(X|C_i)} y=f(X)=P(Ci∣X)=argmax∑i=1kP(Ci)P(X∣Ci)P(Ci)P(X∣Ci)如上公式所示,对于已知的X,朴素贝叶斯分类器就是计算样本在各分类器中的最大概率值。接下来详细拆解公式中的每一个部分,为获得条件概率的最大值,寻找最终的影响因素。
分母 P ( X ) = ∑ i = 1 k P ( C i ) P ( X ∣ C i ) P(X)=\sum_{i=1}^kP(C_i)P(X|C_i) P(X)=∑i=1kP(Ci)P(X∣Ci)是一个常量,它与样本属于哪个类别没有直接关系,所以计算 P ( C i ∣ X ) P(C_i|X) P(Ci∣X)的最大值就变换成了计算分子的最大值,即 a r g m a x P ( C i ) P ( X ∣ C i ) argmaxP(C_i)P(X|C_i) argmaxP(Ci)P(X∣Ci)。如果分子中的 P ( C i ) P(C_i) P(Ci)项未知的话,一般会假设每个类别出现的概率相等,只需计算 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)的最大值,然而在绝大多数情况下, P ( C i ) P(C_i) P(Ci)是已知的,它以训练数据集中类别 C i C_i Ci的频率作为先验概率,可以表示为 N C i / N N_{C_i}/N NCi/N。
所以,现在的主要任务是计算 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)的值,即已知某个类别的情况下自变量X为某种值的概率。假设数据集中一共包含p个自变量,则X可以表示成 ( x 1 , x 2 , . . . , x p ) (x_1,x_2,...,x_p) (x1,x2,...,xp),进而条件概率 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)可以表示为 P ( X ∣ C i ) = P ( x 1 , x 2 , . . . , x p ∣ C i ) P(X|C_i)=P(x_1,x_2,...,x_p|C_i) P(X∣Ci)=P(x1,x2,...,xp∣Ci)很显然,条件联合概率值的计算还是比较复杂的,尤其是当数据集的自变量个数非常多的时候。为了使分类器在计算过程中提高速度,提出了一个假设前提,即自变量是条件独立的(自变量之间不存在相关性),所以上面的计算公式可以重新改写为: P ( X ∣ C i ) = P ( x 1 , x 2 , . . . , x p ∣ C i ) = P ( x 1 ∣ C i ) P ( x 2 ∣ C i ) . . . P ( x p ∣ C i ) P(X|C_i)=P(x_1,x_2,...,x_p|C_i)=P(x_1|C_i)P(x_2|C_i)...P(x_p|C_i) P(X∣Ci)=P(x1,x2,...,xp∣Ci)=P(x1∣Ci)P(x2∣Ci)...P(xp∣Ci)如上式所示,将条件联合概率转换成各条件概率的乘积,进而可以大大降低概率值 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)的运算时长。但问题是,在很多实际项目的数据集中,很难保证自变量之间满足独立的假设条件。根据这条假设,可以得到一般性的结论,即自变量之间的独立性越强,贝叶斯分类器的效果就越好;如果自变量之间存在相关性,就会在一定程度提高贝叶斯分类器的错误率,但通常情况下,贝叶斯分类器的效果不会低于决策树。
3、几种贝叶斯模型
上面提过,朴素贝叶斯网络的自变量X的数据类型可以是连续的数值型,也可以是离散的字符型,或者是仅含有0-1两种值的二元类型。通常会根据不同的数据类型选择不同的贝叶斯分类器。例如高斯贝叶斯分类器、多项式贝叶斯分类器和伯努利贝叶斯分类器。下面将结合案例详细介绍这几种分类器的使用方法。
3.1 高斯贝叶斯分类器(自变量为连续型)
如果数据集中的自变量X均为连续的数值型,则在计算 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)时会假设自变量X服从高斯正态分布,所以自变量X的条件概率可以表示成: P ( x j ∣ C i ) = 1 2 π σ j , i e x p ( − ( x j − μ j , i ) 2 2 σ j , i 2 ) P(x_j|C_i)=\frac{1}{\sqrt{2\pi}\sigma_{j,i}}exp(-\frac{(x_j-\mu_{j,i})^2}{2\sigma^2_{j,i}}) P(xj∣Ci)=2πσj,i1exp(−2σj,i2(xj−μj,i)2)其中, x j x_{j} xj表示第j个自变量的取值, μ j i \mu_{ji} μji为训练数据集中自变量 x j x_j xj属性属于类别 C i C_i Ci的均值, σ j i \sigma_{ji} σji为训练数据集中自变量 X j X_j Xj属于类别 C i C_i Ci的标准差。所以,在已知均值 μ j i \mu_{ji} μji和标准差 σ j i \sigma_{ji} σji时,就可以利用如上的公式计算自变量 x j x_j xj取某种值的概率。
下面通过一个例子理解高斯贝叶斯分类的计算过程,这里虚拟一个数据集,并通过手工的方式计算某个新样本属于各个类别的概率值。
如下表所示,假设某金融公司是否愿意给客户放贷会优先考虑两个因素,分别是年龄和收入。现在根据已知的数据信息考察一位新客户,他的年龄为24岁,并且收入为8500元,请问该公司是否愿意给客户放贷?
Age | Income | Loan |
---|---|---|
23 | 8000 | 1 |
27 | 12000 | 1 |
25 | 6000 | 0 |
21 | 6500 | 0 |
32 | 15000 | 1 |
45 | 10000 | 1 |
18 | 4500 | 0 |
22 | 7500 | 1 |
23 | 6000 | 0 |
20 | 6500 | 0 |
手工计算 P ( C i ∣ X ) P(C_i|X) P(Ci∣X)的步骤如下:
(1)因变量各类别概率:
P
(
l
o
a
n
=
0
)
=
5
/
10
=
0.5
P(loan=0)=5/10=0.5
P(loan=0)=5/10=0.5
P
(
l
o
a
n
=
1
)
=
5
/
10
=
0.5
P(loan=1)=5/10=0.5
P(loan=1)=5/10=0.5
(2)均值:
μ
a
g
e
0
=
21.40
\mu_{age_0}=21.40
μage0=21.40
μ
a
g
e
1
=
29.8
\mu_{age_1}=29.8
μage1=29.8
μ
i
n
c
o
m
e
0
=
5900
\mu_{income_0}=5900
μincome0=5900
μ
i
n
c
o
m
e
1
=
10500
\mu_{income_1}=10500
μincome1=10500
(3)标准差:
σ
a
g
e
0
=
2.42
\sigma_{age_0}=2.42
σage0=2.42
σ
a
g
e
1
=
8.38
\sigma_{age_1}=8.38
σage1=8.38
σ
i
n
c
o
m
e
0
=
734.85
\sigma_{income_0}=734.85
σincome0=734.85
σ
i
n
c
o
m
e
1
=
2576.81
\sigma_{income_1}=2576.81
σincome1=2576.81
(4)单变量条件概率:
P
(
A
g
e
=
24
∣
l
o
a
n
=
0
)
=
1
2
π
∗
2.42
e
x
p
(
−
(
24
−
21.4
)
2
2
∗
2.4
2
2
)
=
0.0926
P(Age=24|loan=0)=\frac{1}{\sqrt{2\pi}*2.42}exp(-\frac{(24-21.4)^2}{2*2.42^2})=0.0926
P(Age=24∣loan=0)=2π∗2.421exp(−2∗2.422(24−21.4)2)=0.0926
P
(
A
g
e
=
24
∣
l
o
a
n
=
1
)
=
1
2
π
∗
8.38
e
x
p
(
−
(
24
−
29.8
)
2
2
∗
8.3
8
2
)
=
0.0375
P(Age=24|loan=1)=\frac{1}{\sqrt{2\pi}*8.38}exp(-\frac{(24-29.8)^2}{2*8.38^2})=0.0375
P(Age=24∣loan=1)=2π∗8.381exp(−2∗8.382(24−29.8)2)=0.0375
P
(
I
n
c
o
m
e
=
8500
∣
l
o
a
n
=
0
)
=
1
2
π
∗
734.85
e
x
p
(
−
(
8500
−
5900
)
2
2
∗
734.8
5
2
)
=
1.0384
∗
1
0
−
6
P(Income=8500|loan=0)=\frac{1}{\sqrt{2\pi}*734.85}exp(-\frac{(8500-5900)^2}{2*734.85^2})=1.0384*10^{-6}
P(Income=8500∣loan=0)=2π∗734.851exp(−2∗734.852(8500−5900)2)=1.0384∗10−6
P
(
I
n
c
o
m
e
=
8500
∣
l
o
a
n
=
1
)
=
1
2
π
∗
2576.81
e
x
p
(
−
(
8500
−
10500
)
2
2
∗
2576.8
1
2
)
=
1.145
6
−
4
P(Income=8500|loan=1)=\frac{1}{\sqrt{2\pi}*2576.81}exp(-\frac{(8500-10500)^2}{2*2576.81^2})=1.1456^{-4}
P(Income=8500∣loan=1)=2π∗2576.811exp(−2∗2576.812(8500−10500)2)=1.1456−4
(5)贝叶斯后验概率
P
(
l
o
a
n
=
0
∣
A
g
e
=
24
,
I
n
c
o
m
e
=
8500
)
=
P
(
l
o
a
n
=
0
)
∗
P
(
A
g
e
=
24
∣
l
o
a
n
=
0
)
∗
P
(
I
n
c
o
m
e
=
8500
∣
l
o
a
n
=
0
)
=
4.8079
∗
1
0
−
8
P(loan=0|Age=24,Income=8500)=P(loan=0)*P(Age=24|loan=0)*P(Income=8500|loan=0)=4.8079*10^{-8}
P(loan=0∣Age=24,Income=8500)=P(loan=0)∗P(Age=24∣loan=0)∗P(Income=8500∣loan=0)=4.8079∗10−8
P
(
l
o
a
n
=
1
∣
A
g
e
=
24
,
I
n
c
o
m
e
=
8500
)
=
P
(
l
o
a
n
=
1
)
∗
P
(
A
g
e
=
24
∣
l
o
a
n
=
1
)
∗
P
(
I
n
c
o
m
e
=
8500
∣
l
o
a
n
=
1
)
=
2.1479
∗
1
0
−
6
P(loan=1|Age=24,Income=8500)=P(loan=1)*P(Age=24|loan=1)*P(Income=8500|loan=1)=2.1479*10^{-6}
P(loan=1∣Age=24,Income=8500)=P(loan=1)∗P(Age=24∣loan=1)∗P(Income=8500∣loan=1)=2.1479∗10−6
通过上面的计算可知,当客户的年龄为24岁,并且收入为8500时,被预测为不放贷的概率小于放贷的概率,因此该金融公司决定给客户放贷。
高斯分类器的计算过程是比较简单的,其关键核心是假设数值型变量服从正态分布,如果实际数据近似服从正态分布,分类结果会更加准确。
sklearn模块提供了实现该分类器的计算功能,它就是naive_bayes子模块中的GaussianNB类。首先介绍一下该类的语法和参数函数:
GaussianNB(priors=None)
- priors:用于指定因变量各类别的先验概率,默认以数据集中的类别频率作为先验概率。
由于该类仅包含一个参数,且参数的默认值是以各类别的频率为先验概率,因此在调用GaussianNB类构造高斯贝叶斯分类器时,可以不传递任何参数值。
3.2 多项式贝叶斯分类器(自变量为离散型)
如果数据集中的自变量X均为离散型变量,就无法使用高斯贝叶斯分类器,而应该选择多项式贝叶斯分类器。在计算概率值
P
(
X
∣
C
i
)
P(X|C_i)
P(X∣Ci)时,会假设自变量X的条件概率满足多项式分布,故概率值
P
(
X
∣
C
i
)
P(X|C_i)
P(X∣Ci)的计算公式可以表示为:
P
(
x
j
=
x
j
k
∣
C
i
)
=
N
i
k
+
α
N
i
+
n
α
P(x_j=x_{jk}|C_i)=\frac{N_{ik}+\alpha}{N_i+n\alpha}
P(xj=xjk∣Ci)=Ni+nαNik+α其中,
x
j
k
x_{jk}
xjk表示自变量
x
j
x_j
xj的取值,
N
i
k
N_{ik}
Nik表示因变量为类别
C
i
C_i
Ci时自变量
x
j
x_j
xj
取
x
j
k
x_{jk}
xjk的样本个数;
N
i
N_i
Ni表示数据集中类别
C
i
C_i
Ci的样本个数;
α
\alpha
α为平滑系数,用于防止概率值取0的可能,通常将该值取值为1,表示对概率值做拉普莱斯平滑;n表示因变量的类别个数。
现在以一个例子进行说明:如下图所示,假设影响女孩是否参加相亲活动的重要因素有三个,分别是男孩的职业、受教育水平和收入状况;如果女孩参加相亲活动,则对应的Meet变量为1,否则为0。请问在给定的信息下,对于高收入的公务员,并且其学历为硕士的男生来说,女孩是否愿意参与他的相亲?接下来通过手动的方式,计算女生是否与该男生见面的概率。
Ocuupation | Edu | Income | Meet |
---|---|---|---|
公务员 | 本科 | 中 | 1 |
公务员 | 本科 | 低 | 1 |
非公务员 | 本科 | 中 | 0 |
非公务员 | 本科 | 高 | 1 |
公务员 | 硕士 | 中 | 1 |
非公务员 | 本科 | 低 | 0 |
公务员 | 本科 | 高 | 1 |
非公务员 | 硕士 | 低 | 0 |
非公务员 | 硕士 | 中 | 0 |
非公务员 | 硕士 | 高 | 1 |
(1)因变量各类别频率
P
(
M
e
e
t
=
0
)
=
0.4
P(Meet=0)=0.4
P(Meet=0)=0.4
P
(
M
e
e
t
=
1
)
=
0.6
P(Meet=1)=0.6
P(Meet=1)=0.6
(2)单变量条件概率
P
(
O
c
c
u
p
a
t
i
o
n
=
公
务
员
∣
M
e
e
t
=
0
)
=
1
/
6
P(Occupation=公务员|Meet=0)=1/6
P(Occupation=公务员∣Meet=0)=1/6
P
(
O
c
c
u
p
a
t
i
o
n
=
公
务
员
∣
M
e
e
t
=
1
)
=
5
/
8
P(Occupation=公务员|Meet=1)=5/8
P(Occupation=公务员∣Meet=1)=5/8
P
(
E
d
u
=
硕
士
∣
M
e
e
t
=
0
)
=
3
/
6
P(Edu=硕士|Meet=0)=3/6
P(Edu=硕士∣Meet=0)=3/6
P
(
E
d
u
=
硕
士
∣
M
e
e
t
=
1
)
=
3
/
8
P(Edu=硕士|Meet=1)=3/8
P(Edu=硕士∣Meet=1)=3/8
P
(
I
n
c
o
m
e
=
高
∣
M
e
e
t
=
0
)
=
1
/
6
P(Income=高|Meet=0)=1/6
P(Income=高∣Meet=0)=1/6
P
(
I
n
c
o
m
e
=
高
∣
M
e
e
t
=
1
)
=
4
/
8
P(Income=高|Meet=1)=4/8
P(Income=高∣Meet=1)=4/8
(3)贝叶斯后验概率
P
(
M
e
e
t
=
0
∣
O
c
c
u
p
a
t
i
o
n
=
公
务
员
,
E
d
u
=
硕
士
,
I
n
c
o
m
e
=
高
)
=
1
/
180
P(Meet=0|Occupation=公务员,Edu=硕士,Income=高)=1/180
P(Meet=0∣Occupation=公务员,Edu=硕士,Income=高)=1/180
P
(
M
e
e
t
=
1
∣
O
c
c
u
p
a
t
i
o
n
=
公
务
员
,
E
d
u
=
硕
士
,
I
n
c
o
m
e
=
高
)
=
18
/
256
P(Meet=1|Occupation=公务员,Edu=硕士,Income=高)=18/256
P(Meet=1∣Occupation=公务员,Edu=硕士,Income=高)=18/256
因此该女生会选择和男生进行相亲。需要注意的是,如果在某个类别样本中没有出现自变量 x j x_j xj取某种值的观测时,条件概率 P ( x j = x j k ∣ C i ) P(x_j=x_{jk}|C_i) P(xj=xjk∣Ci)就会变为0。例如,当因变量Meet为0时,自变量Occupation中没有取值为公务员的样本,所以就会导致单变量条件概率为0,进而使得 P ( C i ) P ( X ∣ C i ) P(C_i)P(X|C_i) P(Ci)P(X∣Ci)的概率为0。为了避免贝叶斯后验概率为0的情况,就会使用平滑系数 α \alpha α,这就是为什么自变量X的条件概率写成 P ( x j = x j k ∣ C i ) = N i k + α N i + n α P(x_j=x_{jk}|C_i)=\frac{N_{ik}+\alpha}{N_i+n\alpha} P(xj=xjk∣Ci)=Ni+nαNik+α的原因。
多项式贝叶斯分类器的计算过程也同样比较简单,可以使用python中sklearn的子模块naive_bayes模块,然后调用MultinomialNB类。有关该类的语法和参数含义如下:
MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
- alpha:用于指定平滑系数 α \alpha α的值,默认为1.0。
- fit_prior:bool类型参数,是否以数据集中各类别的比例作为 P ( C i ) P(C_i) P(Ci)的先验概率,默认为True。
- class_prior:用于人工指定各类别的先验概率 P ( C i ) P(C_i) P(Ci),如果指定该参数,则参数fit_prior不再有效。
3.3 伯努利贝叶斯分类器
当数据及中的自变量X均为0-1二元值时(例如在文本挖掘中,判断某个词语是否出现在句子中,出现用1表示,不出现用0表示),通常会优先选择伯努利贝叶斯分类器。利用该分类器计算概率值 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)时,会假设自变量X的条件满足伯努利分布,故概率值 P ( X ∣ C i ) P(X|C_i) P(X∣Ci)的计算公式可以表示为: P ( x j ∣ C i ) = p x j + ( 1 − p ) ( 1 − x j ) P(x_j|C_i)=px_j+(1-p)(1-x_j) P(xj∣Ci)=pxj+(1−p)(1−xj)其中, x j x_j xj为第j个自变量,取值为0或1;p表示类别为 C i C_i Ci时自变量取1的概率,该概率值可以使用经验频率代替,即 p = P ( X j = 1 ∣ C i ) = N x j + α N i + n α p=P(X_j=1|C_i)=\frac{N_{x_j}+\alpha}{N_i+n\alpha} p=P(Xj=1∣Ci)=Ni+nαNxj+α其中, N i N_i Ni表示类别 C i C_i Ci的样本个数: N x j N_{xj} Nxj表示在类别为 C i C_i Ci时, x j x_j xj变量取1的样本量; α \alpha α为平滑系数,同样是为了避免概率为0而设置的;n是因变量中的类别个数。
举一个通俗提懂的例子,说明伯努利贝叶斯分布器在文本分类中的应用。假设对10条评论数据做分词处理后,得到下面的文档词条矩阵,矩阵中含有5个词语和一个表示情感的结果。其中类别为0表示正面情绪,1表示负面情绪。如果一个用户的评论中仅包含“还行”一词,请问该用户属于哪种情绪?
x_1=推荐 | x_2=给力 | x_3=吐槽 | x_4=还行 | x_5=太烂 | 类别 |
---|---|---|---|---|---|
1 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 0 | 0 | 0 | 1 | 1 |
0 | 1 | 1 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 1 | 1 |
0 | 1 | 0 | 0 | 0 | 0 |
(1)因变量各类别概率
P
(
类
别
=
0
)
=
2
/
5
P(类别=0)=2/5
P(类别=0)=2/5
P
(
类
别
=
1
)
=
3
/
5
P(类别=1)=3/5
P(类别=1)=3/5
(2)单变量条件概率
P
(
x
1
=
0
∣
类
别
=
0
)
=
1
/
3
P(x_1=0|类别=0)=1/3
P(x1=0∣类别=0)=1/3
P
(
x
1
=
0
∣
类
别
=
1
)
=
5
/
8
P(x_1=0|类别=1)=5/8
P(x1=0∣类别=1)=5/8
P
(
x
2
=
0
∣
类
别
=
0
)
=
1
/
3
P(x_2=0|类别=0)=1/3
P(x2=0∣类别=0)=1/3
P
(
x
2
=
0
∣
类
别
=
1
)
=
5
/
8
P(x_2=0|类别=1)=5/8
P(x2=0∣类别=1)=5/8
P
(
x
3
=
0
∣
类
别
=
0
)
=
5
/
6
P(x_3=0|类别=0)=5/6
P(x3=0∣类别=0)=5/6
P
(
x
3
=
0
∣
类
别
=
1
)
=
1
/
4
P(x_3=0|类别=1)=1/4
P(x3=0∣类别=1)=1/4
P
(
x
4
=
1
∣
类
别
=
0
)
=
1
/
2
P(x_4=1|类别=0)=1/2
P(x4=1∣类别=0)=1/2
P
(
x
4
=
1
∣
类
别
=
1
)
=
1
/
8
P(x_4=1|类别=1)=1/8
P(x4=1∣类别=1)=1/8
P
(
x
5
=
0
∣
类
别
=
0
)
=
5
/
6
P(x_5=0|类别=0)=5/6
P(x5=0∣类别=0)=5/6
P
(
x
5
=
0
∣
类
别
=
1
)
=
1
/
4
P(x_5=0|类别=1)=1/4
P(x5=0∣类别=1)=1/4
(3)贝叶斯后验概率
P
(
类
别
=
0
∣
x
1
=
0
,
x
2
=
0
,
x
3
=
0
,
x
4
=
1
,
x
5
=
0
)
=
5
/
324
P(类别=0|x_1=0,x_2=0,x_3=0,x_4=1,x_5=0)=5/324
P(类别=0∣x1=0,x2=0,x3=0,x4=1,x5=0)=5/324
P
(
类
别
=
1
∣
x
1
=
0
,
x
2
=
0
,
x
3
=
0
,
x
4
=
1
,
x
5
=
0
)
=
3
/
4096
P(类别=1|x_1=0,x_2=0,x_3=0,x_4=1,x_5=0)=3/4096
P(类别=1∣x1=0,x2=0,x3=0,x4=1,x5=0)=3/4096因此根据贝叶斯后验概率最大原则则将该评论预判为正面情绪。
伯努利贝叶斯分类器的计算与多项式贝叶斯分类器的计算非常相似,在文本分类问题中,如果构造的数据集是关于词语出现的次数,通常会选择多项式贝叶斯分类器进行预测;如果构造的数据集是关于词语是否会出现的0-1值,则会选择伯努利贝叶斯分类器进行预测。当需要构造伯努利贝叶斯分类器时,可以直接调用sklearn子模块naive_bayes中的BernoulliNB类。有关该类的语法和参数含义如下:
BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
- alpha:用于指定平滑系数 α \alpha α,默认为1.0
- binarize:如果该参数为浮点型数据,则将以该值为界限,当自变量的值大于该值时,自变量的值将被转换为1,否则被转换为0;如果该参数为None时,则默认训练数据集的自变量均为0-1值;
- fit_prior:bool类型参数,是否以数据集中各类别的比例作为 P ( C i ) P(C_i) P(Ci)的先验概率,默认为True;
- class_prior:用于人工指定各类别的先验概率 P ( C i ) P(C_i) P(Ci),如果指定该参数,则参数fit_prior不再有效;
4、判别分析
本节将讨论在贝叶斯框架下,借助正态分布对数据建模。在学术上,这类模型被称为判别分析。与朴素贝叶斯相比,判别分析最大的改进在于它放弃了条件独立这个假设,允许变量之间存在关联关系,这使得它的适用场景更多。
判别分析主要包括两个模型:线性判别分析和二次判别分析。
4.1 线性判别分析
线性判别分析(Linear Discriminant Analysis,LDA)是解决分类问题的模型。与上面讨论的伯努利模型和多项式模型相反,它只能处理连续型变量。
为了数学上表述简洁,设训练数据只有两个自变量,记为 X = ( x 1 , x 2 ) X=(x_1,x_2) X=(x1,x2),而且数据类别也只有两个,记为y=0或者y=1。线性判别分析的数学假设如下: X ∣ y = 0 ∼ N ( μ 0 , Σ ) 表 示 l a b e l 为 0 的 数 据 分 布 X|y=0\sim N(\mu_0,\Sigma)\space\space表示label为0的数据分布 X∣y=0∼N(μ0,Σ) 表示label为0的数据分布 X ∣ y = 1 ∼ N ( μ 1 , Σ ) 表 示 l a b e l 为 1 的 数 据 分 布 X|y=1\sim N(\mu_1,\Sigma)\space\space表示label为1的数据分布 X∣y=1∼N(μ1,Σ) 表示label为1的数据分布公式中的 N ( μ , Σ ) N(\mu,\Sigma) N(μ,Σ)表示二元正态分布,其中 μ \mu μ是二维行向量表示分布的中心,而 Σ \Sigma Σ为 2 × 2 2×2 2×2的对称矩阵表示分布的协方差(有关协方差矩阵和协方差矩阵的理解,下面会涉及到)。根据上面的公式,有以下几点需要注意。
- 模型假设,在类别已知的条件下,自变量X服从正态分布,这就要求自变量表示的是一个能连续变化的量。有一些数值型变量(定量变量),或者说是离散变量,并不满足这样的条件,比如在一个文本里,每个文字出现的次数,它就不是一个连续变化的值。
- 模型假设,对于不同的类别,自变量的协方差是一样的,只是期望不一样。对于正态分布,协方差决定了分布的形状,而期望只决定分布的中心位置。因此从直观上可以这样理解,线性判别分析只区分各类别中心位置的差异,而不关心不同类别具体形状上的差异(事实上,模型假设不同类别的分布形状是一样的)。
- 数学上可以证明,若协方差 Σ \Sigma Σ是一个对角矩阵(也就是说除了对角线,其它元素都等于0),则自变量 x 1 x_1 x1和 x 2 x_2 x2是相互独立的。反之,则这两个变量是相互关联的。因此,线性判别分析并没有变量条件独立这个假设。
与朴素贝叶斯类似,数学上可以推导出线性判别分析模型参数的表达式,如下所示,其中m表示训练数据集的大小。 θ ^ l = 1 m Σ i = 1 m 1 y i = l \hat{\theta}_l=\frac{1}{m}\Sigma_{i=1}^m1_{y_i=l} θ^l=m1Σi=1m1yi=l μ ^ = Σ i = 1 m X i 1 y i = l Σ i = 1 m 1 y i = l \hat{\mu}=\frac{\Sigma_{i=1}^mX_i1_{y_i=l}}{\Sigma_{i=1}^m1_{y_i=l}} μ^=Σi=1m1yi=lΣi=1mXi1yi=l Σ ^ = 1 m ∑ i = 1 m ( X i − μ ^ y i ) T ( X i − μ ^ y i ) \hat{\Sigma}=\frac{1}{m}\sum_{i=1}^m(X_i-\hat{\mu}_{y_i})^T(X_i-\hat{\mu}_{y_i}) Σ^=m1i=1∑m(Xi−μ^yi)T(Xi−μ^yi)上面的公式表达的意义非常简单,对于数据分为 k > 2 k>2 k>2类的情况,结论类似。
- 对于参数 θ ^ l \hat{\theta}_l θ^l(被预测值y的概率分布),它等于各类别在训练数据中的占比;
- 对于参数 μ ^ \hat{\mu} μ^(各类别的中心位置),它等于训练数据里各个类别的平均值(自变量 X i X_i Xi的平均值);
- 对于矩阵参数 Σ \Sigma Σ(各变量的协方差),它等于各个类别内部协方差的加权平均,权重为类别内数据的个数;
这样我们就可以通过训练数据来得到线性判别分析的各个参数的值,其实就类似于朴素贝叶斯中基于训练数据来建立生成式模型。
4.1.1 协方差和协方差矩阵
(1)概念
协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
这个解释摘自维基百科,看起来很是抽象,不好理解。其实简单来讲,协方差就是衡量两个变量相关性的变量。当协方差为正时,两个变量呈正相关关系(同增同减);当协方差为负时,两个变量呈负相关关系(一增一减)。
而协方差矩阵,只是将所有变量的协方差关系用矩阵的形式表现出来而已。通过矩阵这一工具,可以更方便地进行数学运算。
(2)数学定义
回想概率统计里面关于方差的数学定义: Var ( X ) = ∑ i = 1 n ( x i − x ˉ ) ( x i − x ˉ ) n − 1 \operatorname{Var}(X)=\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(x_{i}-\bar{x}\right)}{n-1} Var(X)=n−1∑i=1n(xi−xˉ)(xi−xˉ)公式中的 x ˉ \bar{x} xˉ是数据的均值;
协方差的数学定义异曲同工: Cov ( X , Y ) = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) n − 1 \operatorname{Cov}(X, Y)=\frac{\sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)\left(y_{i}-\bar{y}\right)}{n-1} Cov(X,Y)=n−1∑i=1n(xi−xˉ)(yi−yˉ)这里的 X X X, Y Y Y 表示两个变量空间。用机器学习的话讲,就是样本有 x 和 y 两种特征,而 X X X 就是包含所有样本的 x 特征的集合, Y Y Y 就是包含所有样本的 y 特征的集合。
(3)协方差矩阵
- 两个变量的协方差矩阵
有了上面的数学定义后,我们可以来讨论协方差矩阵了。当然,协方差本身就能够处理二维问题,两个变量的协方差矩阵并没有实际意义,不过为了方便后面多维的推广,我们还是从二维开始。
用一个例子来解释会更加形象,假设我们有 4 个样本,每个样本都有两个变量,也就是两个特征,它们表示如下:
x
1
=
(
1
,
2
)
,
x
2
=
(
3
,
6
)
,
x
3
=
(
4
,
2
)
,
x
4
=
(
5
,
2
)
x_{1}=(1,2), x_{2}=(3,6), x_{3}=(4,2), x_{4}=(5,2)
x1=(1,2),x2=(3,6),x3=(4,2),x4=(5,2)用一个矩阵表示为:
Z
=
[
1
2
3
6
4
2
5
2
]
Z=\left[\begin{array}{ll}1 & 2 \\ 3 & 6 \\ 4 & 2 \\ 5 & 2\end{array}\right]
Z=⎣⎢⎢⎡13452622⎦⎥⎥⎤现在,我们用两个变量空间
X
X
X,
Y
Y
Y 来表示这两个特征:
X
=
[
1
3
4
5
]
,
Y
=
[
2
6
2
2
]
X=\left[\begin{array}{l}1 \\ 3 \\ 4 \\ 5\end{array}\right], \quad Y=\left[\begin{array}{l}2 \\ 6 \\ 2 \\ 2\end{array}\right]
X=⎣⎢⎢⎡1345⎦⎥⎥⎤,Y=⎣⎢⎢⎡2622⎦⎥⎥⎤由于协方差反应的是两个变量之间的相关性,因此,协方差矩阵表示的是所有变量之间两两相关的关系,具体来讲,一个包含两个特征的矩阵,其协方差矩阵应该有
2
×
2
2×2
2×2 大小:
Cov
(
Z
)
=
[
Cov
(
X
,
X
)
Cov
(
X
,
Y
)
Cov
(
Y
,
X
)
Cov
(
Y
,
Y
)
]
\operatorname{Cov}(Z)=\left[\begin{array}{cc}\operatorname{Cov}(X, X) & \operatorname{Cov}(X, Y) \\ \operatorname{Cov}(Y, X) & \operatorname{Cov}(Y, Y)\end{array}\right]
Cov(Z)=[Cov(X,X)Cov(Y,X)Cov(X,Y)Cov(Y,Y)]接下来,就来逐一计算
C
o
v
(
Z
)
Cov(Z)
Cov(Z) 的值。
首先,我们需要先计算出
X
X
X,
Y
Y
Y 两个特征空间的平均值:
x
ˉ
=
3.25
\bar{x}=3.25
xˉ=3.25,
y
ˉ
=
3
\bar{y}=3
yˉ=3。
然后,根据协方差的数学定义,计算协方差矩阵的每个元素:
Cov
(
X
,
X
)
=
(
1
−
3.25
)
2
+
(
3
−
3.25
)
2
+
(
4
−
3.25
)
2
+
(
5
−
3.25
)
2
4
−
1
=
2.9167
\operatorname{Cov}(X, X)=\frac{(1-3.25)^{2}+(3-3.25)^{2}+(4-3.25)^{2}+(5-3.25)^{2}}{4-1}=2.9167
Cov(X,X)=4−1(1−3.25)2+(3−3.25)2+(4−3.25)2+(5−3.25)2=2.9167
Cov
(
X
,
Y
)
=
(
1
−
3.25
)
(
2
−
3
)
+
(
3
−
3.25
)
(
6
−
3
)
+
(
4
−
3.25
)
(
2
−
3
)
+
(
5
−
3.25
)
(
2
−
3
)
4
−
1
=
−
0.3333
\operatorname{Cov}(X, Y)=\frac{(1-3.25)(2-3)+(3-3.25)(6-3)+(4-3.25)(2-3)+(5-3.25)(2-3)}{4-1}=-0.3333
Cov(X,Y)=4−1(1−3.25)(2−3)+(3−3.25)(6−3)+(4−3.25)(2−3)+(5−3.25)(2−3)=−0.3333
Cov
(
Y
,
X
)
=
(
2
−
3
)
(
1
−
3.25
)
+
(
6
−
3
)
(
3
−
3.25
)
+
(
2
−
3
)
(
4
−
3.25
)
+
(
2
−
3
)
(
5
−
3.25
)
4
−
1
=
−
0.3333
\operatorname{Cov}(Y, X)=\frac{(2-3)(1-3.25)+(6-3)(3-3.25)+(2-3)(4-3.25)+(2-3)(5-3.25)}{4-1}=-0.3333
Cov(Y,X)=4−1(2−3)(1−3.25)+(6−3)(3−3.25)+(2−3)(4−3.25)+(2−3)(5−3.25)=−0.3333
Cov
(
Y
,
Y
)
=
(
2
−
3
)
2
+
(
6
−
3
)
2
+
(
2
−
3
)
2
+
(
2
−
3
)
2
4
−
1
=
4
\operatorname{Cov}(Y, Y)=\frac{(2-3)^{2}+(6-3)^{2}+(2-3)^{2}+(2-3)^{2}}{4-1}=4
Cov(Y,Y)=4−1(2−3)2+(6−3)2+(2−3)2+(2−3)2=4所以协方差矩阵
Cov
(
Z
)
=
[
2.9167
−
0.3333
−
0.3333
4.000
]
\operatorname{Cov}(Z)=\left[\begin{array}{cc}2.9167 & -0.3333 \\ -0.3333 & 4.000\end{array}\right]
Cov(Z)=[2.9167−0.3333−0.33334.000]好了,虽然这只是一个二维特征的例子,但我们已经可以从中总结出协方差矩阵 Σ 的「计算套路」:
Σ
i
j
=
(
样
本
矩
阵
第
i
列
−
第
i
列
均
值
)
T
(
样
本
矩
阵
第
j
列
−
第
j
列
均
值
)
样
本
数
−
1
Σ_{ij}=\frac{(样本矩阵第i列−第i列均值)^T(样本矩阵第j列−第j列均值)}{样本数−1}
Σij=样本数−1(样本矩阵第i列−第i列均值)T(样本矩阵第j列−第j列均值)这里所说的样本矩阵可以参考上面例子中的
Z
Z
Z。
- 多个变量的协方差矩阵
接下来,就用上面推出的计算协方差矩阵的「普世规律」。,假设我们有三个样本: x 1 = ( 1 , 2 , 3 , 4 ) T , x 2 = ( 3 , 4 , 1 , 2 ) T , x 3 = ( 2 , 3 , 1 , 4 ) T x_{1}=(1,2,3,4)^{T}, \quad x_{2}=(3,4,1,2)^{T}, \quad x_{3}=(2,3,1,4)^{T} x1=(1,2,3,4)T,x2=(3,4,1,2)T,x3=(2,3,1,4)T同理我们将它们表示成样本矩阵: Z = [ 1 2 3 4 3 4 1 2 2 3 1 4 ] Z=\left[\begin{array}{llll}1 & 2 & 3 & 4 \\ 3 & 4 & 1 & 2 \\ 2 & 3 & 1 & 4\end{array}\right] Z=⎣⎡132243311424⎦⎤按照上面给出的计算套路,我们需要先计算出矩阵每一列的均值,从左到右分别为:2、3、1.67、3.33。然后按照上面讲到的公式,计算矩阵每个元素的值,对了,四个变量的协方差矩阵,大小为 4 × 4 4×4 4×4 : Σ 11 = ( 第 1 列 − 第 1 列 的 均 值 ) T ( 第 1 列 − 第 1 列 的 均 值 ) 样 本 数 − 1 = ( − 1 , 1 , 0 ) T ∗ ( − 1 , 1 , 0 ) 2 = 1 Σ_{11}=\frac{(第1列−第1列的均值)^T(第1列−第1列的均值)}{样本数−1}=\frac{(-1,1,0)^{T} *(-1,1,0)}{2}=1 Σ11=样本数−1(第1列−第1列的均值)T(第1列−第1列的均值)=2(−1,1,0)T∗(−1,1,0)=1(后面的依此类推…)
- 独立变量的协方差
以上的讨论都是针对一般情况进行计算的,毕竟变量互相独立的情况较少。不过,如果两个变量 X X X, Y Y Y独立,那么它们的协方差 C o v ( X , Y ) = 0 Cov(X,Y)=0 Cov(X,Y)=0。简要证明如下(简单起见,假设变量是离散的):
由于 X X X, Y Y Y 独立,所以它们的概率密度函数满足: p ( x , y ) = p x ( x ) p y ( y ) p(x,y)=p_x(x)p_y(y) p(x,y)=px(x)py(y)求出期望: E ( X Y ) = ∑ x ∑ y x × y × p ( x , y ) = ∑ x ∑ y x × y × p x ( x ) × p y ( y ) = ∑ x x × p x ( x ) ∑ y y × p y ( y ) = E ( X ) E ( Y ) \begin{aligned} E(X Y) &=\sum_{x} \sum_{y} x \times y \times p(x, y) \\ &=\sum_{x} \sum_{y} x \times y \times p_{x}(x) \times p_{y}(y) \\ &=\sum_{x} x \times p_{x}(x) \sum_{y} y \times p_{y}(y) \\ &=E(X) E(Y) \end{aligned} E(XY)=x∑y∑x×y×p(x,y)=x∑y∑x×y×px(x)×py(y)=x∑x×px(x)y∑y×py(y)=E(X)E(Y)
利用协方差的另一个公式: C o v ( X , Y ) = E ( X , Y ) − E ( X ) E ( Y ) Cov(X,Y)=E(X,Y)−E(X)E(Y) Cov(X,Y)=E(X,Y)−E(X)E(Y),可以推出,当 X X X, Y Y Y 相互独立时, C o v ( X , Y ) = 0 Cov(X,Y)=0 Cov(X,Y)=0。这时,协方差矩阵就变成一个对角矩阵了: Cov ( Z ) = [ Cov ( X , X ) 0 0 Cov ( Y , Y ) ] \operatorname{Cov}(Z)=\left[\begin{array}{cc}\operatorname{Cov}(X, X) & 0 \\ 0 & \operatorname{Cov}(Y, Y)\end{array}\right] Cov(Z)=[Cov(X,X)00Cov(Y,Y)]
- 协方差矩阵的作用
虽然我们已经知道协方差矩阵的计算方法了,但还有一个更重要的问题:协方差矩阵有什么作用?作为一种数学工具,协方差矩阵经常被用来计算特征之间的某种联系。在机器学习的论文中,协方差矩阵的出现概率还是很高的,用于降维的主成分分析法(PCA)就用到了协方差矩阵。另外,由于协方差矩阵是一个对称矩阵,因此它包含了很多很有用的性质,这也导致它受青睐的程度较高。
4.2 线性判别分析与逻辑回归的比较
有了线性判别分析的模型假设(上面提及): X ∣ y = 0 ∼ N ( μ 0 , Σ ) 表 示 l a b e l 为 0 的 数 据 分 布 X|y=0\sim N(\mu_0,\Sigma)\space\space表示label为0的数据分布 X∣y=0∼N(μ0,Σ) 表示label为0的数据分布 X ∣ y = 1 ∼ N ( μ 1 , Σ ) 表 示 l a b e l 为 1 的 数 据 分 布 X|y=1\sim N(\mu_1,\Sigma)\space\space表示label为1的数据分布 X∣y=1∼N(μ1,Σ) 表示label为1的数据分布,我们现在来看看这个模型的预测公式。根据贝叶斯框架的公式: P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) P(A|B)=\frac{P(B|A)P(A)}{P(B)} P(A∣B)=P(B)P(B∣A)P(A)线性判别分析的预测公式如下: P ( y = 1 ∣ X ) = P ( X ∣ y = 1 ) P ( y = 1 ) P ( X ∣ y = 0 ) P ( y = 0 ) + P ( X ∣ y = 1 ) P ( y = 1 ) P(y=1|X)=\frac{P(X|y=1)P(y=1)}{P(X|y=0)P(y=0)+P(X|y=1)P(y=1)} P(y=1∣X)=P(X∣y=0)P(y=0)+P(X∣y=1)P(y=1)P(X∣y=1)P(y=1)经过一系列的数学运算之后,可以得到: P ( y = 1 ∣ X ) = 1 ( 1 + e − X β ) P(y=1|X)=\frac{1}{(1+e^{-X\beta })} P(y=1∣X)=(1+e−Xβ)1这里给出推导的大概步骤:对公式中的分子分母同时除以 P ( X ∣ y = 1 ) P ( y = 1 ) P(X|y=1)P(y=1) P(X∣y=1)P(y=1),可以得到: P ( y = 1 ∣ X ) = 1 P ( X ∣ y = 0 ) P ( y = 0 ) P ( X ∣ y = 1 ) P ( y = 1 ) + 1 P(y=1|X)=\frac{1}{\frac{P(X|y=0)P(y=0)}{P(X|y=1)P(y=1)}+1} P(y=1∣X)=P(X∣y=1)P(y=1)P(X∣y=0)P(y=0)+11因此只需要证明 P ( X ∣ y = 0 ) P ( y = 0 ) P ( X ∣ y = 1 ) P ( y = 1 ) \frac{P(X|y=0)P(y=0)}{P(X|y=1)P(y=1)} P(X∣y=1)P(y=1)P(X∣y=0)P(y=0)可以写成 e − X β e^{-X\beta } e−Xβ的形式即可,为了推导方便,将正态分布的概率分布函数记为 f ( X ) = A e − 0.5 ( X − μ ) Σ − 1 ( X − μ ) T f(X)=Ae^{-0.5(X-\mu)\Sigma^{-1}(X-\mu)^T} f(X)=Ae−0.5(X−μ)Σ−1(X−μ)T。又因为 ( X − μ 0 ) Σ − 1 ( X − μ 0 ) − ( X − μ 1 ) Σ − 1 ( X − μ 1 ) = X α + γ (X-\mu_0)\Sigma^{-1}(X-\mu_0)-(X-\mu_1)\Sigma^{-1}(X-\mu_1)=X\alpha+\gamma (X−μ0)Σ−1(X−μ0)−(X−μ1)Σ−1(X−μ1)=Xα+γ。其中, α \alpha α和 γ \gamma γ的具体表达式并不重要,在原来的自变量基础上,加入常规项,仍记为 X X X,则可以得到: P ( X ∣ y = 0 ) P ( y = 0 ) P ( X ∣ y = 1 ) P ( y = 1 ) = e − X β \frac{P(X|y=0)P(y=0)}{P(X|y=1)P(y=1)}=e^{-X\beta } P(X∣y=1)P(y=1)P(X∣y=0)P(y=0)=e−Xβ
通过上面的分析可以知道,线性判别分析的预测公式也是逻辑回归的预测公式,也就是从预测的角度来看,线性判别分析和逻辑回归是一模一样的。那么两个模型有什么差别呢?
线性判别分析的模型假设更强一点,它首先假设在已知数据类别(因变量)的条件下数据的自变量是正态分布,再通过贝叶斯定理得到被预测量(因变量)的概率分布。当数据的自变量明显不可能是正态分布时,比如数据中有人的年龄这个自变量,线性判别分析的效果一定不好,因为数据不满足模型假设。而逻辑回归通常能很好地处理这种数据,因为它并没假设自变量是条件正态分布的。当然,如果数据的自变量真的满足线性判别分析的假设,数学上可以证明,这种情况下,线性判别分析是更加高效的模型。
事实上,数学上可以证明,若假设 X ∣ y = l ∼ P o i s s o n ( λ l ) X|y=l\sim Poisson(\lambda_l) X∣y=l∼Poisson(λl),即自变量的条件分布是泊松分布时,则模型的预测公式 P ( y = 1 ∣ X ) P(y=1|X) P(y=1∣X)也和逻辑回归一样。可以进一步证明,还有很多类型的概率分布(自变量服从的先验分布)能推导出逻辑回归的预测公式。这从数学上证明了,逻辑回归其实包括了很多先验分布,正态分布只是其中的一种。也可以理解为逻辑回归并没有假定自变量服从某一种先验分布。
从线性判别分析和逻辑回归这个例子上可以看到,相比于判别式模型(逻辑回归),生成式模型是“小而精”的模型。因为它们的模型假设更强,往往适用场景不多,但是一档问题场景满足特定的假设,生成式模型的预测效果往往会更好。
从下面公式中: P ( y = 1 ∣ X ) = 1 ( 1 + e − X β ) P(y=1|X)=\frac{1}{(1+e^{-X\beta })} P(y=1∣X)=(1+e−Xβ)1可以知道, P ( y = 1 ∣ X ) = 0.5 P(y=1|X)=0.5 P(y=1∣X)=0.5对应着 X β = 0 X\beta=0 Xβ=0。从空间直观上,这表示,由模型决定的类别分离面(决策边界)是空间中的超平面,比如在二维空间中的一条直线。这是线性判别分析中“线性”的来源,模型的决策边界是线性的。
4.3 数据降维
在实际应用中,线性判别分析除了被用于解决分类问题外,还常被用于数据降维。
数据降维指的是将高维空间中的数据映射到低纬度空间(与核函数刚好相反),这样的操作虽然不可避免地会损失部分数据信息,但却是机器学习中很常用的技巧。归纳起来,将数据降维通常有3个目的。
- 除去随机因素的干扰。在实际生产中收集到的数据往往包含了许多随机的噪声项,比如测量时的误差等。这些噪声项不仅对预测结果完全没有帮助,而且还会干扰正常变量对被预测量的影响,从而降低模型的预测效果。数据降维由于是从高维数据降低到低维空间,因为常常能过滤到这些噪声干扰。
- 避免过拟合问题。数据的维度越大意味着模型参数的个数也就越多,这很容易引起过拟合问题,特别是在数据量不够大的时候。而数据降维能将多个变量“浓缩”成数量较少的几个变量,这能帮助我们抓住数据变化的主要因素,并舍弃那些不太重要的次要因素,从而有效避免过拟合问题。
- 降低工程实现上的难度。对于绝大多数模型,我们没有办法得到它模型参数的解释表达式,需要用特定的最优化算法求解,比如随机梯度下降,这些算法需要耗费大量的时间才可能得到收敛的估计量。特别是在模型参数过多时,往往无法在可控的时间内得到有效的参数估计,导致模型的实用价值降低。而数据降维能有效地解决这个问题。
4.3.1 线性判别分析降维
在之前讨论的线性判别分析和上面讲到的降维的三个目的都没有什么联系,而且在搭建模型时,并没有涉及任何的空间变换。那么线性判别分析是如何做到数据降维的呢?
为了回答这个问题,需要了解在数据有标签(数据分为不同类别)的情况下,降维本身如何进行的。
为了表述简单,假设数据分为两类(对于数据分为k>2类的情况,讨论过程类似,只是数据推导更为复杂),记为y=0或者y=1,而且只有两个自变量,记为
X
=
(
x
1
,
x
2
)
X=(x_1,x_2)
X=(x1,x2),数据的分布如下图所示,其中蓝点为1,红点为0。
由于在二维空间中,任意一维子空间在直观上都表现为空间中的一条直线,因此将二维数据降为一维数据,从直观上就是让二维空间中的点向某条直线做垂线,而这些垂线和直线的交点(点在直线上的投影)就是降维后的数据分布,如上图中数据投影的直线。
对数据降维的方法有很多,事实上二维空间中的任意一条直线都对应着一种降维方法,如上图中的左图和右图是两种不同的降维方式。到底哪种降维方式更好呢?主要从下面的两个方面来考虑这个问题
- 由于数据分为不同的两类,我们希望降维将它们尽可能地聚集到一起,也就是说,降维后各类别的中心离得越远越好。
- 同时,对于一个类别里的数据,我们希望降维将它们尽可能地聚集到一起。也就是说,降维后各类别内部的方差越小越好。
上面的这两个目标往往是相互矛盾的,相比于下图中的右图,左图中的各类别的中心离得更远,但是类别内部的方差比较大。为了更加量化地平衡这两个方面,需要借助更严谨的数学工具。
首先将上述的降维过程使用数学语言描述出来,如上图所示,假设投影直线的向量为
k
k
k,且
∣
∣
k
∣
∣
=
1
||k||=1
∣∣k∣∣=1,则点
X
1
X_1
X1在这条直线上的投影长度(投影到原点的距离)可以表示为
k
X
1
T
kX_1^T
kX1T。
证明一下上面的定义,设直线为 W X = 0 WX=0 WX=0,向量 k k k在直线上,则 W W W和 k k k垂直,可以知道点 X 1 X_1 X1在直线 k k k上的投影长度为: ∣ ∣ X 1 ∣ ∣ ∗ c o s θ ||X_1||*cos\theta ∣∣X1∣∣∗cosθ公式中 θ \theta θ为直线 k k k和直线 X 1 X_1 X1的夹角,根据余弦定理,可以知道 c o s θ = X 1 ∗ k ∣ ∣ X 1 ∣ ∣ ∣ ∣ k ∣ ∣ cos\theta=\frac{X_1*k}{||X_1||||k||} cosθ=∣∣X1∣∣∣∣k∣∣X1∗k因此 ∣ ∣ X 1 ∣ ∣ ∗ c o s θ = ∣ ∣ X 1 ∣ ∣ ∗ X 1 ∗ k ∣ ∣ X 1 ∣ ∣ ∣ ∣ k ∣ ∣ = X 1 ∗ k ∣ ∣ k ∣ ∣ ||X_1||*cos\theta=||X_1||*\frac{X_1*k}{||X_1||||k||}=\frac{X_1*k}{||k||} ∣∣X1∣∣∗cosθ=∣∣X1∣∣∗∣∣X1∣∣∣∣k∣∣X1∗k=∣∣k∣∣X1∗k因为 ∣ ∣ k ∣ ∣ = 1 ||k||=1 ∣∣k∣∣=1,所以可以得到 ∣ ∣ X 1 ∣ ∣ ∗ c o s θ = X 1 ∗ k ||X_1||*cos\theta =X_1*k ∣∣X1∣∣∗cosθ=X1∗k
一方面,在降维后,两个类别的中心 u 0 , u 1 u_0,u_1 u0,u1公式如下所示: u l = 1 N l Σ i = 1 m 1 { y i = l } k X i T u_l=\frac{1}{N_l}\Sigma_{i=1}^m1_{\{y_i=l\}}kX^T_i ul=Nl1Σi=1m1{yi=l}kXiT其中, N 0 , N 1 N_0,N_1 N0,N1为各类别的数据个数。
另一方面,降维后,每个类别内部方差 v 0 , v 1 v_0,v_1 v0,v1为: v l = Σ i = 1 m 1 { y i = l } ( K X i T − u l ) 2 v_l=\Sigma_{i=1}^m1_{\{y_i=l\}}(KX_i^T-u_l)^2 vl=Σi=1m1{yi=l}(KXiT−ul)2综合上面描述的两点目标:中心距离 ∣ u 0 − u 1 ∣ |u_0-u_1| ∣u0−u1∣越大越好,内部方差 v 0 + v 1 v_0+v_1 v0+v1越小越好,数据降维的标准定义为如下公式,可理解为最大化“类别距离”: m a x k ( u 0 − u 1 ) 2 ( v 0 + v 1 ) max_k\frac{(u_0-u_1)^2}{(v_0+v_1)} maxk(v0+v1)(u0−u1)2为了求解上述公式,需要考察原始数据(降维之前) { X i , y i } \{X_i,y_i\} {Xi,yi}与这个式子的关系。记 μ 0 , μ 1 \mu_0,\mu_1 μ0,μ1为原始数据在不同类别下的中心,具体的公式如下: μ l = 1 N l Σ i = 1 m 1 { y i = l } X i \mu_l=\frac{1}{N_l}\Sigma_{i=1}^m1_{\{y_i=l\}}X_i μl=Nl1Σi=1m1{yi=l}Xi很容易证明 u l = k μ l T u_l=k\mu_l^T ul=kμlT,直接把k代进公式中就可以得到每个类别的中心 u l u_l ul。
在上面公式的基础上,定义相应的类别内部方差矩阵 s 0 , s 1 s_0,s_1 s0,s1如下: s l = Σ i = 1 m 1 { y i = l } ( X i − μ l ) T ( X i − μ l ) s_l=\Sigma_{i=1}^m1_{\{y_i=l\}}(X_i-\mu_l)^T(X_i-\mu_l) sl=Σi=1m1{yi=l}(Xi−μl)T(Xi−μl)数学上可以证明: v l = k s l k T v_l=ks_lk^T vl=kslkT 同样地,可以证明: ( u 0 − u 1 ) 2 = k ( μ 0 − μ 1 ) T ( μ 0 − μ 1 ) k T (u_0-u_1)^2=k(\mu_0-\mu_1)^T(\mu_0-\mu_1)k^T (u0−u1)2=k(μ0−μ1)T(μ0−μ1)kT不妨记 s W = ( s 0 + s 1 ) s_W=(s_0+s_1) sW=(s0+s1)以及 s B = ( μ 0 − μ 1 ) T ( μ 0 − μ 1 ) s_B=(\mu_0-\mu_1)^T(\mu_0-\mu_1) sB=(μ0−μ1)T(μ0−μ1)在学术上, s W s_W sW被定称为with-class scatter matrix(类内散度矩阵),而 s B s_B sB被称为between-class scatter matrix(类间散度矩阵)。有了这些定义,可以用他们重写数据降维的标准,具体如下公式所示: J ( k ) = m a x k k s B k T k s W k T J(k)=max_k\frac{ks_Bk^T}{ks_Wk^T} J(k)=maxkksWkTksBkT我们要最大化 J ( k ) J(k) J(k),只需要对k求偏导,并令导数等于零,于是可以得到: ( k T s W k ) s B k = ( k T S B k ) s W k (k^Ts_Wk)s_Bk=(k^TS_Bk)s_Wk (kTsWk)sBk=(kTSBk)sWk由于在简化的二分类问题中 k T s W k k^Ts_Wk kTsWk和 k T s B k k^Ts_Bk kTsBk是两个数,我们令 λ = J ( k ) = k T s B k k T s W k \lambda=J(k)=\frac{k^Ts_Bk}{k^Ts_Wk} λ=J(k)=kTsWkkTsBk,于是 ( k T s W k ) s B k = ( k T S B k ) s W k (k^Ts_Wk)s_Bk=(k^TS_Bk)s_Wk (kTsWk)sBk=(kTSBk)sWk可以改写为 s B k = λ s W k s_Bk=\lambda s_Wk sBk=λsWk整理得: s W − 1 s B k = λ k s_W^{-1}s_Bk=\lambda k sW−1sBk=λk从这里我们可以看出,最大化的目标对应了一个矩阵的特征值,于是LDA降维变成了一个求矩阵特征向量的问题。 J ( k ) J(k) J(k)就对应了矩阵 s W − 1 s B k s_W^{-1}s_Bk sW−1sBk最大的特征值,而投影方向就是这个特征值对应的特征向量。
对于二分类这一问题,由于 s B = ( μ 0 − μ 1 ) T ( μ 0 − μ 1 ) s_B=(\mu_0-\mu_1)^T(\mu_0-\mu_1) sB=(μ0−μ1)T(μ0−μ1),因此 s B k s_Bk sBk的方向始终与 ( μ 1 − μ 2 ) (\mu_1-\mu_2) (μ1−μ2)一致,如果只考虑 k k k的方向,不考虑其长度,可以得到 k = s W − 1 ( μ 1 − μ 2 ) k=s_W^{-1}(\mu_1-\mu_2) k=sW−1(μ1−μ2)。换句话说,我们只需要求样本的均值和类内方差就能马上得出最佳的投影方向 k k k。也就是说,前面介绍的线性判别分析和上述的数据降维过程其实是等价的,前者的估算答案决定了后者的最优解。
从表面上看,线性判别分析似乎对所有分类数据都能进行降维,因为上面的推导过程并没有对数据做任何假设。但事实上,降维与解决分类问题是等价的。因此,当自变量明显不符合正态分布时,线性判别分析降维的效果将无从保证,这意味着经过降维后,不同类别的数据将混杂在一起,不再保留类别间的差异。
至此,我们从最大化类间距离、最小化类内距离的思想出发,推导出了LDA的优化目标以及求解方法。LDA相比PCA更善于对有类别信息的数据进行降维处理,但它对数据的分布做了一些很强的假设。例如,每个类数据都是高斯分布、各个类的协方差相等。尽管这些假设在实际中并不一定满足,但LDA已被证明是非常有效的一种降维方法,主要是因为线性模型对于噪声的鲁棒性比较好,但由于模型简单,表达能力有一定局限性,可以通过引入核函数扩展LDA方法以处理分布较为复杂的数据。
4.4 二次判别分析
在线性判别分析中,模型假设在不同类别中,自变量分布的协方差矩阵是一样的,而二次判别分析(Quadratic Discriminant Analysis,QDA)放松了这个假设。以二元分类问题为例,二次判别分析的假设如下公式所示: X ∣ y = 0 ∼ N ( μ 0 , Σ 0 ) X|y=0\sim N(\mu_0,\Sigma_0) X∣y=0∼N(μ0,Σ0) X ∣ y = 1 ∼ N ( μ 1 , Σ 0 ) X|y=1\sim N(\mu_1,\Sigma_0) X∣y=1∼N(μ1,Σ0) P ( y = 0 ) = θ 0 P(y=0)=\theta_0 P(y=0)=θ0 P ( y = 1 ) = θ 1 P(y=1)=\theta_1 P(y=1)=θ1公式中的正态分布的协方差代表了分布的形状。因此,二次判别分析可以理解为区分类别的中心位置,也区分不同类别在形状上的差异。
当公式中的协方差矩阵都为对角线矩阵时,二次判别分析就变成了朴素贝叶斯里的高斯模型。事实上,线性判别分析也可以被视为二次判别分析的一个特例,将这个特例单独命名的目的在于线性判别分析可以用于数据降维,而一般二次判别分析则没有这个功能。
参考资料:
- 机器学习(周志华)
- 从零开始学Python(数据分析与挖掘)
- 协方差矩阵 - https://www.cnblogs.com/jermmyhsu/p/8195588.html