机器怎样学习?

本文详细介绍了机器学习中的线性回归和逻辑回归算法。线性回归用于回归问题,通过最小化误差实现,而逻辑回归则用于二分类,通过逻辑函数转换预测概率。文章还探讨了线性回归在二分类中的应用,以及分类的线性模型如PLA、线性回归和逻辑回归之间的比较。此外,文章提到了随机梯度下降在优化过程中的作用,并讨论了多分类问题的解决方案,包括OVA和OVO方法。最后,文章讨论了通过非线性变换解决线性不可分问题的可能性及其复杂度代价。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列是台湾大学资讯工程系林軒田(Hsuan-Tien Lin)教授开设的《机器学习基石》课程的梳理。重在梳理,而非详细的笔记,因此可能会略去一些细节。

该课程共16讲,分为4个部分:

  1. 机器什么时候能够学习?(When Can Machines Learn?)
  2. 机器为什么能够学习?(Why Can Machines Learn?)
  3. 机器怎样学习?(How Can Machines Learn?)
  4. 机器怎样可以学得更好?(How Can Machines Learn Better?)

本文是第3部分,对应原课程中的9-12讲。

本部分的主要内容:

  • 线性回归算法详解,以及泛化能力的保证、能否用于二分类问题等;
  • 逻辑回归算法详解,并引入梯度下降方法;
  • 阐述PLA、线性回归、逻辑回归3种方法在分类问题上的联系与区别,并引入随机梯度下降方法;
  • 多分类问题中的OVA、OVO方法;
  • 特征的非线性变换,以及该如何控制变换后的复杂度。

1 线性回归

在第一部分中讲过机器学习的分类,当Y=R\mathcal{Y}=\mathbb{R}Y=R时,就是回归。

1.1 线性回归算法

线性回归的假设集十分简单,h(x)=wTxh(\mathbf{x})=\mathbf{w}^T\mathbf{x}h(x)=wTx,其实就是感知机模型去除了符号函数。

它的逐点误差度量可设为err(y^,y)=(y^−y)2\text{err}(\hat{y}, y)=(\hat{y}-y)^2err(y^,y)=(y^y)2,那么样本内外的误差分别为
Ein(w)=1N∑n=1N(wTxn−yn)2E_{\text{in}}(\mathbf{w})=\dfrac{1}{N}\sum\limits_{n=1}^{N}(\mathbf{w}^T \mathbf{x}_n-y_n)^2Ein(w)=N1n=1N(wTxnyn)2

Eout(w)=E(x,y)∼P(wTx−y)2E_{\text{out}}(\mathbf{w})=\mathop{\mathcal{E}}\limits_{(\mathbf{x},y)\sim P}(\mathbf{w}^T \mathbf{x}-y)^2Eout(w)=(x,y)PE(wTxy)2
要最小化EinE_{\text{in}}Ein很简单,当它取到最小时必有梯度000,因此可先计算出它的梯度:
∇Ein(w)=2N(XTXw−XTy) \nabla E_{\text{in}}(\mathbf{w})=\dfrac{2}{N}(X^T X\mathbf{w}-X^T \mathbf{y}) Ein(w)=N2(XTXwXTy)
令它为000即可。如图所示:

XTXX^T XXTX可逆(当N≫d+1N\gg d+1Nd+1时基本上会满足),则可直接得出
wLIN=(XTX)−1XTy\mathbf{w}_{\text{LIN}}=(X^T X)^{-1} X^T \mathbf{y}wLIN=(XTX)1XTy

如果XTXX^T XXTX是奇异的呢?可先定义“伪逆”(pseudo-inverse)X†X^\daggerX,在定义完后有
wLIN=X†y\mathbf{w}_{\text{LIN}}=X^\dagger \mathbf{y}wLIN=Xy

在实践中,建议直接使用X†X^\daggerX,一方面可避免判断XTXX^T XXTX是否可逆,另一方面就算在几乎不可逆的情况下,它也是在数值上稳定的。

1.2 线性回归的泛化

线性回归看起来没有“学习”过程,是一步到位的,那么它算机器学习吗?

事实上,只要可以保证Eout(wLIN)E_{\text{out}}(\mathbf{w}_\text{LIN})Eout(wLIN)足够小,那么就可以说“发生了”学习。

在这里,我们不从VC维理论出发,而从另一个角度说明为什么Eout(wLIN)E_{\text{out}}(\mathbf{w}_\text{LIN})Eout(wLIN)会足够小。

我们先来看平均的EinE_{\text{in}}Ein有多大:

Ein‾=ED∼PN{Ein(wLIN w.r.t D)}\overline{E_{\text{in}}}=\mathop{\mathcal{E}}\limits_{\mathcal{D}\sim P^N}\{E_{\text{in}}(\mathbf{w}_\text{LIN} \text{ w.r.t } \mathcal{D})\}Ein=DPNE{Ein(wLIN w.r.t D)}

其中

KaTeX parse error: No such environment: split at position 7: \begin{̲s̲p̲l̲i̲t̲}̲ E_{\text{in}}(…

可将H=XX†H=XX^\daggerH=XX称为hat matrix,因为它可将y\mathbf{y}y映射到y^\hat{\mathbf{y}}y^。由下图可知,若y\mathbf{y}y由理想的f(X)∈spanf(X)\in \text{span}f(X)span加上噪声noise\mathbf{noise}noise生成,那么I−HI-HIH也可将noise\mathbf{noise}noise映射为y−y^\mathbf{y}-\hat{\mathbf{y}}yy^

trace(I−H)=N−(d+1)\text{trace}(I-H)=N-(d+1)trace(IH)=N(d+1),迹可以理解为“能量”,因此有

KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ E_{\text{in}}(…

如果对EinE_{\text{in}}Ein取平均,大概可以理解为
Ein‾=noise level⋅(1−d+1N)\overline{E_{\text{in}}}=\mathbf{noise}\text{ level} \cdot (1-\dfrac{d+1}{N})Ein=noise level(1Nd+1)
类似地有
Eout‾=noise level⋅(1+d+1N)\overline{E_{\text{out}}}=\mathbf{noise}\text{ level} \cdot (1+\dfrac{d+1}{N})Eout=noise level(1+Nd+1)
(证明过程略)。

因此Ein‾\overline{E_{\text{in}}}EinEout‾\overline{E_{\text{out}}}Eout的关系如图:

N→∞N\to\inftyN,则二者都收敛于σ2\sigma^2σ2noise level\mathbf{noise}\text{ level}noise level),泛化误差的期望为2(d+1)N\dfrac{2(d+1)}{N}N2(d+1)。因此,学习是会“发生”的!

VC维理论说明的是EinE_{\text{in}}EinEoutE_{\text{out}}Eout相差较远的概率有上限,而这里说明的是它们的平均差距会收敛。角度不同,但两种方式都说明了泛化的能力。

1.3 用线性回归进行二分类

在线性分类中,Y={+1,−1}\mathcal{Y}=\{+1,-1\}Y={+1,1}h(x)=sign(wTx)h(\mathbf{x})=\text{sign}({\mathbf{w}^T\mathbf{x}})h(x)=sign(wTx)err(y^,y)=1[y^≠y]\text{err}(\hat{y},y)=\mathbf{1}_{[\hat{y}\ne y]}err(y^,y)=1[y^=y],找它的最优解是个NP-hard问题。

由于{+1,−1}⊂R\{+1,-1\}\subset \mathbb{R}{+1,1}R,即样本的正负类别也能用实数表示,而在线性回归中Y=R\mathcal{Y}=\mathbb{R}Y=R,那么,直接来一发线性回归,得到wLIN\mathbf{w}_\text{LIN}wLIN,然后让g(x)=sign(wLINTx)g(\mathbf{x})=\text{sign}(\mathbf{w}_\text{LIN}^T\mathbf{x})g(x)=sign(wLINTx),这是否可行呢?

把线性分类和线性回归的误差度量分别记为err0/1=1[sign(wTx)≠y]\text{err}_{0/1}=\mathbf{1}_{[\text{sign}(\mathbf{w}^T\mathbf{x})\ne y]}err0/1=1[sign(wTx)=y]errsqr=(wTx−y)2\text{err}_\text{sqr}=({\mathbf{w}^T\mathbf{x}- y})^2errsqr=(wTxy)2,它们的关系如下图:

从中可直观地看出,err0/1≤errsqr\text{err}_{0/1} \le \text{err}_\text{sqr}err0/1errsqr一定成立。由此,有

KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &\text{classif…

也就是说,让回归的EinE_{\text{in}}Ein做得足够好,也可以使得分类的EoutE_{\text{out}}Eout足够小,只不过上限更宽松一些而已。这样做就是用边界的紧度(bound tightness)换取计算效率(efficiency)

一般wLIN\mathbf{w}_\text{LIN}wLIN可用来作为PLA或pocket算法的初始向量。

2 逻辑回归

2.1 逻辑回归算法

二分类中,我们感兴趣的是
f(x)=sign(P(+1∣x)−12)∈+1,−1 f(\mathbf{x})=\text{sign}(P(+1|\mathbf{x})-\dfrac{1}{2}) \in {+1,-1} f(x)=sign(P(+1x)21)+1,1

但在很多场景下,我们想要做的是“软”(soft)分类,即得到某个分类的概率,此时感兴趣的是
f(x)=P(+1∣x)∈[0,1] f(\mathbf{x})=P(+1|\mathbf{x}) \in [0,1] f(x)=P(+1x)[0,1]

问题在于,我们得到的数据标签是样本的类别,而非样本被分到某个类的概率。

对于一个样本的所有特征x=(x0,x1,x2,⋯ ,xd)\mathbf{x}=(x_0, x_1, x_2, \cdots,x_d)x=(x0,x1,x2,,xd),令s=∑i=0dwixis=\sum\limits_{i=0}^{d} w_i x_is=i=0dwixi。我们可用逻辑函数(logistic function)θ(s)\theta(s)θ(s)将它转换成估计的概率。也就是说,逻辑回归(logistic regression)的假设h(x)=θ(wTx)h(\mathbf{x})=\theta(\mathbf{w}^T\mathbf{x})h(x)=θ(wTx)

最常用的逻辑函数是
θ(s)=es1+es=11+e−s\theta(s)=\dfrac{e^s}{1+e^s}=\dfrac{1}{1+e^{-s}}θ(s)=1+eses=1+es1

函数图像如下:

可见,它是个光滑的、单调的、“S”形的(sigmoid)函数。

接下来,要定义逻辑回归的Ein(w)E_\text{in}(\mathbf{w})Ein(w)。先将目标函数f(x)=P(+1∣x)f(\mathbf{x})=P(+1|\mathbf{x})f(x)=P(+1x)反表示为
P(y∣x)={f(x)for y=+11−f(x)for y=−1 P(y|\mathbf{x})=\begin{cases} f(\mathbf{x})&\text{for } y=+1\\ 1-f(\mathbf{x})&\text{for } y=-1 \end{cases} P(yx)={f(x)1f(x)for y=+1for y=1
假设手中的数据集为
D={(x1,∘),(x2,×),…,(xN,×)}\mathcal{D}=\{(\mathbf{x}_1,\circ),(\mathbf{x}_2,\times),\ldots, (\mathbf{x}_N,\times)\}D={(x1,),(x2,×),,(xN,×)}

那么,由fff生成D\mathcal{D}D的概率为
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &P(\mathbf{x}_…
由我们的假设hhh生成D\mathcal{D}D的似然(likelihood)为
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &P(\mathbf{x}_…
如果h≈fh\approx fhf,那么hhh生成D\mathcal{D}D的似然也应该接近于由fff生成D\mathcal{D}D的概率,并且由fff生成D\mathcal{D}D的概率应该是较大的(正好被我们抽样抽到)。所以,机器学习算法可以取
g=arg⁡max⁡hlikelihood(h) g=\mathop{\arg\max}\limits_{h} \text{likelihood}(h) g=hargmaxlikelihood(h)
h(x)=θ(wTx)h(\mathbf{x})=\theta(\mathbf{w}^T\mathbf{x})h(x)=θ(wTx),由函数的性质可知,1−h(x)=h(−x)1-h(\mathbf{x})=h(-\mathbf{x})1h(x)=h(x),所以
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ &\text{likelih…
P(x1)P(\mathbf{x}_1)P(x1)P(x2)P(\mathbf{x}_2)P(x2)、……、P(xN)P(\mathbf{x}_N)P(xN)都与hhh无关,因此有
likelihood(logistic h)∝∏n=1Nh(ynxn) \text{likelihood}(\text{logistic } h)\propto \prod\limits_{n=1}^N h(y_n\mathbf{x}_n) likelihood(logistic h)n=1Nh(ynxn)
现在要将它最大化,以找出最终的hhh。可先把θ(s)\theta(s)θ(s)代入,再取对数(对数函数单调,不改变最大化取值的点),变为
max⁡wln⁡∏n=1Nθ(ynwTxn) \max\limits_\mathbf{w} \ln\prod\limits_{n=1}^N\theta(y_n\mathbf{w}^T\mathbf{x}_n) wmaxlnn=1Nθ(ynwTxn)
再取相反数(最大化变为最小化)、除NNN(不改变最值点)后,又可变为
min⁡w1N∑n=1N−ln⁡θ(ynwTxn) \min\limits_\mathbf{w} \dfrac{1}{N}\sum\limits_{n=1}^N - \ln \theta(y_n\mathbf{w}^T\mathbf{x}_n) wminN1n=1Nlnθ(ynwTxn)
θ(s)\theta(s)θ(s)展开得到
min⁡w1N∑n=1Nln⁡(1+exp⁡(−ynwTxn)) \min\limits_\mathbf{w} \dfrac{1}{N}\sum\limits_{n=1}^N \ln \left(1+\exp(-y_n\mathbf{w}^T\mathbf{x}_n)\right) wminN1n=1Nln(1+exp(ynwTxn))


err(w,x,y)=ln⁡(1+exp⁡(−ywx))\text{err}(\mathbf{w},\mathbf{x},y)=\ln\left(1+\exp(-y\mathbf{w}\mathbf{x})\right)err(w,x,y)=ln(1+exp(ywx))

这就是交叉熵误差(cross-entropy error),而∑n=1Nerr(w,xn,yn)\sum\limits_{n=1}^N \text{err}(\mathbf{w},\mathbf{x}_n,y_n)n=1Nerr(w,xn,yn)就是Ein(w)E_\text{in}(\mathbf{w})Ein(w)

2.2 梯度下降

接下来就要最小化Ein(w)E_\text{in}(\mathbf{w})Ein(w),它是连续的、可微的、二次可微的、凸的,因此可以试着让它梯度为000。求出它的梯度
∇Ein(w)=1N∑n=1Nθ(−ynwTxn)(−ynxn) \nabla E_{\text{in}}(\mathbf{w})=\dfrac{1}{N}\sum_{n=1}^N\theta(-y_n\mathbf{w}^T\mathbf{x}_n)(-y_n\mathbf{x}_n) Ein(w)=N1n=1Nθ(ynwTxn)(ynxn)

它的梯度可以看成是以θ(⋅)\theta(\cdot)θ()为权重的−ynxn-y_n\mathbf{x}_nynxn的加权平均。要让它为0,有两种方式:

  • 让所有的θ(−ynwTxn)\theta(-y_n\mathbf{w}^T\mathbf{x}_n)θ(ynwTxn)都为0,这意味着所有样本都满足ynwnxn≫0y_n\mathbf{w}_n\mathbf{x}_n\gg 0ynwnxn0,也即D\mathcal{D}D是线性可分的;
  • D\mathcal{D}D不是线性可分的,要让加权和为0,这是个非线性方程,没有闭式解(closed-form solution)。

可用与PLA中类似的方法进行迭代,即wt+1←wt+ηv\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+\eta\mathbf{v}wt+1wt+ηv,其中v\mathbf{v}v确定了更新的方向,η\etaη确定了更新的步长,如图:

怎么迭代呢?可用贪心算法,一步步让EinE_\text{in}Ein变小。假设已经给定某个η\etaη,要确定v\mathbf{v}v的方向,每一步的更新问题就转换成了
min⁡∥v∥=1Ein(wt+ηv) \min\limits_{\Vert\mathbf{v}\Vert=1}E_\text{in}(\mathbf{w}_t+\eta\mathbf{v}) v=1minEin(wt+ηv)
看起来仿佛更难解了。但如果η\etaη足够小,我们可以用局部线性近似展开它(泰勒展开,Taylor expansion):
Ein(wt+ηv)≈Ein(wt)+ηvT∇Ein(wt) E_\text{in}(\mathbf{w}_t+\eta\mathbf{v})\approx E_\text{in}(\mathbf{w}_t)+\eta\mathbf{v}^T\nabla E_\text{in}(\mathbf{w}_t) Ein(wt+ηv)Ein(wt)+ηvTEin(wt)
式中Ein(wt)E_\text{in}(\mathbf{w}_t)Ein(wt)∇Ein(wt)\nabla E_\text{in}(\mathbf{w}_t)Ein(wt)已知,η\etaη给定,只需确定v\mathbf{v}v即可,注意到上式第二项本质上是两个向量内积,当两个向量方向相反时值最小,因此要最小化上式,可取
v=−∇Ein(wt)∥∇Ein(wt)∥ \mathbf{v}=-\dfrac{\nabla E_\text{in}(\mathbf{w}_t)}{\Vert\nabla E_\text{in}(\mathbf{w}_t)\Vert} v=Ein(wt)Ein(wt)
梯度下降的迭代更新就变成了:对于给定的较小η\etaη
wt+1←wt−η∇Ein(wt)∥∇Ein(wt)∥\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t-\eta\dfrac{\nabla E_\text{in}(\mathbf{w}_t)}{\Vert\nabla E_\text{in}(\mathbf{w}_t)\Vert}wt+1wtηEin(wt)Ein(wt)

η\etaη太小会导致非常慢,太大会导致不稳定,最好用变化的η\etaη,如下图所示:

那么,η\etaη怎么变比较好?可让它与∥∇Ein(wt)∥\Vert\nabla E_\text{in}(\mathbf{w}_t)\VertEin(wt)正相关,将原来固定的η\etaη乘上∥∇Ein(wt)∥\Vert\nabla E_\text{in}(\mathbf{w}_t)\VertEin(wt)即可。这样,更新规则也就变成了
wt+1←wt−η∇Ein(wt) \mathbf{w}_{t+1}\leftarrow\mathbf{w}_t-\eta{\nabla E_\text{in}(\mathbf{w}_t)} wt+1wtηEin(wt)
这个新的η\etaη可叫作固定的学习率learning rate)。

3 分类的线性模型

3.1 三种算法的比较

s=wTxs=\mathbf{w}^T\mathbf{x}s=wTx,以下是总结三种模型(线性分类、线性回归、逻辑回归):

这里的ysysys可称为分类正确度分数(classification correctness score),即度量分类有多正确,该值越大,说明分类越“正确”。

若将交叉熵误差函数errCE(s,y)\text{err}_\text{CE}(s,y)errCE(s,y)做scale(除ln⁡2\ln 2ln2),得到
errSCE(s,y)=log⁡2(1+exp⁡(−ys))\text{err}_\text{SCE}(s,y)=\log_2(1+\exp(-ys))errSCE(s,y)=log2(1+exp(ys))

把它们的误差函数都画出来,可得下图:

从图中可知,一定有
err0/1≤errSCE(s,y)=1ln⁡2errCE(s,y)\text{err}_{0/1} \le \text{err}_\text{SCE}(s,y) = \dfrac{1}{\ln 2}\text{err}_\text{CE}(s,y)err0/1errSCE(s,y)=ln21errCE(s,y)

由此可以用VC维理论证明,使用errCE\text{err}_\text{CE}errCE也可以做好分类任务,有两种思路:

  • 从分类的角度出发,有

KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ E_\text{out}^{…

  • 从交叉熵角度出发,有

KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ E_\text{out}^{…

不管用哪种方式,只要保证EinCEE_\text{in}^\text{CE}EinCE足够小,都可以保证Eout0/1(w)E_\text{out}^{0/1}(\mathbf{w})Eout0/1(w)也足够小,也就是说,使用逻辑回归或线性回归都可以做线性分类。

用PLA、线性回归、逻辑回归做分类,三种方法的优缺点如下:

3.2 随机梯度下降

PLA每次迭代的时间复杂度为O(1)O(1)O(1),但逻辑回归(或pocket算法)每次迭代都需要对D\mathcal{D}D中的所有样本进行一次运算,时间复杂度为O(N)O(N)O(N),能不能让每次迭代的时间复杂度也变成O(1)O(1)O(1)

我们在做更新wt+1←wt+ηv\mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+\eta\mathbf{v}wt+1wt+ηv时,取了
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \mathbf{v}&=-\…
可以看到,计算梯度需要遍历所有样本,复杂度实在太高了。可将它里面的1N∑n=1N\dfrac{1}{N}\sum\limits_{n=1}^{N}N1n=1N看作是期望E\mathcal{E}E,相当于不断随机抽一个样本计算出来的结果的平均。若将随机抽一个样本nnn算出来的梯度称为随机梯度∇werr(w,xn,yn)\nabla_\mathbf{w}\text{err}(\mathbf{w},\mathbf{x}_n,y_n)werr(w,xn,yn),那么真正的梯度可看作是它的期望:
∇wEin(w)=Erandom n∇werr(w,xn,yn) \nabla_\mathbf{w} E_\text{in}(\mathbf{w})=\mathop{\mathcal{E}}_{\text{random }n}\nabla_\mathbf{w}\text{err}(\mathbf{w},\mathbf{x}_n,y_n) wEin(w)=Erandom nwerr(w,xn,yn)
这样,就可以用随机梯度下降(Stochastic Gradient Descent,SGD)进行迭代。它的好处是非常简单,计算的成本低,非常适用于大数据或在线学习的情况,缺点是不够稳定。

在逻辑回归中,用SGD更新的步骤就变成了
wt+1←wt+η⋅θ(−ynwtTxn)(ynxn) \mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+\eta\cdot \theta(-y_n\mathbf{w}_t^T\mathbf{x}_n)(y_n\mathbf{x}_n) wt+1wt+ηθ(ynwtTxn)(ynxn)
这与PLA中的更新步骤十分相似,PLA中是这样的:
wt+1←wt+1⋅1[yN≠sign(wtTxn)](ynxn) \mathbf{w}_{t+1}\leftarrow\mathbf{w}_t+1 \cdot \mathbf{1}_{[y_N\ne \text{sign}(\mathbf{w}_t^T \mathbf{x}_n)]}(y_n\mathbf{x}_n) wt+1wt+11[yN=sign(wtTxn)](ynxn)
因此用SGD的逻辑回归,可以看作是“软”的PLA。而反过来,若取η=1\eta=1η=1,则PLA在wtTxn\mathbf{w}_t^T \mathbf{x}_nwtTxn很大的时候也可以看作是用SGD的逻辑回归。

在用SGD时,有两个经验法则:

  • 什么时候停止?ttt足够大的时候就可以(不要判断梯度是否真的为0,否则又会带来梯度计算的复杂度);
  • x\mathbf{x}x在一般范围内时,就取η=0.1\eta=0.1η=0.1吧。

4 多分类问题

4.1 用逻辑回归做多分类

假设Y={□,♢,△,⋆}\mathcal{Y}=\{\square, \diamondsuit,\triangle,\star\}Y={,,,},数据分布如下图:

可对每个类别分别做一次分类,如下图:

但这样做,在最后要把它们结合起来时,会出现问题,有些区域无法判定属于哪一类:

怎么解决呢?可以用逻辑回归做“软”分类器,依旧是对每个类别kkk,用数据集
D[k]={(xn,yn′=2⋅1[yn=k]−1)}n=1N \mathcal{D}_{[k]}=\{(\mathbf{x}_n,y_n'=2\cdot\mathbf{1}_{[y_n=k]}-1)\}_{n=1}^{N} D[k]={(xn,yn=21[yn=k]1)}n=1N
做一次逻辑回归,得到一个分类器w[k]\mathbf{w}_{[k]}w[k]

做完后要将它们结合起来,可取g(x)=arg⁡max⁡k∈Yθ(w[k]Tx)g(\mathbf{x})=\arg\max_{k\in\mathcal{Y}}\theta(\mathbf{w}_{[k]}^T\mathbf{x})g(x)=argmaxkYθ(w[k]Tx),这样就得到某个点应该属于哪一类了:

这样做称为OVA(One-Versus-All) Decomposition,好处是有效率,可以和类似逻辑回归的方法结合起来,但缺点在于当KKK很大时,往往会使D[k]\mathcal{D}_{[k]}D[k]非常不平衡,比如有100类,并且分布比较均匀,OVA每次用于训练的样本的两类数据的个数就会非常悬殊。

可以再进行扩展,如multinomial (‘coupled’) logistic regression,加入一些如“属于不同类的概率加起来应该为1”之类的限制,让它更适合用于多分类。

4.2 用二分类做多分类

为了克服不平衡问题,可以对两两类别进行训练,即用数据集
D[k,ℓ]={(xn,yn′=2⋅1[yn=k]−1):yn=k or yn=ℓ} \mathcal{D}_{[k,\ell]}=\{(\mathbf{x}_n,y_n'=2\cdot\mathbf{1}_{[y_n=k]}-1):y_n=k\text{ or } y_n=\ell\} D[k,]={(xn,yn=21[yn=k]1):yn=k or yn=}
进行线性二分类:

最后,取
g(x)=tournament champion{w[k,ℓ]Tx}g(\mathbf{x})=\text{tournament champion}\{\mathbf{w}_{[k,\ell]}^T\mathbf{x}\}g(x)=tournament champion{w[k,]Tx}

即可:

这样的方法叫作OVO(One-Versus-One)Decomposition,好处在于有效率(因为每次训练用的数据量较少),并且是稳定的,可以和任何二分类方法相结合,但缺点在于不断计算w[k,ℓ]\mathbf{w}_{[k,\ell]}w[k,]的操作总共的复杂度是O(K2)O(K^2)O(K2),需要更多运算空间。当KKK不是非常大时,OVO很常用。

5 非线性变换

对于某些数据集来说,不管怎么使用线性模型,EinE_{in}Ein都很大:

5.1 二次的假设集

我们发现,如果用一个圆来做它的分类界线,它其实是可分的:

所以我们要重新设计圆形PLA、圆形回归、……吗?当然不是。我们可以将x∈X\mathbf{x}\in\mathcal{X}xX用变换Φ\PhiΦ映射到z∈Z\mathbf{z}\in\mathcal{Z}zZ,使得在X\mathcal{X}X中圆形可分的数据在Z\mathcal{Z}Z中线性可分。

通过由Φ2(x)=(1,x1,x2,x12,x1x2,x22)\Phi_2(\mathbf{x})=(1,x_1,x_2,x_1^2,x_1x_2,x^2_2)Φ2(x)=(1,x1,x2,x12,x1x2,x22)映射而来的Z\mathcal{Z}Z空间,可构成一般的二次假设集:
HΦ2={h(x):h(x)=h~(Φ2(x)) for some linear h~ on Z} \mathcal{H}_{\Phi_2}=\{h(\mathbf{x}):h(\mathbf{x})=\tilde h(\Phi_2(\mathbf{x}))\text{ for some linear }\tilde h \text{ on }\mathcal{Z}\} HΦ2={h(x):h(x)=h~(Φ2(x)) for some linear h~ on Z}
当然也可以用更高次的非线性变换,用非线性变换的流程如下图:

具体步骤如下:

  1. 先用Φ\PhiΦ{(xn,yn)}\{(\mathbf{x}_n,y_n)\}{(xn,yn)}变换到{(zn=Φ(xn),yn)}\{(\mathbf{z}_n=\Phi(\mathbf{x}_n),y_n)\}{(zn=Φ(xn),yn)}
  2. {(zn,yn)}\{(\mathbf{z}_n,y_n)\}{(zn,yn)}和线性分类算法A\mathcal{A}A训练出模型w~\tilde{\mathbf{w}}w~
  3. 返回g(x)=sign(w~TΦ(x))g(\mathbf{x})=\text{sign}\left(\tilde{\mathbf{w}}^T \Phi(\mathbf{x})\right)g(x)=sign(w~TΦ(x))即可。

5.2 复杂度的代价

假设用QQQ次的非线性变换:
KaTeX parse error: No such environment: split at position 8: \begin{̲s̲p̲l̲i̲t̲}̲ \Phi_Q(\mathbf…
式中的项数1+d~1+\tilde d1+d~是多少呢?若有ddd个特征,可以在补上1后认为上面式子后边的每一项都是QQQ次的,也就是说要对d+1d+1d+1项每项都赋予一个次数,并且所有次数之和必须为QQQ。可以用隔板法:想象共有Q+d+1Q+d+1Q+d+1个小球,要在它们的空隙中放入ddd个隔板,隔成d+1d+1d+1段,每一段的小球个数减去1代表了对应位置的项的次数,由于要求每段中至少有1个小球,因此两端不能放隔板,共有Q+dQ+dQ+d个位置可放隔板,共有(Q+dd)\binom{Q+d}{d}(dQ+d)种放法,也就是说,上式等号右边的项数
1+d~=(Q+dd)=O(Qd) 1+\tilde d=\binom{Q+d}{d}=O(Q^d) 1+d~=(dQ+d)=O(Qd)
QQQ较大时,一方面计算或存储的成本非常高,另一方面1+d~1+\tilde d1+d~dVC(HΦQ)d_\text{VC}(\mathcal{H}_{\Phi_Q})dVC(HΦQ)的上界,QQQ太大会导致dVCd_\text{VC}dVC过大,模型损失了泛化能力。

5.3 QQQ的选择

如何选择QQQ?假设Φ0(x)=(1)\Phi_0(\mathbf{x})=(1)Φ0(x)=(1)Φ1(x)=(Φ0(x),x1,x2,…,xd,)\Phi_1(\mathbf{x})=\left(\Phi_0(\mathbf{x}),x_1,x_2,\ldots,x_d,\right)Φ1(x)=(Φ0(x),x1,x2,,xd,),……,ΦQ(x)=(ΦQ−1(x),x1Q,x1Q−1x2,…,xdQ,)\Phi_Q(\mathbf{x})=\left(\Phi_{Q-1}(\mathbf{x}),x_1^Q,x_1^{Q-1}x_2,\ldots,x_d^Q,\right)ΦQ(x)=(ΦQ1(x),x1Q,x1Q1x2,,xdQ,),将它们的假设集分别记为H0\mathcal{H}_0H0H1\mathcal{H}_1H1,……,HQ\mathcal{H}_QHQ,它们存在嵌套关系
H0⊂H1⊂H2⊂⋯ \mathcal{H}_0 \subset \mathcal{H}_1\subset\mathcal{H}_2\subset\cdots H0H1H2
如图所示:

并且,它们的VC维满足
dVC(H0)≤dVC(H1)≤dVC(H2)≤⋯ d_\text{VC}(\mathcal{H}_0)\le d_\text{VC}(\mathcal{H}_1)\le d_\text{VC}(\mathcal{H}_2)\le\cdots dVC(H0)dVC(H1)dVC(H2)
若取gi=arg⁡min⁡h∈HiEin(h)g_i=\arg\min_{h\in \mathcal{H}_i} E_\text{in}(h)gi=argminhHiEin(h),则它们的EinE_\text{in}Ein满足
Ein(g0)≥Ein(g1)≥Ein(g2)≥⋯ E_\text{in}(g_0)\ge E_\text{in}(g_1)\ge E_\text{in}(g_2)\ge \cdots Ein(g0)Ein(g1)Ein(g2)
如何选择QQQ?安全的做法是,先看Ein(g1)E_\text{in}(g_1)Ein(g1)是否已经足够小,如果足够小,就可以了,否则,就用再稍微复杂一些的模型,也就是在下图中向右移动:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值