吴恩达机器学习L1W3L4-逻辑回归之对率损失

在这个不评分的实验中,你将:

  • 探讨误差平方损失不适合逻辑回归的原因
  • 探索逻辑损失函数
import numpy as np
%matplotlib widget
import matplotlib.pyplot as plt
from plt_logistic_loss import  plt_logistic_cost, plt_two_logistic_loss_curves, plt_simple_example
from plt_logistic_loss import soup_bowl, plt_logistic_squared_error
plt.style.use('./deeplearning.mplstyle')

逻辑回归的平方误差

回想一下,对于线性回归,我们已经使用了平方误差代价函数:一个变量的平方误差代价方程为:

J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) 2 (1) J(w,b) = \frac{1}{2m} \sum\limits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2 \tag{1} J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2(1)

f w , b ( x ( i ) ) = w x ( i ) + b (2) f_{w,b}(x^{(i)}) = wx^{(i)} + b \tag{2} fw,b(x(i))=wx(i)+b(2)
在这里插入图片描述回想一下,误差平方代价有一个很好的性质对代价求导会得到最小值。

soup_bowl()

这个成本函数在线性回归中工作得很好,很自然地,它也适用于逻辑回归。然而,正如上面的幻灯片所指出的, f w b ( x ) f_{wb}(x) fwb(x)现在有一个非线性组件,sigmoid函数: f w , b ( x ( i ) ) = s i g m o i d ( w x ( i ) + b ) f_{w,b}(x^{(i)}) = sigmoid(wx^{(i)} + b) fw,b(x(i))=sigmoid(wx(i)+b)。让我们在前面的实验示例中尝试平方误差代价,现在包括s型曲线。
下面是我们的训练数据:

x_train = np.array([0., 1, 2, 3, 4, 5],dtype=np.longdouble)
y_train = np.array([0,  0, 0, 1, 1, 1],dtype=np.longdouble)
plt_simple_example(x_train, y_train)

现在,让我们用平方误差代价得到代价的曲面图:
J ( w , b ) = 1 2 m ∑ i = 0 m − 1 ( f w , b ( x ( i ) ) − y ( i ) ) 2 J(w,b) = \frac{1}{2m} \sum\limits_{i = 0}^{m-1} (f_{w,b}(x^{(i)}) - y^{(i)})^2 J(w,b)=2m1i=0m1(fw,b(x(i))y(i))2
f w , b ( x ( i ) ) = s i g m o i d ( w x ( i ) + b ) f_{w,b}(x^{(i)}) = sigmoid(wx^{(i)} + b ) fw,b(x(i))=sigmoid(wx(i)+b)

plt.close('all')
plt_logistic_squared_error(x_train,y_train)
plt.show()

虽然这产生了一个非常有趣的图,但上面的表面并不像线性回归的“汤碗”那么光滑!
逻辑回归需要一个更适合其非线性性质的成本函数。这从损失函数开始。这将在下面描述

逻辑损失函数

在这里插入图片描述在这里插入图片描述在这里插入图片描述逻辑回归使用更适合分类任务的损失函数,其中目标是0或1而不是任何数字。

定义注:在本课程中,使用了以下定义:
损失是对单个示例与其目标值之差的度量
代价是对训练集损失的度量

这代表着

  • l o s s ( f w , b ( x ( i ) ) , y ( i ) ) loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), y^{(i)}) loss(fwb(x(i))y(i))是单个数据点的代价,即:
    在这里插入图片描述- f w , b ( x ( i ) ) f_{\mathbf{w},b}(\mathbf{x}^{(i)}) fwb(x(i))是模型的预测值,而 y ( i ) y^{(i)} y(i)是目标值。
  • f w , b ( x ( i ) ) = g ( w ⋅ x ( i ) + b ) f_{\mathbf{w},b}(\mathbf{x}^{(i)}) = g(\mathbf{w} \cdot\mathbf{x}^{(i)}+b) fw,b(x(i))=g(wx(i)+b)函数 g g g是s型函数。
    这个损失函数的定义特征是它使用了两条不同的曲线。一个用于目标为0或( y = 0 y=0 y=0)的情况,另一个用于目标为1 ( y = 1 y=1 y=1)的情况。结合起来,这些曲线为损失函数提供了有用的行为,即当预测与目标匹配时为零,当预测与目标不同时值迅速增加。考虑下面的曲线:
plt_two_logistic_loss_curves()

综合起来,曲线类似于误差损失平方的二次曲线。注意,x轴是 f w , b f_{\mathbf{w},b} fwb,这是一个sigmoid的输出。s形输出严格在0到1之间。

上面的损失函数可以重写以更容易实现。
l o s s ( f w , b ( x ( i ) ) , y ( i ) ) = ( − y ( i ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), y^{(i)}) = (-y^{(i)} \log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) - \left( 1 - y^{(i)}\right) \log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) loss(fw,b(x(i)),y(i))=(y(i)log(fw,b(x(i)))(1y(i))log(1fw,b(x(i)))

这是一个看起来相当可怕的等式。考虑到 y ( i ) y^{(i)} y(i)只能有两个值,0和1,这就不那么令人生畏了。我们可以把这个等式分成两部分:
y ( i ) = 0 y^{(i)} = 0 y(i)=0时,左项被消除:

l o s s ( f w , b ( x ( i ) ) , 0 ) = ( − ( 0 ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − 0 ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) = − log ⁡ ( 1 − f w , b ( x ( i ) ) ) \begin{align} loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), 0) &= (-(0) \log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) - \left( 1 - 0\right) \log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) \\ &= -\log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) \end{align} loss(fw,b(x(i)),0)=((0)log(fw,b(x(i)))(10)log(1fw,b(x(i)))=log(1fw,b(x(i)))
and when $ y^{(i)} = 1$, the right-hand term is eliminated:
l o s s ( f w , b ( x ( i ) ) , 1 ) = ( − ( 1 ) log ⁡ ( f w , b ( x ( i ) ) ) − ( 1 − 1 ) log ⁡ ( 1 − f w , b ( x ( i ) ) ) = − log ⁡ ( f w , b ( x ( i ) ) ) \begin{align} loss(f_{\mathbf{w},b}(\mathbf{x}^{(i)}), 1) &= (-(1) \log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) - \left( 1 - 1\right) \log \left( 1 - f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right)\\ &= -\log\left(f_{\mathbf{w},b}\left( \mathbf{x}^{(i)} \right) \right) \end{align} loss(fw,b(x(i)),1)=((1)log(fw,b(x(i)))(11)log(1fw,b(x(i)))=log(fw,b(x(i)))

好的,有了这个新的逻辑损失函数,我们就可以得到一个包含所有例子损失的代价函数。这将是下一个实验的主题。现在,让我们看看上面这个简单例子的成本与参数曲线:

plt.close('all')
cst = plt_logistic_cost(x_train,y_train)

这条曲线非常适合梯度下降!它没有高原、局部极小值或不连续点。注意,在平方误差的情况下,它不是一个碗。绘制成本和成本的对数是为了说明这样一个事实,即当成本较小时,曲线有一个斜率并继续下降。提醒:您可以使用鼠标旋转上述绘图。

祝贺

你拥有了

  • 确定误差平方损失函数不适合分类任务
  • 开发并检验了适合分类任务的逻辑损失函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值