机器学习入门 9-2 逻辑回归的损失函数

2020-02-26 16:47:49 浏览数 (1)

祝大家情人节快乐,有情人终成眷属。也祝我家的又宝宝情人节快乐!

全文字数:3846字

阅读时间:10分钟

前言

本系列是《玩转机器学习教程》一个整理的视频笔记。在上一小节介绍了逻辑回归的大致框架,有了大致框架就需要建模来求解参数θ值。本小节重点介绍逻辑回归的损失函数。

a

逻 辑 回 归 的 损 失 函 数

在上一小节介绍了逻辑回归算法的大致框架:给定一个样本xb(在样本第一个特征的前面填上数值1,为了让b阈值也加入矩阵相乘运算中),让xb与待优化参数θ相乘,相乘后的结果作为Sigmoid函数的输入,输出的结果为一个范围为(0, 1)的概率估计值p_hat。最后对得到的概率估计值p_hat与选定的阈值0.5进行判断:

  • 如果概率估计值大于等于0.5,即p_hat >= 0.5,将这个样本xb分类到"类别1";
  • 如果概率估计值小于0.5,即p_hat < 0.5,将这个样本xb分类到"类别0";

有了大致框架,现在最重要的问题就是如何来建模求出这个θ值?

Tips:为了清晰方便的说明,我这里将逻辑回归模型p_hat称为概率估计值,y_hat称为类别估计值,样本对应的目标值y称为类别真实值。估计值是模型输出的实际结果,而真实值是样本的真实标签值。p_hat取值范围为(0, 1),而y_hat与y的取值为"类别1"或"类别0"。

回忆一下在线性回归中将θ乘上xb之后的结果直接作为估计值,通过xb在线性回归模型上的估计值与样本xb的真实值之差的平均值作为度量模型好坏的指标,也就是MSE损失函数。只需要找到能够让MSE损失函数最小的θ值就可以了。

其实对于逻辑回归来说整体的建模方向和线性回归是一致的,只不过此时不能像线性回归模型那样直接将输出结果作为估计值,所以定义逻辑回归的损失函数相对于线性回归来说比较困难。线性回归和逻辑回归最大的区别在于处理的任务不同,线性回归模型处理的是回归任务,而逻辑回归模型处理的是分类任务,所以对于逻辑回归来说样本xb对应的真实值y不再属于实数域,而是"类别1"和"类别0"的类别标签,通过逻辑回归输出的概率估计值p_hat能够决定类别估计值y_hat是"类别1"还是"类别0"。

▲逻辑回归

由于只有两个类别,相应的损失函数也分成两个类别。看上图中cost部分:

  • 如果y(y上面没有小帽子,此时的y代表的是真实值)为"类别1",此时的p_hat值越小的话,模型越倾向于将类别估计值y_hat估计成"类别0",此时y类别真实值与y_hat类别估计值不一致,很明显此时的损失cost应该越来越大;
  • 如果y(y上面没有小帽子,此时的y代表的是真实值)为"类别0",此时的p_hat值越来越大的话,模型越倾向于将类别估计值y_hat估计成"类别1",此时y类别真实值与y_hat类别估计值不一致,很明显此时的损失cost也应该越来越大;

我们首先根据逻辑回归的"类别1"和"类别0"两种不同的类别制定出了这个损失函数的大致趋势,接下来继续探讨什么样的函数能够表示这种趋势?

在这里我们使用下图所示这样的函数,虽然看起来非常的复杂,但是如果仔细分析的话非常容易理解。

▲cost分段表达式的定义

接来下就来具体的分析一下上面给出的cost分段表达式:

  • 首先来看当类别真实值y为"类别1"的cost函数

当类别真实值y为"类别1"的时候,我们将cost函数定义为-log(p_hat),为了能够更加清晰的了解缘由,这里我将一步一步的进行剖析。

绘制出log(x)曲线:

▲log(x)函数曲线

绘制出-log(x)曲线:

▲-log(x)函数曲线

log(x)和-log(x)是关于x轴对称的。此时需要注意p_hat估计值的范围在(0, 1)之间,继续绘制对应范围的函数曲线:

▲-log(x) x ∈ (0, 1)的函数曲线

当样本类别真实值y为"类别1"的时候,损失cost为-log(p_hat)的曲线如上图所示。很容易发现:

  1. 当概率估计值p_hat = 0的时候,按照划定阈值0.5判定输出类别估计值y_hat为"类别0",但是此时样本的类别真实值为"类别1",显然模型分类错误,此时的损失值应该最大。当p_hat = 0的时候,-log(p_hat) = ∞ ;
  2. 随着概率估计值p_hat的值逐渐增大,-log(p_hat)的损失值也会越来越小;
  3. 当概率估计值p_hat = 1的时候,按照划定阈值0.5判定输出类别估计值y_hat为"类别1",此时样本的类别真实值为"类别1",显然模型分类正确,此时的损失值应该最小。当p_hat = 1的时候,-log(p_hat) = 0;
  • 接下来看当类别真实值y为"类别0"的cost函数

绘制y = -log(-x)曲线:

▲-log(-x)的函数曲线

y = -log(-x)曲线与y = -log(x)曲线关于y轴对称,由于y = -log(x)曲线过(1, 0)点,显然y = -log(-x)一定过(-1, 0)点,现在我们让这根曲线向右平移一个单位,此时的曲线变成了y = -log(1-x)。

▲-log(1-x)的函数曲线

对于上面的这根曲线,将取值范围为(0, 1)的p_hat传进入,所以(1 - p_hat)也在(0, 1)之间。所以对于y = -log(1-x)曲线,我们只需要看(0, 1)这一段就可以了。

▲-log(1-x)&y = -log(x) x ∈ (0, 1)的函数曲线

在前面我们如果不向右移动一个单位的话,y = -log(-x)会无限逼近于x = 0。现在将函数图像右移了一个单位,y = -log(1 - x)会无限逼近于x = 1这条竖直方向轴。

当样本类别真实值y为"类别0"的时候,损失cost为-log(1 - p_hat)的曲线如上图所示。很容易发现:

  1. 当概率估计值p_hat = 1的时候,按照划定阈值0.5判定输出类别估计值y_hat为"类别1",此时模型认为样本100%的可能属于"类别1",但是此时样本的类别真实值为"类别0",显然模型分类错误,此时的损失值应该最大。当p_hat = 1的时候,-log(1- p_hat) = ∞ ;
  2. 随着概率估计值p_hat的值逐渐减小,-log(1 - p_hat)的损失值也会越来越大;
  3. 当概率估计值p_hat = 0的时候,按照划定阈值0.5判定输出类别估计值y_hat为"类别0",此时样本的类别真实值为"类别0",显然模型分类正确,此时的损失值应该最小。当p_hat = 0的时候,-log(1- p_hat) = 0;

至此就应该理解为什么会用这两根曲线作为损失函数了。

通过上面的学习了解了使用两个函数作为损失函数,但是上面定义的cost函数是一个分段函数,需要根据样本的类别真实值y取"类别1"还是"类别0"来选择不同的cost函数,这显然是不方便的。当然可以使用非常简单的手段将上面的分段函数合并成一个函数。

▲合并后的损失函数

上图中的两个函数是等价的。当类别真实值y为"类别1"的时候,将y = 1代入合并后的函数得cost= -log(p_hat),而当类别真实值y为"类别0"的时候,将y = 0代入合并后的函数得cost= -log(1 - p_hat),这样就通过一个非常巧妙的方式将一个分段函数合并成了一个式子。

当面对一个样本xb的时候,可以相应的使用合并后的cost函数计算损失值。实际中样本通常有很多,如果此时有m个样本,只需要将在所有样本上计算的cost值相加求平均即可。

▲m个样本的损失函数J(θ)

J(θ)就是逻辑回归的损失函数。可以看出J(θ)中包含着p_hat,我们在上一小节中介绍了计算p_hat的表达式。由于J(θ)中使用了i来表示某一个样本,因此我们可以得到p_hat(i)的值为:

▲p_hat(i)的函数表达式

我们依然将m个样本拼接成m行n列的X样本矩阵,表示有m个样本n个特征,此时的Xb是在整个X矩阵的前面加上一列1。将上面的p_hat(i)代入J(θ)损失函数中:

▲J(θ)损失函数

上面的式子虽然看起来非常的长,不过通过上面的分析也应该对上面的J(θ)很清晰了。上面的J(θ)是比较标准的损失函数,因为这个式子中用到的样本Xb和对应的标签y都是之前监督学习过程一直使用的样本信息,θ为真正的未知量。现在有了逻辑回归的损失函数,接下来要做的就是找到使得损失函数J(θ)值达到最小的一组θ值。

b

如 何 求 解 逻 辑 回 归 的 损 失 函 数?

这一小节推导出了逻辑回归的损失函数,虽然式子看起来非常复杂,但是通过我们一步一步的剖析,理解起来变的非常的容易。对于这样的一个复杂的式子,不能像线性回归的损失函数一样推导出正规方程解,实际上对于逻辑回归算法的损失函数J(θ)来说是没有相应的数学解析解的(也就是说不能列出一个公式,直接将Xb和y值代进公式中去,就得到θ的解)。

▲求解J(θ)没有解析解

虽然不能直接求出对应的解析解,不过万幸的是我们可以使用在前几个小节介绍的梯度下降法求解。由于逻辑回归J(θ)损失函数是一个凸函数,所以它是没有局部最优解的,只存在唯一的全局最优解,因此我们只需要多试验几次一定能够找到损失函数的最优的θ值。

使用梯度下降法求解逻辑回归和之前学习的梯度下降法求解过程是一样的。首先求出J(θ)损失函数对应的梯度,然后运用梯度下降参数更新的式子更新θ参数,最终找到使得J(θ)损失函数最小的θ值。很显然求解像J(θ)这样复杂式子的梯度不太容易,不过推导的整体难度并不高,因此接下来用一整个小节的时间来推导逻辑回归损失函数J(θ)的梯度。

0 人点赞