ML Lecture 5: Classification——Logistic Regression(中)

ML Lecture 5: Classification——Logistic Regression


判别模型与生成模型

前面解决二分类问题的过程中,Logistic回归方法是一种判别(Discriminative)方法,而用多维高斯分布来描述后验分布的过程是一种生成(Generative)方法。

实际上,不管是用Logistic回归判别法,还是事先假设一个概率分布(高斯、伯努利等)的生成方法,这两种方法都是基于同一个模型/函数集的:

P ( C 1 | x ) = σ ( w T x + b )
通过寻找不同的向量 w 和常数 b ,相应地得到不同的函数。

  • 如果用Logistic回归方法,可以通过梯度下降法更新参数,直接找出最优的 w b

  • 如果是用生成模型,我们首先会计算 μ 1 μ 2 Σ 1 ,然后根据上一节的参数公式:

    w T = ( μ 1 μ 2 ) T Σ 1
    b = 1 2 ( μ 1 ) T Σ 1 μ 1 + 1 2 ( μ 2 ) T Σ 1 μ 2 + ln N 1 N 2
    计算出参数 w b

通过判别方法(上图左)和生成方法(上图右)求出来的最佳参数 w b 会是同一组参数吗?如果不同,哪一种方法找出来的参数更好?

上述两种方法找出来的两组参数是不一样的。尽管它们是基于同一个模型/函数集,并根据相同的训练数据,从模型中挑选函数。但由于两种方法的假设不同,所以最后找出来的参数是不同的。

事实上,Logistic回归并没有做任何假设,没有对概率分布有任何的描述,只是单纯地去找一组参数 w b 。而在生成模型中,我们对概率分布是有假设的,例如假设它是高斯分布、伯努利分布,假设它是不是特征独立(朴素贝叶斯)等,然后再根据这些假设找出一组参数 w b

这两组参数虽然是从同一个模型、且基于相同的训练数据找出来的,数值却不是相等的。

比较生成方法的分类结果(下图左)和判别方法的分类结果(下图右),蓝色点代表水系样本,红色点代表一般系样本。落在粉红色区域内的样本将被判为水系,落在蓝紫色区域内的样本将被判为一般系。如下散点图只用了 2 维特征(防御力、特殊防御力),难以辨别哪种方法的分类效果更好。

但是如果采用全部的 7 维特征,会发现生成模型的分类准确率是 73 %;而判别模型的分类准确率上升到 79 %。在同样的数据集上,仅仅是因为假设不同,从而找到了不同的 w b ,导致最后对测试集的预测效果也不一样。

许多文献中经常认为判别方法比生成方法的表现更佳,为什么会出现这样的预测差异呢?
这两个方法所做的不同假设,分别对数据产生了什么影响?

假设在一个简单的二元分类问题中,训练集的情况如下。每个样本都具有 2 维特征,共有 13 个样本,它们被分为两类:

  • 1 个样本属于 C 1 ,它的两个特征都取 1 [ 1 1 ]
  • 2 - 5 个样本属于 C 2 ,第一个特征取 1 ,第二个特征取 0 [ 1 0 ]
  • 6 - 9 个样本属于 C 2 ,第一个特征取 0 ,第二个特征取 1 [ 0 1 ]
  • 10 - 13 个样本属于 C 2 ,两个特征都取 0 [ 0 0 ]

对于测试集中的一个新样本: [ 1 1 ] 。直觉上,这个新样本极可能是属于 C 1 的。因为从训练集的构成来看,新样本所代表的情况只在 C 1 中出现过,而从未在 C 2 中出现过。因此,新样本属于 C 2 的概率更可能是 0

但是在概率生成模型中,当我们做了一些假设后,模型就会脑补一些额外的信息,使得新样本 [ 1 1 ] C 2 中出现的概率不再是 0 。下面以朴素贝叶斯为例,判别新样本 [ 1 1 ] 属于哪一类。朴素贝叶斯假设样本的每一维特征都是相互独立的,所以有:

P ( x | C l ) = P ( x 1 | C l ) P ( x 2 | C l )
其中, C l 为第 l 个类别, x 1 x 2 分别为样本 x 的两维特征。

这里因为特征取值要么是 0 ,要么是 1 ,而不像之前pokemon的生命值、攻击力、防御力、速度等可以是任意数值,所以我们不再假设条件概率 P ( x | C l ) 服从多维高斯分布,而是假设服从伯努利分布。

根据训练集,统计并计算各个概率:

将各个概率值代入如下贝叶斯公式,计算出后验概率 P ( C 1 | x ) 是小于 0.5 的。说明基于这个训练集所建立的朴素贝叶斯模型认为新样本 [ 1 1 ] 属于 C 2

其中:

P ( x | C 1 ) = P ( x 1 = 1 | C 1 ) P ( x 2 = 1 | C 1 )
P ( x | C 2 ) = P ( x 1 = 1 | C 2 ) P ( x 2 = 1 | C 2 )

为什么朴素贝叶斯生成模型会把看似属于第一类的样本,判别为第二类?

这是因为朴素贝叶斯假设第一维特征 x 1 与第二维特征 x 2 的出现是相互独立的。所以,在第二个类别中,样本有一定的概率出现第一维特征为 1 [ 1 / ] ,也有一定的概率出现第二维特征为 1 [ / 1 ] 。那么这两个特征同时为 1 的情况: [ 1 1 ] 也是有可能的,哪怕我们没有在训练集的第二个类别里发现有 [ 1 1 ] 这种样本。在朴素贝叶斯的眼里:

  • 样本 [ 1 1 ] 来自 C 2 的概率并不是 0
  • 第二个类别样本数在总样本中的比重很大, P ( C 2 ) = 12 13

综合考量这两个因素后,朴素贝叶斯生成模型反而认为新样本 [ 1 1 ] 更有可能是来自 C 2 。而判别模型和我们直观的判断结果都认为新样本 [ 1 1 ] 更有可能是来自 C 1

尽管朴素贝叶斯模型的结果看起来不太正确,但其中不乏一定的道理:如果现有的测试集数量不够,导致模型见过的样本太少,其分类结果就不准确。而朴素贝叶斯这样的生成模型,会基于种种假设,脑补一些没有发生过的情况或没有出现过的样本,并认为这些情况/样本也是以一定概率可能发生/出现的,这样就使得模型具有“对未接触过的样本进行分类”的能力。

我们通常认为判别模型比生成模型的效果更好,但并不代表判别模型就绝对优于生成模型。事实上,生成模型有时也会占有优势,它具有如下优点:

  • 对概率分布做了假设

    • 当训练数据很少时,往往需要靠概率模型脑补一些在训练集中无法观察到的情况。由于生成模型具有脑补特性,所以很适用于训练数据少的情况
    • 当训练数据中有噪声、实际观察情况出现错误的时候,例如上例的训练集中,样本 [ 1 1 ] 可能并不属于 C 1 ,它恰好是一个错误的训练数据,会误导判别模型的分类结果
      而生成模型则多了一些假设,虽然这些假设有时候与实际状况并不相符,但是在训练数据本身就有误(噪声)的情况下,这些假设反而是正确的,能减少噪声带来的干扰
  • 后验概率被拆为两项:先验 P ( C l ) 、条件概率 P ( x | C l ) ,这两项可以基于不同的原始资料,分别计算。
    例如做语音识别,把不同的词汇视为不同的类别 C l x 是不同的声音讯号样本。我们要计算的是,给定一段声音讯号 x ,它属于某一个词汇的概率是多大 P ( C l | x ) ,找到概率最大的那个词汇,我们就认为它是声音讯号所反映的内容。而:

    P ( C l | x ) P ( x | C l ) P ( C l )
    其中,先验 P ( C l ) 是指一个词汇出现的概率,可以通过爬取大量文本信息统计得到;条件概率 P ( x | C l ) 是指给定一个词汇的情况下,生成一段语音的概率,这个概率需要收集很多语音样本计算得到。显然,从样本获取和概率计算的角度看,前者比后者更简单,所以先验概率 P ( C l ) 可以获得更为准确的估测。
    总之,在某些应用场景下,这两个概率如果能够基于不同的样本资料计算获得,就可以最大程度地降低因为同一个训练集所带来的误差。


多元分类

回顾二分类问题: C 1 C 2 。我们要计算一个样本分别来自这两个类别的概率:
P ( C 1 | x ) = σ ( z 1 ) = σ ( ( w 1 ) T x + b 1 ) ,模型取决于参数 w 1 b 1
P ( C 2 | x ) = σ ( z 2 ) = σ ( ( w 2 ) T x + b 2 ) ,模型取决于参数 w 2 b 2
由于 P ( C 1 | x ) + P ( C 2 | x ) = σ ( z 1 ) + σ ( z 2 ) = 1 ,所以只需要考察其中一个模型,如 P ( C 1 | x ) ,从而只需考察一组参数 ( w 1 , b 1 ) ,可以用Logistic回归。

对于多分类问题,以三元分类为例:

1. 模型/函数集

考虑三元分类: C 1 C 2 C 3 。我们要计算一个样本分别来自这三个类别的概率:
P ( C 1 | x ) = σ ( z 1 ) = σ ( ( w 1 ) T x + b 1 ) ,模型取决于参数 w 1 b 1
P ( C 2 | x ) = σ ( z 2 ) = σ ( ( w 2 ) T x + b 2 ) ,模型取决于参数 w 2 b 2
P ( C 3 | x ) = σ ( z 3 ) = σ ( ( w 3 ) T x + b 3 ) ,模型取决于参数 w 3 b 3
需要考察的一组参数为 ( w 1 . . . w 3 b 1 . . . b 3 )

2. 判断函数优劣——交叉熵损失函数

我们需要衡量某一组参数 ( w 1 . . . w 3 b 1 . . . b 3 ) ,它对训练集数据的预测效果如何。

假设对于训练集中的第 n 个样本 x n ,随机选取一组参数 ( w 1 . . . w 3 b 1 . . . b 3 ) 。则这组参数代表着一个分类模型,分别计算:

z 1 n = ( w 1 ) T x n + b 1
z 2 n = ( w 2 ) T x n + b 2
z 3 n = ( w 3 ) T x n + b 3
其中, w 1 w 2 w 3 x n K 维列向量, b 1 b 2 b 3 是常数, z 1 n z 2 n z 3 n 是实数。

利用Softmax函数把实数向量 ( z 1 n , z 2 n , z 3 n ) T 做归一化:

  1. 分别取指数:
    e z 1 n e z 2 n e z 3 n
  2. 加总求和:
    e z n = j = 1 3 e z j n = e z 1 n + e z 2 n + e z 3 n
  3. 分别求各指数的权重:
    y 1 n = e z 1 n e z n y 2 n = e z 2 n e z n y 3 n = e z 3 n e z n

Softmax函数又称归一化指数函数,是逻辑函数的一种推广。它能将一个含任意实数的多维向量压缩成另一个多维实向量,使得该向量中的每一个元素取值范围都在 ( 0 , 1 ) 之间,并且所有元素的和为 1

这里假设三维向量 z n = [ z 1 n = 3 z 2 n = 1 z 3 n = 3 ] ,经过Softmax函数,将其压缩为另一个三维向量 y n = [ y 1 n = 0.88 y 2 n = 0.12 y 3 n 0 ] ,且 y 1 n + y 2 n + y 3 n = 1

因此, y 1 n y 2 n y 3 n 可以视为是概率值,分别代表样本 x n 属于 C 1 C 2 C 3 的概率。从而通过比较 y l n ( l = 1 , 2 , 3 ) 的大小就能确定样本 x n 的类别。


为什么 y l n 能够等价于 P ( C l | x n ) ,对第 n 个样本 x n 进行分类? ( l = 1 , 2 , 3 )

在三分类问题中,若假设 P ( x | C 1 ) P ( x | C 2 ) P ( x | C 3 ) 分别服从多维高斯分布: f μ 1 , Σ ( x ) fμ2,Σ(x)fμ3,Σ(x),且它们共用一个协方差矩阵Σ。则经过推导化简后,会发现P(Cl|x)(l=1,2,3)就是经Softmax函数归一化的结果。如果把Softmax函数应用在两个类别的情况下,得到的结果就是Logistic回归的结果,此时Softmax函数简化为Sigmoid函数。


在多(L)分类问题中,真实类别标签ˆy可以看作是一个分布,对某个样本x属于哪个类别可以用One-hot编码方式,用一个L维的向量表示。

例如,当第n个样本xn的真实类别是属于第l类时,那么L维向量中的第l个元素为1,其他元素全部为0

以三元分类为例,样本xn的真实类别ˆyn的分布为:ˆyn={[100]xnC1[010]xnC2[001]xnC3

了解真实类别ˆyn的目的是,为了将分类模型的预测结果与真实类别做比较,看看它们的相近程度。如果相近,说明分类模型效果好,接近实际的分类情况,亦即前面的参数(w1...w3b1...b3)选得好。

在上例中,我们抽取了训练集的第n个样本xn,并将它放进由参数(w1...w3b1...b3)所构成的分类模型中,经过Softmax函数的转换,得到分类结果:yn=[yn1yn2yn3]=[0.880.120]

其中, yn1 yn2 yn3 分别代表样本 xn 属于 C1 C2 C3 的预测概率,这里,模型结果认为 xn 属于第一类。

可见,一个样本的分类结果就是一个概率分布,现在需要衡量预测分布yn与真实分布ˆyn之间的相似程度,用交叉熵来表示:H(ˆyn,yn)=3l=1ˆynllogynl=ˆyn1logyn1ˆyn2logyn2ˆyn3logyn3

它表示,对于训练集的第 n 个样本 xn

  • 如果xn的真实类别是C1,则ˆyn=[ˆyn1ˆyn2ˆyn3]=[100],交叉熵H(ˆyn,yn)=logyn1

  • 如果xn的真实类别是C2,则ˆyn=[ˆyn1ˆyn2ˆyn3]=[010],交叉熵H(ˆyn,yn)=logyn2

  • 如果xn的真实类别是C3,则ˆyn=[ˆyn1ˆyn2ˆyn3]=[001],交叉熵H(ˆyn,yn)=logyn3

最终,三元分类问题的损失函数是训练集中共N个样本的交叉熵的加和:Nn=1H(ˆyn,yn)=Nn=13l=1ˆynllogynl

同理,L元分类问题的损失函数表示为:Nn=1H(ˆyn,yn)=Nn=1Ll=1ˆynllogynl

寻找最佳参数时,使交叉熵最小的过程也是使似然函数最大化的过程


总结比较

假设第n个样本xnK维特征:

1. 二分类问题

  • 只需要寻找1w1bwK维列向量,b为实数)
  • 每一组参数(w,b)构成一个分类模型,用训练集的第n个样本xn计算:zn=wTxn+b
  • Sigmoid函数将实数zn转换为一个概率值σ(zn)=f(xn),这个值代表将样本xn判为第一个类别的预测概率
  • n个样本xn的交叉熵:H(ˆyn,f(xn))=ˆynlogf(xn)(1ˆyn)log(1f(xn))
  • 损失函数:Nn=1H(ˆyn,f(xn))=Nn=1[ˆynlogf(xn)+(1ˆyn)log(1f(xn))]

2. L个分类的问题

  • 需要寻找Lww1...wLLbb1...bLw1...wLK维列向量,b1...bL为实数)
  • 每一组参数(w1...wL;b1...bL)构成一个分类模型,用训练集的第n个样本xn分别计算:zn1=(w1)Txn+b1
    ...
    znL=(wL)Txn+bL
  • Softmax函数将实数向量(zn1,...,znL)T转换为一个L维的概率向量σ(zn)=yn,这个向量中的各个元素分别代表第n个样本xn被判为各个类别的预测概率
  • n个样本xn的交叉熵:H(ˆyn,yn)=Ll=1ˆynllogynl
  • 损失函数:Nn=1H(ˆyn,yn)=Nn=1Ll=1ˆynllogynl

参考资料
生成模型与判别模型
维基百科:Softmax函数
Softmax函数与交叉熵

猜你喜欢

转载自blog.csdn.net/Joyliness/article/details/80094748