线性分类(四)-- 高斯判别分析 GDA

        高斯判别分析(Gaussian Discriminant analysis,GDA),与之前的线性回归和Logistic回归从方法上讲有很大的不同,GDA是一种生成学习算法(Generative Learning Algorithms),而之前的属于判别学习算法(Discriminative Learning Algorithms)。(不能简单以名字做判断,毕竟逻辑回归是分类模型,高斯判别模型属于生成学习模型)了解更多:判别模型和生成模型

        机器学习模型从概率的角度来看就是最大化 P ( Y ∣ X ) P(Y|X) P(YX) 的条件概率,判别模型的思想是直接最大化这个概率(Fisher线性判别,线性感知机),生成模型则是通过贝叶斯模型最大后验概率 m a x P ( Y ∣ X ) = P ( X ∣ Y ) P ( Y ) P ( X ) ∼ m a x P ( X ∣ Y ) P ( Y ) maxP{(Y|X)}=\frac{P(X|Y)P(Y)}{P(X)}\sim maxP(X|Y)P(Y) maxP(YX)=P(X)P(XY)P(Y)maxP(XY)P(Y),其中 P ( X ∣ Y ) P(X|Y) P(XY) 可以看作是从标签生成数据, P ( Y ) P(Y) P(Y) 则是标签的先验概率。通俗的讲,判别模型是通过训练样本训练出一个模型,再用测试点 x x x 带入这个模型,最后算出 x x x 的可能类别;而生成学习模型是通过训练样本训练出各个类别的多个模型,再将预测点 x x x 分别代入不同类别的模型中,进而判断 x x x 到底属于哪个类别(一般就看代入后哪个模型的概率大就认为 x x x 是哪一类,当然也有例外)。

        在Andrew Ng大神的CS229 Lecture notes中有一个例子:假设我们要对大象和狗分类,回归模型和感知机模型是在两类数据之间找到一个decision boundary,通过这个decision boundary来区分大象和狗。高斯判别分析提供了另外一种思路:首先我们观察大象,对大象建立一个模型来描述他的特点;在观察狗,并建立相应的模型来描述狗。当一个新的狗或者象过来时,我们首先带入象模型和狗模型,最后决定新来的的动物的类别。

        这是一种软分类的思路,所谓软分类就是我们对一个样本决定它的类别时有一个可信度的概念,比方说当数据位于decision boundary附近的时候,我们将数据硬分为0或者1类(在这里是象和狗类)有时是不合理的,因为这是类别的不确定性更大。

        这一部分涉及的数学知识,请先阅读:高斯分布的极大似然估计、多维高斯分布矩阵求导(三)-- 一阶微分法


1 高斯判别分析模型的假设函数

        高斯判别分析的基本假设是我们得到的数据是独立同分布的(IID),虽然在实际中这种假设很难达到,但有时候拥有了好的假设可以得到较好的结果。
D a t a : { ( x i , y i ) } i = 1 N x i ∈ R p y i ∈ { 0 , 1 } (1-1) Data:\{(\pmb{x}_i,y_i)\}^N_{i=1} \quad \pmb{x}_i \in \mathbb R^p \quad y_i \in \{0, 1\} \tag{1-1} Data{(xxxi,yi)}i=1NxxxiRpyi{0,1}(1-1)

        可以按 y y y 的取值分为两类数据,并按照以下两个集合来表示
C 1 = { x i ∣ y i = 1 , i = 1 , 2 , ⋯   , N } C 2 = { x i ∣ y i = 0 , i = 1 , 2 , ⋯   , N } ∣ C 1 ∣ = N 1 , ∣ C 2 ∣ = N 2 , N 1 + N 2 = N (1-2) C_{1}=\left \{\boldsymbol{x}_{i}|y_{i}=1,i=1,2,\cdots ,N\right \}\\ C_{2}=\left \{\boldsymbol{x}_{i}|y_{i}=0,i=1,2,\cdots ,N\right \}\\ |C_{1}|=N_{1},|C_{2}|=N_{2},N_{1}+N_{2}=N \tag{1-2} C1={xiyi=1,i=1,2,,N}C2={xiyi=0,i=1,2,,N}C1=N1,C2=N2,N1+N2=N(1-2)

        由于 y i ∈ { 0 , 1 } y_i\in\{0, 1\} yi{0,1},因此可认为 y ∼ B e r n o u l l i ( ϕ ) y\sim Bernoulli(\phi) yBernoulli(ϕ)
⇒ y 1 0 P ϕ 1 − ϕ (1-3) \Rightarrow \begin{array}{c|cc} {y} &{1} &{0}\\ \hline {P}&{\phi}&{1-\phi} \end{array} \tag{1-3} yP1ϕ01ϕ(1-3)
        因此 P ( y ) = ϕ y ( 1 − ϕ ) 1 − y P(y)=\phi^y(1-\phi)^{1-y} P(y)=ϕy(1ϕ)1y

        接下来假设 P ( x ∣ y ) P(\pmb{x}|y) P(xxxy) 服从高斯分布:
x ∣ ( y = 1 ) ∼ N ( μ 1 , Σ ) x ∣ ( y = 0 ) ∼ N ( μ 0 , Σ ) (1-4) \pmb{x}|(y=1)\sim{N}(\pmb{\mu}_1,\pmb{\Sigma})\\ \pmb{x}|(y=0)\sim{N}(\pmb{\mu}_0,\pmb{\Sigma}) \tag{1-4} xxx(y=1)N(μμμ1,ΣΣΣ)xxx(y=0)N(μμμ0,ΣΣΣ)(1-4)
        更为直观的描述为:
P ( x ∣ y = 0 ) = 1 ( 2 π ) p 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ 0 ) T Σ − 1 ( x − μ 0 ) P ( x ∣ y = 1 ) = 1 ( 2 π ) p 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ 1 ) T Σ − 1 ( x − μ 1 ) (1-5) \begin{aligned}P(\pmb{x}|y=0) &=\dfrac{1}{(2\pi)^{\frac{p}{2}}\vert \boldsymbol{\Sigma} \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu}_0)^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu}_0)}\\ P(\pmb{x}|y=1)&=\dfrac{1}{(2\pi)^{\frac{p}{2}}\vert \boldsymbol{\Sigma} \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu}_1)^T \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu}_1)}\end{aligned} \tag{1-5} P(xxxy=0)P(xxxy=1)=(2π)2pΣ211e21(xμ0)TΣ1(xμ0)=(2π)2pΣ211e21(xμ1)TΣ1(xμ1)(1-5)

        上述模型中的未知参数为 ϕ 、 Σ 、 μ 0 和 μ 1 \phi、\pmb{\Sigma}、\pmb{\mu}_0和\pmb{\mu}_1 ϕΣΣΣμμμ0μμμ1,假设函数为 P ( y ∣ x ) = P ( x ∣ y ) P ( y ) P ( x ) P(y|\pmb{x})=\dfrac{P(\pmb{x}|y)P(y)}{P(\pmb{x})} P(yxxx)=P(xxx)P(xxxy)P(y) 分别计算 P ( x ∣ y = 0 ) P ( y = 0 ) 和 P ( x ∣ y = 1 ) P ( y = 1 ) P(\pmb{x}|y=0)P(y=0)和P(\pmb{x}|y=1)P(y=1) P(xxxy=0)P(y=0)P(xxxy=1)P(y=1) 的概率,概率大者为样本数据所属类别。


2 高斯判别分析模型的损失函数

        已知样本数据含有参数的概率分布,由最大似然估计法可以推导高斯判别分析模型的损失函数为
L ( ϕ , μ 0 , μ 1 , Σ ) = l n ∏ i = 1 N P ( x i , y i ; ϕ , μ 0 , μ 1 , Σ ) = l n ∏ i = 1 N P ( x i ∣ y i ; μ 0 , μ 1 , Σ ) P ( y i ; ϕ ) = ∑ i = 1 N l n P ( x i ∣ y i ; μ 0 , μ 1 , Σ ) + ∑ i = 1 N l n P ( y i ; ϕ ) = ∑ i = 1 N l n ( P ( x i ∣ y i = 1 ; μ 1 , Σ ) y i ⋅ P ( x i ∣ y i = 0 ; μ 0 , Σ ) 1 − y i ) + ∑ i = 1 N l n P ( y i ; ϕ ) = ∑ i = 1 N y i l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) ⏟ ① + ∑ i = 1 N ( 1 − y i ) l n P ( x i ∣ y i = 0 ; μ 0 , Σ ) ⏟ ② + ∑ i = 1 N l n P ( y i ; ϕ ) ⏟ ③ (2-1) \begin{aligned} L(\phi,\boldsymbol{\mu}_0,\boldsymbol{\mu}_1,\boldsymbol{\Sigma}) &= ln\prod\limits_{i=1}^{N}P(\boldsymbol{x}_{i},y_{i};\phi,\boldsymbol{\mu}_0,\boldsymbol{\mu}_1,\boldsymbol{\Sigma})\\ &=ln\prod\limits_{i=1}^{N}P(\boldsymbol{x}_{i}|y_{i};\boldsymbol{\mu}_0,\boldsymbol{\mu}_1,\boldsymbol{\Sigma})P(y_{i};\phi)\\ &=\sum\limits_{i=1}^{N}ln P(\boldsymbol{x}_{i}|y_{i};\boldsymbol{\mu}_0,\boldsymbol{\mu}_1,\boldsymbol{\Sigma}) + \sum\limits_{i=1}^{N}ln P(y_{i};\phi)\\ &=\sum\limits_{i=1}^{N}ln \left(P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma})^{y_{i}} \cdot P(\boldsymbol{x}_{i}|y_{i}=0;\boldsymbol{\mu}_0,\boldsymbol{\Sigma})^{1-y_{i}}\right)+ \sum\limits_{i=1}^{N}ln P(y_{i};\phi)\\ &=\underset{①}{\underbrace{\sum\limits_{i=1}^{N}y_{i}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma})}}+\underset{②}{\underbrace{\sum\limits_{i=1}^{N}(1-y_{i})ln P(\boldsymbol{x}_{i}|y_{i}=0;\boldsymbol{\mu}_0,\boldsymbol{\Sigma})}} + \underset{③}{\underbrace{\sum\limits_{i=1}^{N}ln P(y_{i};\phi)}}\\ \end{aligned} \tag{2-1} L(ϕ,μ0,μ1,Σ)=lni=1NP(xi,yi;ϕ,μ0,μ1,Σ)=lni=1NP(xiyi;μ0,μ1,Σ)P(yi;ϕ)=i=1NlnP(xiyi;μ0,μ1,Σ)+i=1NlnP(yi;ϕ)=i=1Nln(P(xiyi=1;μ1,Σ)yiP(xiyi=0;μ0,Σ)1yi)+i=1NlnP(yi;ϕ)= i=1NyilnP(xiyi=1;μ1,Σ)+ i=1N(1yi)lnP(xiyi=0;μ0,Σ)+ i=1NlnP(yi;ϕ)(2-1)

  1. 求解 ϕ \phi ϕ
             ϕ \phi ϕ 只存在于③式中,因此求解 ϕ \phi ϕ 只需要看③式即可,即:
    ∑ i = 1 N l n P ( y i ; ϕ ) = ∑ i = 1 N l n ϕ y i ( 1 − ϕ ) 1 − y i = ∑ i = 1 N [ y i l n ϕ + ( 1 − y i ) l n ( 1 − ϕ ) ] (2-2) \sum\limits_{i=1}^{N}ln P(y_{i};\phi) = \sum\limits_{i=1}^{N}ln \phi^{y_i}(1-\phi)^{1-y_i} \\ =\sum\limits_{i=1}^{N}[y_i ln \phi + (1-y_i) ln(1-\phi)]\tag{2-2} i=1NlnP(yi;ϕ)=i=1Nlnϕyi(1ϕ)1yi=i=1N[yilnϕ+(1yi)ln(1ϕ)](2-2)

        对 ϕ \phi ϕ 求偏导,并令其等于0,可得:
∂ L ( ϕ , μ 0 , μ 1 , Σ ) ∂ ϕ = ∑ i = 1 N [ y i 1 ϕ − ( 1 − y i ) 1 1 − ϕ ] = 0 ⇒ ∑ i = 1 N [ y i ( 1 − ϕ ) − ( 1 − y i ) ϕ ] = 0 ⇒ ∑ i = 1 N ( y i − ϕ ) = 0 ⇒ ∑ i = 1 N y i − N ϕ = 0 ϕ ^ = 1 N ∑ i = 1 N y i = N 1 N (2-3) \frac{ \partial L(\phi,\boldsymbol{\mu}_0,\boldsymbol{\mu}_1,\boldsymbol{\Sigma})}{\partial \phi} =\sum _{i=1}^{N}[y_{i}\frac{1}{\phi}-(1-y_{i})\frac{1}{1-\phi }]=0\\ \Rightarrow \sum _{i=1}^{N}[y_{i}(1-\phi)-(1-y_{i})\phi ]=0\\ \Rightarrow \sum _{i=1}^{N}(y_{i}-\phi)=0\\ \Rightarrow \sum _{i=1}^{N}y_{i}-N\phi=0\\ \hat{\phi}=\frac{1}{N}\sum _{i=1}^{N}y_{i}=\frac{N_{1}}{N} \tag{2-3} ϕL(ϕ,μ0,μ1,Σ)=i=1N[yiϕ1(1yi)1ϕ1]=0i=1N[yi(1ϕ)(1yi)ϕ]=0i=1N(yiϕ)=0i=1NyiNϕ=0ϕ^=N1i=1Nyi=NN1(2-3)

  1. 求解 μ 1 、 μ 0 \pmb{\mu}_1、\pmb{\mu}_0 μμμ1μμμ0
             μ 1 \pmb{\mu}_1 μμμ1 只存在于①式中,因此求解 μ 1 \pmb{\mu}_1 μμμ1 只需要看①式即可:
    ∑ i = 1 N y i l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) \sum\limits_{i=1}^{N}y_{i}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma}) i=1NyilnP(xiyi=1;μ1,Σ)
    Δ = ∑ i = 1 N y i l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) = ∑ i = 1 N y i l n ( 1 ( 2 π ) p 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x i − μ 1 ) T Σ − 1 ( x i − μ 1 ) ) ) \begin{aligned} \Delta&=\sum\limits_{i=1}^{N}y_{i}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma})\\ &=\sum_{i=1}^N y_i ln ({1\over(2\pi)^{p\over2}{\vert \boldsymbol{\Sigma}\vert}^{1\over2}} \exp(-{1\over 2}(\boldsymbol{x}_i-\boldsymbol{\mu}_1)^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu}_1))) \end{aligned} Δ=i=1NyilnP(xiyi=1;μ1,Σ)=i=1Nyiln((2π)2pΣ211exp(21(xiμ1)TΣ1(xiμ1)))
    μ 1 ^ = a r g m a x μ 1   Δ = a r g m a x μ 1   ∑ i = 1 N y i l n ( 1 ( 2 π ) p 2 ∣ Σ ∣ 1 2 exp ⁡ ( − 1 2 ( x i − μ 1 ) T Σ − 1 ( x i − μ 1 ) ) ) ⇒ a r g m a x μ 1   ∑ i = 1 N y i ( − 1 2 ( x i − μ 1 ) T Σ − 1 ( x i − μ 1 ) ) = a r g m a x μ 1   − 1 2 ∑ i = 1 N y i ( x i T Σ − 1 − μ 1 T Σ − 1 ) ( x i − μ 1 ) = a r g m a x μ 1   − 1 2 ∑ i = 1 N ( y i x i T Σ − 1 x i − 2 y i μ 1 T Σ − 1 x i + y i μ 1 T Σ − 1 μ 1 ) (2-4) \begin{aligned} \hat {\boldsymbol{\mu}_1}&=arg \underset {\boldsymbol{\mu}_1}{max}\ \Delta\\ &=arg \underset {\boldsymbol{\mu}_1}{max}\ \sum_{i=1}^N y_i ln ({1\over(2\pi)^{p\over2}{\vert \boldsymbol{\Sigma}\vert}^{1\over2}} \exp(-{1\over 2}(\boldsymbol{x}_i-\boldsymbol{\mu}_1)^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu}_1)))\\ & \Rightarrow arg \underset {\boldsymbol{\mu}_1}{max}\ \sum_{i=1}^N y_i(-{1\over 2}(\boldsymbol{x}_i-\boldsymbol{\mu}_1)^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu}_1)) \\&= arg \underset {\boldsymbol{\mu}_1}{max}\ -{1\over 2}\sum_{i=1}^N y_i(\boldsymbol{x}_i^T\boldsymbol{\Sigma}^{-1}-\boldsymbol{\mu}_1^T\boldsymbol{\Sigma}^{-1})(\boldsymbol{x}_i-\boldsymbol{\mu}_1) \\ &= arg \underset {\boldsymbol{\mu}_1}{max}\ -{1\over 2}\sum\limits_{i=1}^N(y_i\boldsymbol{x}_i^T\boldsymbol{\Sigma}^{-1}\boldsymbol{x}_i-2y_i\boldsymbol{\mu}_1^T\boldsymbol{\Sigma}^{-1}\boldsymbol{x}_i+y_i\boldsymbol{\mu}_1^T\boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}_1)\end{aligned} \tag{2-4} μ1^=argμ1max Δ=argμ1max i=1Nyiln((2π)2pΣ211exp(21(xiμ1)TΣ1(xiμ1)))argμ1max i=1Nyi(21(xiμ1)TΣ1(xiμ1))=argμ1max 21i=1Nyi(xiTΣ1μ1TΣ1)(xiμ1)=argμ1max 21i=1N(yixiTΣ1xi2yiμ1TΣ1xi+yiμ1TΣ1μ1)(2-4)

∂ Δ ∂ μ 1 = 0 − 1 2 ∑ i = 1 N [ − 2 y i Σ − 1 x i + 2 y i Σ − 1 μ 1 ) = 0 ⇒ ∑ i = 1 N y i Σ − 1 ( x i − μ 1 ) = 0 ⇒ ∑ i = 1 N y i ( x i − μ 1 ) = 0 ⇒ μ ^ 1 = ∑ i = 1 N y i x i ∑ i = 1 N y i μ ^ 1 = 1 N 1 ∑ i = 1 N 1 x i (2-5) \begin{aligned} {\partial \Delta \over \partial \boldsymbol{\mu}_1}&=0\\ -{1\over2}\sum_{i=1}^N [-2y_i \boldsymbol{\Sigma}^{-1}\boldsymbol{x}_i+ 2y_i \boldsymbol{\Sigma}^{-1}\boldsymbol{\mu}_1)&=0\\ \Rightarrow \sum_{i=1}^N y_i \boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu}_1)&=0\\ \Rightarrow\sum_{i=1}^N y_i (\boldsymbol{x}_i-\boldsymbol{\mu}_1)&=0\\ \Rightarrow \hat{\boldsymbol{\mu}}_1&={\displaystyle\sum_{i=1}^N y_i\boldsymbol{x}_i\over \displaystyle\sum_{i=1}^N y_i}\\ \hat{\boldsymbol{\mu}}_1&={1\over N_1}\sum_{i=1}^{N_1}\boldsymbol{x}_i \end{aligned} \tag{2-5} μ1Δ21i=1N[2yiΣ1xi+2yiΣ1μ1)i=1NyiΣ1(xiμ1)i=1Nyi(xiμ1)μ^1μ^1=0=0=0=0=i=1Nyii=1Nyixi=N11i=1N1xi(2-5)
        由于 y i ∈ { 0 , 1 } y_i\in\{0,1\} yi{0,1} 因此只有 时 y i = 1 y_i=1 yi=1 才被相加,所以 x i \pmb{x}_i xxxi ∑ i = 1 N y i x i = ∑ i = 1 N 1 x i \sum_{i=1}^N y_i\pmb{x}_i=\sum_{i=1}^{N_1}\pmb{x}_i i=1Nyixxxi=i=1N1xxxi μ 1 \pmb{\mu}_1 μμμ1 中的 y = 1 y=1 y=1 x \pmb{x} xxx 期望,正是 C 1 C_1 C1 集合中 x \pmb{x} xxx 的均值(无偏估计)
同理,
μ 0 = 1 N 2 ∑ i = 1 N 2 x i (2-6) \pmb{\mu}_0={1\over N_2}\sum_{i=1}^{N_2}\pmb{x}_i \tag{2-6} μμμ0=N21i=1N2xxxi(2-6)

  1. 求解 Σ \pmb{\Sigma} ΣΣΣ
    Υ = ∑ i = 1 N y i l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) + ∑ i = 1 N ( 1 − y i ) l n P ( x i ∣ y i = 0 ; μ 0 , Σ ) (2-7) \begin{aligned}\Upsilon&=\sum\limits_{i=1}^{N}y_{i}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma}) + \sum\limits_{i=1}^{N}(1-y_{i})ln P(\boldsymbol{x}_{i}|y_{i}=0;\boldsymbol{\mu}_0,\boldsymbol{\Sigma}) \end{aligned} \tag{2-7} Υ=i=1NyilnP(xiyi=1;μ1,Σ)+i=1N(1yi)lnP(xiyi=0;μ0,Σ)(2-7)

        由于 y i y_i yi 非1即0,因此 ∑ i = 1 N y i l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) = ∑ i = 1 N 1 l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) \sum\limits_{i=1}^{N}y_{i}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma})= \sum\limits_{i=1}^{N_1}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma}) i=1NyilnP(xiyi=1;μ1,Σ)=i=1N1lnP(xiyi=1;μ1,Σ),同理, ∑ i = 1 N ( 1 − y i ) l n P ( x i ∣ y i = 0 ; μ 0 , Σ ) = ∑ i = 1 N 2 l n P ( x i ∣ y i = 0 ; μ 0 , Σ ) \sum\limits_{i=1}^{N}(1-y_{i})ln P(\boldsymbol{x}_{i}|y_{i}=0;\boldsymbol{\mu}_0,\boldsymbol{\Sigma})= \sum\limits_{i=1}^{N_2}ln P(\boldsymbol{x}_{i}|y_{i}=0;\boldsymbol{\mu}_0,\boldsymbol{\Sigma}) i=1N(1yi)lnP(xiyi=0;μ0,Σ)=i=1N2lnP(xiyi=0;μ0,Σ),则

Υ = = ∑ i = 1 N 1 l n P ( x i ∣ y i = 1 ; μ 1 , Σ ) + ∑ i = 1 N 2 l n P ( x i ∣ y i = 0 ; μ 0 , Σ ) (2-8) \Upsilon== \sum\limits_{i=1}^{N_1}ln P(\boldsymbol{x}_{i}|y_{i}=1;\boldsymbol{\mu}_1,\boldsymbol{\Sigma})+\sum\limits_{i=1}^{N_2}ln P(\boldsymbol{x}_{i}|y_{i}=0;\boldsymbol{\mu}_0,\boldsymbol{\Sigma})\tag{2-8} Υ==i=1N1lnP(xiyi=1;μ1,Σ)+i=1N2lnP(xiyi=0;μ0,Σ)(2-8)

        先来计算 ∑ i = 1 N l n P ( x i ∣ y i ; μ , Σ ) \sum\limits_{i=1}^{N}ln P(\boldsymbol{x}_{i}|y_{i};\boldsymbol{\mu},\boldsymbol{\Sigma}) i=1NlnP(xiyi;μ,Σ)

∑ i = 1 N l n P ( x i ∣ y i ; μ , Σ ) = ∑ i = 1 N l n [ 1 ( 2 π ) p 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ 0 ) T Σ − 1 ( x − μ 0 ) ] = ∑ i = 1 N [ l n ( 1 ( 2 π ) p 2 ) + l n ∣ Σ ∣ − 1 2 − 1 2 ( x i − μ ) T Σ − 1 ( x i − μ ) ] (2-9) \begin{aligned}\sum\limits_{i=1}^{N}ln P(\boldsymbol{x}_{i}|y_{i};\boldsymbol{\mu},\boldsymbol{\Sigma}) &=\sum\limits_{i=1}^{N}ln [\dfrac{1}{(2\pi)^{\frac{p}{2}}\vert \boldsymbol{\Sigma} \vert ^{\frac{1}{2}}}e^{-\frac{1}{2}(\boldsymbol{x}-\boldsymbol{\mu}_0)^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}-\boldsymbol{\mu}_0)}]\\ &= \sum_{i=1}^{N} [ln ({1\over (2\pi)^{p\over 2}})+ln \vert\boldsymbol{\Sigma} \vert^{-{1\over 2}}-{1\over 2}(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})] \end{aligned} \tag{2-9} i=1NlnP(xiyi;μ,Σ)=i=1Nln[(2π)2pΣ211e21(xμ0)TΣ1(xμ0)]=i=1N[ln((2π)2p1)+lnΣ2121(xiμ)TΣ1(xiμ)](2-9)
        令常数项 ∑ i = 1 N l n ( 1 ( 2 π ) p 2 ) = C \sum_{i=1}^{N} ln ({1\over (2\pi)^{p\over 2}}) = C i=1Nln((2π)2p1)=C

∑ i = 1 N l n P ( x i ∣ y i ; μ , Σ ) = C + ∑ i = 1 N [ − 1 2 l n ∣ Σ ∣ − 1 2 ( x i − μ ) T Σ − 1 ( x i − μ ) ] = − 1 2 N l n ∣ Σ ∣ − 1 2 ∑ i = 1 N ( x i − μ ) T Σ − 1 ( x i − μ ) + C (2-10) \begin{aligned} \sum\limits_{i=1}^{N}ln P(\boldsymbol{x}_{i}|y_{i};\boldsymbol{\mu},\boldsymbol{\Sigma}) &=C +\sum^N_{i=1}[-{1\over 2}ln {\vert \boldsymbol{\Sigma} \vert}-{1\over 2}(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})]\\ &=-{1\over 2}N ln {\vert \boldsymbol{\Sigma} \vert}-{1\over 2}\sum^N_{i=1}(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})+C \end{aligned}\tag{2-10} i=1NlnP(xiyi;μ,Σ)=C+i=1N[21lnΣ21(xiμ)TΣ1(xiμ)]=21NlnΣ21i=1N(xiμ)TΣ1(xiμ)+C(2-10)

         ( x i − μ ) T Σ − 1 ( x i − μ ) (\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu}) (xiμ)TΣ1(xiμ) 1 × p      p × p      p × 1 1\times p \ \ \ \ p\times p\ \ \ \ p\times 1 1×p    p×p    p×1,因此结果为一实数,由矩阵迹的性质可得: ( x i − μ ) T Σ − 1 ( x i − μ ) = t r [ ( x i − μ ) T Σ − 1 ( x i − μ ) ] (\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})=tr[(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})] (xiμ)TΣ1(xiμ)=tr[(xiμ)TΣ1(xiμ)],接下来使用迹的交换性质可得:
t r [ ( x i − μ ) T Σ − 1 ( x i − μ ) ] = t r [ ( x i − μ ) ( x i − μ ) T Σ − 1 ] t r [ ∑ i = 1 N ( x i − μ ) T Σ − 1 ( x i − μ ) ] = t r [ ∑ i = 1 N ( x i − μ ) ( x i − μ ) T Σ − 1 ] (2-11) tr[(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})] = tr[(\boldsymbol{x}_i-\boldsymbol{\mu})(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}]\\ tr[\sum^N_{i=1}(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu})] = tr[\sum^N_{i=1}(\boldsymbol{x}_i-\boldsymbol{\mu})(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}] \tag{2-11} tr[(xiμ)TΣ1(xiμ)]=tr[(xiμ)(xiμ)TΣ1]tr[i=1N(xiμ)TΣ1(xiμ)]=tr[i=1N(xiμ)(xiμ)TΣ1](2-11)
        由于协方差矩阵 S = ∑ i = 1 N ( x i − μ ) ( x i − μ ) T N \pmb{S}=\dfrac{\sum^N_{i=1}(\boldsymbol{x}_i-\boldsymbol{\mu})(\boldsymbol{x}_i-\boldsymbol{\mu})^T}{N} SSS=Ni=1N(xiμ)(xiμ)T,因此
∑ i = 1 N ( x i − μ ) T Σ − 1 ( x i − μ ) = t r ( N S Σ − 1 ) = N t r ( S Σ − 1 ) (2-12) \sum^N_{i=1}(\boldsymbol{x}_i-\boldsymbol{\mu})^T\boldsymbol{\Sigma}^{-1}(\boldsymbol{x}_i-\boldsymbol{\mu}) = tr(N\boldsymbol{S\Sigma}^{-1})=Ntr(\boldsymbol{S\Sigma}^{-1})\tag{2-12} i=1N(xiμ)TΣ1(xiμ)=tr(NSΣ1)=Ntr(SΣ1)(2-12)
        代入式子(2-10)可得
∑ i = 1 N l n P ( x i ∣ y i ; μ , Σ ) = − 1 2 N l n ∣ Σ ∣ − 1 2 N t r ( S Σ − 1 ) + C (2-13) \begin{aligned} \sum\limits_{i=1}^{N}ln P(\boldsymbol{x}_{i}|y_{i};\boldsymbol{\mu},\boldsymbol{\Sigma}) =-{1\over 2}N ln {\vert \boldsymbol{\Sigma} \vert} -{1\over 2}Ntr(\boldsymbol{S\Sigma}^{-1}) +C \end{aligned}\tag{2-13} i=1NlnP(xiyi;μ,Σ)=21NlnΣ21Ntr(SΣ1)+C(2-13)

        将此式带入 Υ \Upsilon Υ 可得:
Υ = − 1 2 N 1 l n ∣ Σ ∣ − 1 2 N 1 t r ( S 1 Σ − 1 ) − 1 2 N 2 l n ∣ Σ ∣ − 1 2 N 2 t r ( S 2 Σ − 1 ) + C ^ = − 1 2 [ N l n ∣ Σ ∣ + N 1 t r ( S 1 Σ − 1 ) + N 2 t r ( S 2 Σ − 1 ) ] + C ^ (2-14) \begin{aligned}\Upsilon &= -{1\over 2}N_1 ln {\vert \boldsymbol{\Sigma} \vert} -{1\over 2}N_1tr(\boldsymbol{S_1\Sigma}^{-1}) -{1\over 2}N_2 ln {\vert \boldsymbol{\Sigma} \vert} -{1\over 2}N_2tr(\boldsymbol{S_2\Sigma}^{-1}) +\hat{C}\\ &=-{1\over 2}[N ln {\vert \boldsymbol{\Sigma} \vert}+N_1tr(\boldsymbol{S_1\Sigma}^{-1})+N_2tr(\boldsymbol{S_2\Sigma}^{-1})]+\hat{C}\end{aligned}\tag{2-14} Υ=21N1lnΣ21N1tr(S1Σ1)21N2lnΣ21N2tr(S2Σ1)+C^=21[NlnΣ+N1tr(S1Σ1)+N2tr(S2Σ1)]+C^(2-14)
        对 Υ \Upsilon Υ 求偏导可得:
∂ Υ ∂ Σ = − 1 2 [ N 1 ∣ Σ ∣ ∣ Σ ∣ Σ − 1 + N 1 ∂ t r ( Σ − 1 S 1 ) ∂ Σ + N 2 ∂ t r ( Σ − 1 S 2 ) ∂ Σ ] = − 1 2 [ N Σ − 1 + N 1 S 1 T ( − 1 ) Σ − 2 + N 2 S 2 T ( − 1 ) Σ − 2 ] = − 1 2 ( N Σ − 1 − N 1 S 1 T Σ − 2 − N 2 S 2 T Σ − 2 ) (2-15) \begin{aligned} \dfrac{\partial \Upsilon}{\partial \boldsymbol{\Sigma}} &=-\dfrac{1}{2}[N\dfrac{1}{|\boldsymbol{\Sigma} |}|\boldsymbol{\Sigma} |\boldsymbol{\Sigma}^{-1}+N_{1}\dfrac{\partial tr(\boldsymbol{\Sigma} ^{-1}\boldsymbol{S}_{1})}{\partial \boldsymbol{\Sigma}}+N_{2}\dfrac{\partial tr(\boldsymbol{\Sigma} ^{-1}\boldsymbol{S}_{2})}{\partial \boldsymbol{\Sigma}}]\\ &=-\dfrac{1}{2}[N\boldsymbol{\Sigma}^{-1}+N_{1}\boldsymbol{S}_{1}^{T}(-1)\boldsymbol{\Sigma} ^{-2}+N_{2}\boldsymbol{S}_{2}^{T}(-1)\boldsymbol{\Sigma} ^{-2}]\\ &=-\dfrac{1}{2}(N\boldsymbol{\Sigma}^{-1}-N_{1}\boldsymbol{S}_{1}^{T}\boldsymbol{\Sigma} ^{-2}-N_{2}\boldsymbol{S}_{2}^{T}\boldsymbol{\Sigma} ^{-2}) \end{aligned} \tag{2-15} ΣΥ=21[NΣ1ΣΣ1+N1Σtr(Σ1S1)+N2Σtr(Σ1S2)]=21[NΣ1+N1S1T(1)Σ2+N2S2T(1)Σ2]=21(NΣ1N1S1TΣ2N2S2TΣ2)(2-15)
        令 ∂ Υ ∂ Σ = 0 \dfrac{\partial \Upsilon}{\partial \boldsymbol{\Sigma}}=0 ΣΥ=0,可得
N Σ − 1 − N 1 S 1 T Σ − 2 − N 2 S 2 T Σ − 2 = 0 Σ ^ = N 1 S 1 + N 2 S 2 N (2-16) N\boldsymbol{\Sigma}^{-1}-N_{1}\boldsymbol{S}_{1}^{T}\boldsymbol{\Sigma} ^{-2}-N_{2}\boldsymbol{S}_{2}^{T}\boldsymbol{\Sigma} ^{-2}=0 \\ \hat{\boldsymbol{\Sigma}} = \dfrac{N_{1}\boldsymbol{S}_{1}+N_{2}\boldsymbol{S}_{2}}{N} \tag{2-16} NΣ1N1S1TΣ2N2S2TΣ2=0Σ^=NN1S1+N2S2(2-16)

        通过上述公式,所有的未知参数都已经估计出来了,当需要判断一个新样本 x i \boldsymbol{x}_i xi 时,可分别求出 P ( x ∣ y = 0 ) P ( y = 0 ) 和 P ( x ∣ y = 1 ) P ( y = 1 ) P(\pmb{x}|y=0)P(y=0)和P(\pmb{x}|y=1)P(y=1) P(xxxy=0)P(y=0)P(xxxy=1)P(y=1) 的概率,概率大者为样本数据所属类别。


3 代码实现

        这里以Breast-Cancer数据集为例,来实现高斯判别分析,对此数据集的详细介绍,请参考:机器学习实践-针对Breast-Cancer数据集,下面代码部分主要参考:daipuweiai ——高斯判别分析(GDA)Python代码

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import accuracy_score
from sklearn.linear_model import LogisticRegression
import matplotlib as mpl
import matplotlib.pyplot as plt

class GDA:
    def __init__(self,train_data,train_label):
        """
        这是GDA算法构造函数
        :param train_data: 训练数据
        :param train_label: 训练数据标签
        """
        self.Train_Data = train_data
        self.Train_Label = train_label
        self.postive_num = 0                                                    # 正样本个数
        self.negetive_num = 0                                                   # 负样本个数
        postive_data = []                                                       # 正样本数组
        negetive_data = []                                                      # 负样本数组
        for (data,label) in zip(self.Train_Data,self.Train_Label):
            if label == 1:          # 正样本
                self.postive_num += 1
                postive_data.append(list(data))
            else:                   # 负样本
                self.negetive_num += 1
                negetive_data.append(list(data))
        # 计算正负样本的二项分布的概率
        row,col = np.shape(train_data)
        self.postive = self.postive_num*1.0/row                                 # 正样本的二项分布概率
        self.negetive = 1-self.postive                                          # 负样本的二项分布概率
        # 计算正负样本的高斯分布的均值向量
        postive_data = np.array(postive_data)
        negetive_data = np.array(negetive_data)
        postive_data_sum = np.sum(postive_data, 0)
        negetive_data_sum = np.sum(negetive_data, 0)
        self.mu_positive = postive_data_sum*1.0/self.postive_num                # 正样本的高斯分布的均值向量
        self.mu_negetive = negetive_data_sum*1.0/self.negetive_num              # 负样本的高斯分布的均值向量
        # 计算高斯分布的协方差矩阵
        positive_deta = postive_data-self.mu_positive
        negetive_deta = negetive_data-self.mu_negetive
        self.sigma = []
        for deta in positive_deta:
            deta = deta.reshape(1,col)
            ans = deta.T.dot(deta)
            self.sigma.append(ans)
        for deta in negetive_deta:
            deta = deta.reshape(1,col)
            ans = deta.T.dot(deta)
            self.sigma.append(ans)
        self.sigma = np.array(self.sigma)
        #print(np.shape(self.sigma))
        self.sigma = np.sum(self.sigma,0)
        self.sigma = self.sigma/row
        self.mu_positive = self.mu_positive.reshape(1,col)
        self.mu_negetive = self.mu_negetive.reshape(1,col)

    def Gaussian(self, x, mean, cov):
        """
        这是自定义的高斯分布概率密度函数
        :param x: 输入数据
        :param mean: 均值向量
        :param cov: 协方差矩阵
        :return: x的概率
        """
        dim = np.shape(cov)[0]
        # cov的行列式为零时的措施
        covdet = np.linalg.det(cov + np.eye(dim) * 0.001)
        covinv = np.linalg.inv(cov + np.eye(dim) * 0.001)
        xdiff = (x - mean).reshape((1, dim))
        # 概率密度
        prob = 1.0 / (np.power(np.power(2 * np.pi, dim) * np.abs(covdet), 0.5)) * \
               np.exp(-0.5 * xdiff.dot(covinv).dot(xdiff.T))[0][0]
        return prob

    def predict(self,test_data):
        predict_label = []
        for data in test_data:
            positive_pro = self.Gaussian(data,self.mu_positive,self.sigma)
            negetive_pro = self.Gaussian(data,self.mu_negetive,self.sigma)
            if positive_pro >= negetive_pro:
                predict_label.append(1)
            else:
                predict_label.append(0)
        return predict_label

def run_main():
    """
       这是主函数
    """
    # 导入乳腺癌数据
    breast_cancer = load_breast_cancer()
    data = np.array(breast_cancer.data)
    label = np.array(breast_cancer.target)
    data = MinMaxScaler().fit_transform(data)

    # 解决画图是的中文乱码问题
    mpl.rcParams['font.sans-serif'] = [u'simHei']
    mpl.rcParams['axes.unicode_minus'] = False

    # 分割训练集与测试集
    train_data,test_data,train_label,test_label = train_test_split(data,label,test_size=1/4)

    # 数据可视化
    plt.scatter(test_data[:,0],test_data[:,1],c = test_label)
    plt.title("乳腺癌数据集显示")
    plt.show()

    # GDA结果
    gda = GDA(train_data,train_label)
    test_predict = gda.predict(test_data)
    print("GDA的正确率为:",accuracy_score(test_label,test_predict))

    # 数据可视化
    plt.scatter(test_data[:,0],test_data[:,1],c = test_predict)
    plt.title("GDA分类结果显示")
    plt.show()

    # Logistic回归结果
    lr = LogisticRegression()
    lr.fit(train_data,train_label)
    test_predict = lr.predict(test_data)
    print("Logistic回归的正确率为:",accuracy_score(test_label,test_predict))

    # 数据可视化
    plt.scatter(test_data[:,0],test_data[:,1],c = test_predict)
    plt.title("Logistic回归分类结果显示")
    plt.show()

if __name__ == '__main__':
    run_main()
输出结果为:
	GDA的正确率为: 0.972027972027972
	Logistic回归的正确率为: 0.958041958041958

4 总结

4.1 高斯判别模型与逻辑回归比较

        高斯判别模型的假设是 P ( X ∣ Y ) P(X|Y) P(XY) 服从高斯分布, P ( Y ) P(Y) P(Y) 服从伯努利分布;逻辑回归的概率解释中可以看出它的假设是 P ( Y ∣ X ; θ ) P(Y|X; \theta) P(YX;θ)服从伯努利分布。

        假如我们将 p ( y = 1 ∣ x ; ϕ , μ 0 , μ 1 , Σ ) p(y=1|x;\phi,\mu_{0},\mu_{1},\Sigma) p(y=1x;ϕ,μ0,μ1,Σ) 视作关于 x x x 的函数,该函数可以表示成logistic回归形式:
P ( y = 1 ∣ x ; ϕ , μ 0 , μ 1 , Σ ) = 1 1 + e x p ( − θ T x ) P(y=1|\pmb{x};\phi,\pmb{\mu}_{0},\pmb{\mu}_{1},\pmb{\Sigma})=\dfrac{1}{1+exp(-\pmb{\theta}^{T}\pmb{x})} P(y=1xxx;ϕ,μμμ0,μμμ1,ΣΣΣ)=1+exp(θθθTxxx)1
        其中, θ \pmb{\theta} θθθ 可以用以 ϕ , μ 0 , μ 1 , Σ \phi,\pmb{\mu}_{0},\pmb{\mu}_{1},\pmb{\Sigma} ϕ,μμμ0,μμμ1,ΣΣΣ 为变量的函数表示。

        如果 P ( X ∣ Y ) P(X|Y) P(XY) 服从高斯分布,那么, P ( Y ∣ X ) P(Y|X) P(YX) 就可以表示成逻辑回归函数形式;相反,如果 P ( Y ∣ X ) P(Y|X) P(YX) 可表示成逻辑回归函数形式,并不代表 P ( X ∣ Y ) P(X|Y) P(XY) 服从高斯分布。这意味着高斯判别模型比逻辑回归需要更加严格的模型假设,当然,如果高斯模型的假设是正确的,那么,高斯判别模型具有更高的拟合度。基于以上原因,在实践中使用逻辑回归比使用高斯判别模型更普遍。

        综上,我们可以发现高斯判别模型的假设强于Logistic模型,也就是说逻辑回归模型的鲁棒性更强。这就表示在数据量足够大时,更倾向于选择Logistic回归模型。而在数据量较小,且 P ( X ∣ Y ) P(X|Y) P(XY) 服从一个高斯分布非常合理时,选择高斯判别分析模型更适合。

        以上就是GDA的思路和实现方式,此模型只能应用于监督学习中,并且数据的分布必须大致是高斯分布的,对于一些奇怪的形状,可能并没有好的分类结果。


参考

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长路漫漫2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值