损失函数-逻辑回归(二分类) 作者:马育民 • 2019-10-25 16:23 • 阅读:10229 # 概述 本节介绍逻辑回归中,适合二分类的损失函数 # 激活函数sigmoid 二分类的激活函数是sigmoid,如下: https://www.malaoshi.top/show_1EF4IWSucFTE.html [![](https://www.malaoshi.top/upload/0/0/1EF3xWjgkbzo.png)](https://www.malaoshi.top/upload/0/0/1EF3xWjgkbzo.png) x为 上一步 的结果,即:将 上一步 的结果映射到0-1之间, - 当S(x)>=0.5时,理解为:概率大于等于50%,那么分类结果为1 - 当S(x)<=0.5时,理解为:概率小于等于50%,那么分类结果为0 # 损失函数 ### 不用 均方误差 在线性回归中,用 **均方误差**,但在逻辑回归中,一般不这么做,因为是非凸函数,最后会得到很多个 **局部最优解** 在梯度下降时,可能找不到全局最小值 [![](https://www.malaoshi.top/upload/0/0/1EF4FkPO1Jjp.png)](https://www.malaoshi.top/upload/0/0/1EF4FkPO1Jjp.png) ### 损失计算的特点 - **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)** 之间,所以图像如下: [![](https://www.malaoshi.top/upload/0/0/1EF4JS98tn5R.png)](https://www.malaoshi.top/upload/0/0/1EF4JS98tn5R.png) 从图中可知特点: 当 真值 为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之间,所以图像如下: [![](https://www.malaoshi.top/upload/0/0/1EF4JSSpEW6g.png)](https://www.malaoshi.top/upload/0/0/1EF4JSSpEW6g.png) 从图中可知特点: 当 真值 为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))``` **函数图像如下:** [![](https://www.malaoshi.top/upload/0/0/1EF4JSiYsO30.png)](https://www.malaoshi.top/upload/0/0/1EF4JSiYsO30.png) **生成代码如下:** ``` 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') ``` ### 最终式子 [![](https://www.malaoshi.top/upload/0/0/1EF4JjsJ5KcX.png)](https://www.malaoshi.top/upload/0/0/1EF4JjsJ5KcX.png) 习惯上,将损失函数用```L(y^,y)``` 表示 y上面有一个^(在编辑器中打不出-\_-),读```y hat```,表示预估值,也就是 **sigmoid函数** 的 计算 **结果** # 成本函数 当有 **m个样本** 时的 **损失函数**: [![](https://www.malaoshi.top/upload/0/0/1EF4JjoNJQ3T.png)](https://www.malaoshi.top/upload/0/0/1EF4JjoNJQ3T.png) 转换如下: [![](https://www.malaoshi.top/upload/0/0/1EF4JjnGmC3P.png)](https://www.malaoshi.top/upload/0/0/1EF4JjnGmC3P.png) # keras中的二分类损失函数 字符串 ``` binary_crossentropy ``` 原文出处:http://malaoshi.top/show_1EF4JMvnqCh1.html