概述
本节介绍逻辑回归中,适合二分类的损失函数
激活函数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)) 的图像
从图中可知特点:
当 真值 为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







