机器学习逻辑回归与softmax

机器学习逻辑回归与softmax

机器学习中的线性模型

谈及线性模型,其实我们很早就已经与它打过交道,还记得高中数学必修3课本中那个顽皮的“最小二乘法”吗?这就是线性模型的经典算法之一:根据给定的(x,y)点对,求出一条与这些点拟合效果最好的直线y=ax+b,之前我们利用下面的公式便可以计算出拟合直线的系数a,b(3.1中给出了具体的计算过程),从而对于一个新的x,可以预测它所对应的y值。前面我们提到:在机器学习的术语中,当预测值为连续值时,称为“回归问题”,离散值时为“分类问题”。本篇先从线性回归任务开始,接着讨论分类和多分类问题。

1.png

线性回归

线性回归问题就是试图学到一个线性模型尽可能准确地预测新样本的输出值,例如:通过历年的人口数据预测2017年人口数量。在这类问题中,往往我们会先得到一系列的有标记数据,例如:2000–>13亿…2016–>15亿,这时输入的属性只有一个,即年份;也有输入多属性的情形,假设我们预测一个人的收入,这时输入的属性值就不止一个了,例如:(学历,年龄,性别,颜值,身高,体重)–>15k。

有时这些输入的属性值并不能直接被我们的学习模型所用,需要进行相应的处理,对于连续值的属性,一般都可以被学习器所用,有时会根据具体的情形作相应的预处理,例如:归一化等;对于离散值的属性,可作下面的处理:

  • 若属性值之间存在“序关系”,则可以将其转化为连续值,例如:身高属性分为“高”“中等”“矮”,可转化为数值:{1, 0.5, 0}。

  • 若属性值之间不存在“序关系”,则通常将其转化为向量的形式,例如:性别属性分为“男”“女”,可转化为二维向量:{(1,0),(0,1)}。

(1)当输入属性只有一个的时候,就是最简单的情形,也就是我们高中时最熟悉的“最小二乘法”(Euclidean distance),首先计算出每个样本预测值与真实值之间的误差并求和,通过最小化均方误差MSE,使用求偏导等于零的方法计算出拟合直线y=wx+b的两个参数w和b,计算过程如下图所示:

2.png

(2)当输入属性有多个的时候,例如对于一个样本有d个属性{(x1,x2…xd),y},则y=wx+b需要写成:

0.png

通常对于多元问题,常常使用矩阵的形式来表示数据。在本问题中,将具有m个样本的数据集表示成矩阵X,将系数w与b合并成一个列向量,这样每个样本的预测值以及所有样本的均方误差最小化就可以写成下面的形式:

3.png

4.png

5.png

avatar

avatar

avatar

avatar

最小二乘法

同样地,我们使用最小二乘法对w和b进行估计,令均方误差的求导等于0,需要注意的是,当一个矩阵的行列式不等于0时,我们才可能对其求逆,因此对于下式,我们需要考虑矩阵(X的转置*X)的行列式是否为0,若不为0,则可以求出其解,若为0,则需要使用其它的方法进行计算,书中提到了引入正则化,此处不进行深入。

6.png

然而现实任务中当特征数量大于样本数时,XTX不满秩,此时θ有多个解;而且当数据量大时,求矩阵的逆非常耗时;对于不可逆矩阵(特征之间不相互独立),这种正规方程方法是不能用的。所以,还可以采用梯度下降法,利用迭代的方式求解θ。

梯度下降法

梯度下降法是按下面的流程进行的:
1)首先对θ赋值,这个值可以是随机的,也可以让θ是一个全零的向量。
2)改变θ的值,使得θ按梯度下降的方向进行减少。

avatar

对于只有两维属性的样本,J(θ)即J(θ0,θ1)的等高线图

avatar

avatar

迭代更新的方式有多种

  • 批量梯度下降(batch gradient descent),也就是是梯度下降法最原始的形式,对全部的训练数据求得误差后再对θ
    进行更新,优点是每步都趋向全局最优解;缺点是对于大量数据,由于每步要计算整体数据,训练过程慢;
  • 随机梯度下降(stochastic gradient descent),每一步随机选择一个样本对θ
    进行更新,优点是训练速度快;缺点是每次的前进方向不好确定,容易陷入局部最优;
  • 微型批量梯度下降(mini-batch gradient descent),每步选择一小批数据进行批量梯度下降更新θ
    ,属于批量梯度下降和随机梯度下降的一种折中,非常适合并行处理。

另一方面,有时像上面这种原始的线性回归可能并不能满足需求,例如:y值并不是线性变化,而是在指数尺度上变化。这时我们可以采用线性模型来逼近y的衍生物,例如lny,这时衍生的线性模型如下所示,实际上就是相当于将指数曲线投影在一条直线上,如下图所示:

7.png

更一般地,考虑所有y的衍生物的情形,就得到了“广义的线性模型”(generalized linear model),其中,g(*)称为联系函数(link function)。

8.png

对数几率回归

回归就是通过输入的属性值得到一个预测值,利用上述广义线性模型的特征,是否可以通过一个联系函数,将预测值转化为离散值从而进行分类呢?线性几率回归正是研究这样的问题。对数几率引入了一个对数几率函数(logistic function),将预测值投影到0-1之间,从而将线性回归问题转化为二分类问题。

9.png

10.png

若将y看做样本为正例的概率,(1-y)看做样本为反例的概率,则上式实际上使用线性回归模型的预测结果器逼近真实标记的对数几率。因此这个模型称为“对数几率回归”(logistic regression),也有一些书籍称之为“逻辑回归”。下面使用最大似然估计的方法来计算出w和b两个参数的取值,下面只列出求解的思路,不列出具体的计算过程。

11.png

12.png

线性判别分析

线性判别分析(Linear Discriminant Analysis,简称LDA),其基本思想是:将训练样本投影到一条直线上,使得同类的样例尽可能近,不同类的样例尽可能远。如图所示:

13.png14.png

想让同类样本点的投影点尽可能接近,不同类样本点投影之间尽可能远,即:让各类的协方差之和尽可能小,不用类之间中心的距离尽可能大。基于这样的考虑,LDA定义了两个散度矩阵。

  • 类内散度矩阵(within-class scatter matrix)

15.png

  • 类间散度矩阵(between-class scaltter matrix)

16.png

因此得到了LDA的最大化目标:“广义瑞利商”(generalized Rayleigh quotient)。

17.png

从而分类问题转化为最优化求解w的问题,当求解出w后,对新的样本进行分类时,只需将该样本点投影到这条直线上,根据与各个类别的中心值进行比较,从而判定出新样本与哪个类别距离最近。求解w的方法如下所示,使用的方法为λ乘子。

18.png

若将w看做一个投影矩阵,类似PCA的思想,则LDA可将样本投影到N-1维空间(N为类簇数),投影的过程使用了类别信息(标记信息),因此LDA也常被视为一种经典的监督降维技术。

回归与欠/过拟合

avatar

线性回归与正则化

avatar

多分类学习

现实中我们经常遇到不只两个类别的分类问题,即多分类问题,在这种情形下,我们常常运用“拆分”的策略,通过多个二分类学习器来解决多分类问题,即将多分类问题拆解为多个二分类问题,训练出多个二分类学习器,最后将多个分类结果进行集成得出结论。最为经典的拆分策略有三种:“一对一”(OvO)、“一对其余”(OvR)和“多对多”(MvM),核心思想与示意图如下所示。

  • OvO:给定数据集D,假定其中有N个真实类别,将这N个类别进行两两配对(一个正类/一个反类),从而产生N(N-1)/2个二分类学习器,在测试阶段,将新样本放入所有的二分类学习器中测试,得出N(N-1)个结果,最终通过投票产生最终的分类结果。

  • OvM:给定数据集D,假定其中有N个真实类别,每次取出一个类作为正类,剩余的所有类别作为一个新的反类,从而产生N个二分类学习器,在测试阶段,得出N个结果,若仅有一个学习器预测为正类,则对应的类标作为最终分类结果。

  • MvM:给定数据集D,假定其中有N个真实类别,每次取若干个类作为正类,若干个类作为反类(通过ECOC码给出,编码),若进行了M次划分,则生成了M个二分类学习器,在测试阶段(解码),得出M个结果组成一个新的码,最终通过计算海明/欧式距离选择距离最小的类别作为最终分类结果。

19.png

20.png

类别不平衡问题

类别不平衡(class-imbanlance)就是指分类问题中不同类别的训练样本相差悬殊的情况,例如正例有900个,而反例只有100个,这个时候我们就需要进行相应的处理来平衡这个问题。常见的做法有三种:

  1. 在训练样本较多的类别中进行“欠采样”(undersampling),比如从正例中采出100个,常见的算法有:EasyEnsemble。
  2. 在训练样本较少的类别中进行“过采样”(oversampling),例如通过对反例中的数据进行插值,来产生额外的反例,常见的算法有SMOTE。
  3. 直接基于原数据集进行学习,对预测值进行“再缩放”处理。其中再缩放也是代价敏感学习的基础。21.png

LR应用经验

LR实现简单高效易解释,计算速度快,易并行,在大规模数据情况下非常适用,更适合于应对数值型和标称型数据,主要适合解决线性可分的问题,但容易欠拟合,大多数情况下需要手动进行特征工程,构建组合特征,分类精度不高。

LR直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题
LR能以概率的形式输出,而非知识0,1判定,对许多利用概率辅助决策的任务很有用
对率函数任意阶可导,具有很好的数学性质,许多现有的数值优化算法都可以用来求最优解,训练速度快
适用情景:LR是很多分类算法的基础组件,它的好处是输出值自然地落在0到1之间,并且有概率意义。因为它本质上是一个线性的分类器,所以处理不好特征之间相关的情况。虽然效果一般,却胜在模型清晰,背后的概率学经得住推敲。它拟合出来的参数就代表了每一个特征(feature)对结果的影响。也是一个理解数据的好工具。

应用上:

  • CTR预估,推荐系统的learning to rank,各种分类场景
  • 某搜索引擎厂的广告CTR预估基线版是LR
  • 某电商搜索排序基线版是LR
  • 某新闻app排序基线版是LR

大规模工业实时数据,需要可解释性的金融数据,需要快速部署低耗时数据
LR就是简单,可解释,速度快,消耗资源少,分布式性能好

ADMM-LR:用ADMM求解LogisticRegression的优化方法称作ADMM_LR。ADMM算法是一种求解约束问题的最优化方法,它适用广泛。相比于SGD,ADMM在精度要求不高的情况下,在少数迭代轮数时就达到一个合理的精度,但是收敛到很精确的解则需要很多次迭代。

avatar

avatar

avatar

LR多分类推广 - Softmax回归

LR是一个传统的二分类模型,它也可以用于多分类任务,其基本思想是:将多分类任务拆分成若干个二分类任务,然后对每个二分类任务训练一个模型,最后将多个模型的结果进行集成以获得最终的分类结果。一般来说,可以采取的拆分策略有:

one vs one策略

  假设我们有N个类别,该策略基本思想就是不同类别两两之间训练一个分类器,这时我们一共会训练出img种不同的分类器。在预测时,我们将样本提交给所有的分类器,一共会获得N(N-1)个结果,最终结果通过投票产生。

one vs all策略

  该策略基本思想就是将第i种类型的所有样本作为正例,将剩下的所有样本作为负例,进行训练得到一个分类器。这样我们就一共可以得到N个分类器。在预测时,我们将样本提交给所有的分类器,一共会获得N个结果,我们选择其中概率值最大的那个作为最终分类结果。 img

softmax回归

  softmax是LR在多分类的推广。与LR一样,同属于广义线性模型。什么是Softmax函数?假设我们有一个数组A,img表示的是数组A中的第i个元素,那么这个元素的Softmax值就是

            img

也就是说,是该元素的指数,与所有元素指数和的比值。那么 softmax回归模型的假设函数又是怎么样的呢?

          img

由上式很明显可以得出,假设函数的分母其实就是对概率分布进行了归一化,使得所有类别的概率之和为1;也可以看出LR其实就是K=2时的Softmax。在参数获得上,我们可以采用one vs all策略获得K个不同的训练数据集进行训练,进而针对每一类别都会得到一组参数向量img。当测试样本特征向量img输入时,我们先用假设函数针对每一个类别img估算出概率值img。因此我们的假设函数将要输出一个K维的向量(向量元素和为1)来表示K个类别的估计概率,我们选择其中得分最大的类别作为该输入的预测类别。Softmax看起来和one vs all 的LR很像,它们最大的不同在与Softmax得到的K个类别的得分和为1,而one vs all的LR并不是。

softmax的代价函数

  类似于LR,其似然函数我们采用对数似然,故:

    img

加入img正则项的损失函数为:

    img

此处的img为符号函数。对于其参数的求解过程,我们依然采用梯度下降法。

softmax的梯度的求解

  正则化项的求导很简单,就等于img,下面我们主要讨论没有加正则项的损失函数的梯度求解,即

      img

的导数(梯度)。为了使得求解过程看起来简便、易于理解,我们仅仅只对于一个样本(x,y)情况(SGD)进行讨论,

    img

此时,我们令

    img

可以得到

    img

故:

img

所以,正则化之后的损失函数的梯度为

    img

然后通过梯度下降法最小化 \textstyle J(\theta),我们就能实现一个可用的 softmax 回归模型了。

多分类LR与Softmax回归

  有了多分类的处理方法,那么我们什么时候该用多分类LR?什么时候要用softmax呢?

总的来说,若待分类的类别互斥,我们就使用Softmax方法;若待分类的类别有相交,我们则要选用多分类LR,然后投票表决。

Softmax分类器

SVM是最常用的两个分类器之一,而另一个就是Softmax分类器,它的损失函数与SVM的损失函数不同。对于学习过二元逻辑回归分类器的读者来说,Softmax分类器就可以理解为逻辑回归分类器面对多个分类的一般化归纳。SVM将输出[公式]作为每个分类的评分(因为无定标,所以难以直接解释)。与SVM不同,Softmax的输出(归一化的分类概率)更加直观,并且从概率上可以解释,这一点后文会讨论。在Softmax分类器中,函数映射[公式]保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失cross-entropy loss)。公式如下:

[公式] 或等价的 [公式]

在上式中,使用[公式]来表示分类评分向量[公式]中的第j个元素。和之前一样,整个数据集的损失值是数据集中所有样本数据的损失值[公式]的均值与正则化损失[公式]之和。其中函数[公式]被称作softmax 函数:其输入值是一个向量,向量中元素为任意实数的评分值([公式]中的),函数对其进行压缩,输出一个向量,其中每个元素值在0到1之间,且所有元素之和为1。所以,包含softmax函数的完整交叉熵损失看起唬人,实际上还是比较容易理解的。

信息理论视角:在“真实”分布[公式]和估计分布[公式]之间的交叉熵定义如下:

[公式]

*译者注:Kullback-Leibler差异(Kullback-Leibler Divergence)也叫做相对熵(Relative Entropy),它衡量的是相同事件空间里的两个概率分布的差异情况。*

概率论解释:先看下面的公式:

[公式]

实操事项:数值稳定。编程实现softmax函数计算的时候,中间项[公式][公式]因为存在指数函数,所以数值可能非常大。除以大数值可能导致数值计算的不稳定,所以学会使用归一化技巧非常重要。如果在分式的分子和分母都乘以一个常数[公式],并把它变换到求和之中,就能得到一个从数学上等价的公式:

[公式]

1
2
3
4
5
6
f = np.array([123, 456, 789]) # 例子中有3个分类,每个评分的数值都很大
p = np.exp(f) / np.sum(np.exp(f)) # 不妙:数值问题,可能导致数值爆炸

# 那么将f中的值平移到最大值为0:
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # 现在OK了,将给出正确结果

让人迷惑的命名规则:精确地说,SVM分类器使用的是折叶损失(hinge loss),有时候又被称为最大边界损失(max-margin loss)。Softmax分类器使用的是交叉熵损失(corss-entropy loss)。Softmax分类器的命名是从softmax函数那里得来的,softmax函数将原始分类评分变成正的归一化数值,所有数值和为1,这样处理后交叉熵损失才能应用。注意从技术上说“softmax损失(softmax loss)”是没有意义的,因为softmax只是一个压缩数值的函数。但是在这个说法常常被用来做简称。

SVM和Softmax的比较

下图有助于区分这 Softmax和SVM这两种分类器:

————————————————————————————————————————

img

针对一个数据点,SVM和Softmax分类器的不同处理方式的例子。两个分类器都计算了同样的分值向量f(本节中是通过矩阵乘来实现)。不同之处在于对f中分值的解释:SVM分类器将它们看做是分类评分,它的损失函数鼓励正确的分类(本例中是蓝色的类别2)的分值比其他分类的分值高出至少一个边界值。Softmax分类器将这些数值看做是每个分类没有归一化的对数概率,鼓励正确分类的归一化的对数概率变高,其余的变低。SVM的最终的损失值是1.58,Softmax的最终的损失值是0.452,但要注意这两个数值没有可比性。只在给定同样数据,在同样的分类器的损失值计算中,它们才有意义。

————————————————————————————————————————

Softmax分类器为每个分类提供了“可能性”:SVM的计算是无标定的,而且难以针对所有分类的评分值给出直观解释。Softmax分类器则不同,它允许我们计算出对于所有分类标签的可能性。举个例子,针对给出的图像,SVM分类器可能给你的是一个[12.5, 0.6, -23.0]对应分类“猫”,“狗”,“船”。而softmax分类器可以计算出这三个标签的”可能性“是[0.9, 0.09, 0.01],这就让你能看出对于不同分类准确性的把握。为什么我们要在”可能性“上面打引号呢?这是因为可能性分布的集中或离散程度是由正则化参数λ直接决定的,λ是你能直接控制的一个输入参数。举个例子,假设3个分类的原始分数是[1, -2, 0],那么softmax函数就会计算:

[公式]

现在,如果正则化参数λ更大,那么权重W就会被惩罚的更多,然后他的权重数值就会更小。这样算出来的分数也会更小,假设小了一半吧[0.5, -1, 0],那么softmax函数的计算就是:

[公式]

现在看起来,概率的分布就更加分散了。还有,随着正则化参数λ不断增强,权重数值会越来越小,最后输出的概率会接近于均匀分布。这就是说,softmax分类器算出来的概率最好是看成一种对于分类正确性的自信。和SVM一样,数字间相互比较得出的大小顺序是可以解释的,但其绝对值则难以直观解释

在实际使用中,SVM和Softmax经常是相似的:通常说来,两种分类器的表现差别很小,不同的人对于哪个分类器更好有不同的看法。相对于Softmax分类器,SVM更加“局部目标化(local objective)”,这既可以看做是一个特性,也可以看做是一个劣势。考虑一个评分是[10, -2, 3]的数据,其中第一个分类是正确的。那么一个SVM([公式])会看到正确分类相较于不正确分类,已经得到了比边界值还要高的分数,它就会认为损失值是0。SVM对于数字个体的细节是不关心的:如果分数是[10, -100, -100]或者[10, 9, 9],对于SVM来说没设么不同,只要满足超过边界值等于1,那么损失值就等于0。

对于softmax分类器,情况则不同。对于[10, 9, 9]来说,计算出的损失值就远远高于[10, -100, -100]的。换句话来说,softmax分类器对于分数是永远不会满意的:正确分类总能得到更高的可能性,错误分类总能得到更低的可能性,损失值总是能够更小。但是,SVM只要边界值被满足了就满意了,不会超过限制去细微地操作具体分数。这可以被看做是SVM的一种特性。举例说来,一个汽车的分类器应该把他的大量精力放在如何分辨小轿车和大卡车上,而不应该纠结于如何与青蛙进行区分,因为区分青蛙得到的评分已经足够低了。

文章目录
  1. 1. 机器学习逻辑回归与softmax
    1. 1.1. 机器学习中的线性模型
      1. 1.1.1. 线性回归
      2. 1.1.2. 最小二乘法
      3. 1.1.3. 梯度下降法
      4. 1.1.4. 对数几率回归
      5. 1.1.5. 线性判别分析
      6. 1.1.6. 回归与欠/过拟合
      7. 1.1.7. 线性回归与正则化
      8. 1.1.8. 多分类学习
      9. 1.1.9. 类别不平衡问题
      10. 1.1.10. LR应用经验
    2. 1.2. LR多分类推广 - Softmax回归
      1. 1.2.1. one vs one策略
      2. 1.2.2. one vs all策略
    3. 1.3. softmax回归
      1. 1.3.1. softmax的代价函数
      2. 1.3.2. softmax的梯度的求解
      3. 1.3.3. 多分类LR与Softmax回归
    4. 1.4. Softmax分类器
    5. 1.5. SVM和Softmax的比较
|