损失函数-逻辑回归(二分类)

概述

本节介绍逻辑回归中,适合二分类的损失函数

激活函数sigmoid

二分类的激活函数是sigmoid,如下:
https://www.malaoshi.top/show_1EF4IWSucFTE.html

x为 上一步 的结果,即:将 上一步 的结果映射到0-1之间,

  • 当S(x)>=0.5时,理解为:概率大于等于50%,那么分类结果为1
  • 当S(x)<=0.5时,理解为:概率小于等于50%,那么分类结果为0

损失函数

不用 均方误差

在线性回归中,用 均方误差,但在逻辑回归中,一般不这么做,因为是非凸函数,最后会得到很多个 局部最优解

在梯度下降时,可能找不到全局最小值

损失计算的特点

  • S(x)的值越小,那么分类结果为0,此时如果 真值 为1, 那么 损失越大
  • S(x)的值越大,那么分类结果为1,此时如果 真值 为0, 那么 损失越大

这里的 “真值”,是 真实的目标值

损失计算的式子

根据损失计算的特点,写成下面的计算式子:

  • 式子1:当真值为1时,损失式子:-log(S(x))
  • 式子2:当真值为0时,损失式子:-log(1-S(x))

式子1 -log(S(x)) 的图像

由于 S(x)的值 在 (0,1) 之间,所以图像如下:

从图中可知特点:
当 真值 为1,S(x)的值越小,-log(S(x))的值越接近 无穷大,即: 损失越大
S(x)的值越大,-log(S(x))的值越小,那么 损失越小

图像代码:

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0.01,1,100)
y=-np.log(x)
plt.plot(x,y)

式子2 -log(1-S(x)) 的图像

由于S(x)的值在0-1之间,所以图像如下:

从图中可知特点:
当 真值 为0,S(x)的值越小,-log(1-S(x))的值越小,即: 损失越小,S(x)的值越大,-log(1-S(x))的值越大,即 损失越大

图像代码:

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,0.99,100)
y=-np.log(1-x)
plt.plot(x,y)

将 式子1 和 式子2 合并成一个式子

-ylog(S(x))-(1-y)log(1-S(x))

y为真值,也就是说:

  • 当y=1时,代入上面的式子,就是-log(S(x))
  • 当y=0时,代入上面的式子,就是-log(1-S(x))

函数图像如下:

生成代码如下:

x=np.linspace(0.01,1,100)
y=-np.log(x)
plt.plot(x,y,label='-log(S(x))')

x=np.linspace(0,0.99,100)
y=-np.log(1-x)
plt.plot(x,y,label='-log(1-S(x))')

plt.legend(loc='upper left')

最终式子

习惯上,将损失函数用L(y^,y) 表示

y上面有一个^(在编辑器中打不出-_-),读y hat,表示预估值,也就是 sigmoid函数 的 计算 结果

成本函数

当有 m个样本 时的 损失函数:

转换如下:

keras中的二分类损失函数

字符串

binary_crossentropy

原文出处:/show_1EF4JMvnqCh1.html