首页 > 其他分享 >神经网络基础篇:逻辑回归的代价函数

神经网络基础篇:逻辑回归的代价函数

时间:2023-10-23 11:55:20浏览次数:36  
标签:逻辑 函数 代价 损失 神经网络 训练样本 hat

逻辑回归的代价函数(Logistic Regression Cost Function)

为什么需要代价函数:

为了训练逻辑回归模型的参数参数\(w\)和参数\(b\),需要一个代价函数,通过训练代价函数来得到参数\(w\)和参数\(b\)。先看一下逻辑回归的输出函数:

为了让模型通过学习调整参数, 需要给予一个\(m\)样本的训练集,这会让 在训练集上找到参数\(w\)和参数\(b\),,来得到 的输出。

对训练集的预测值,将它写成\(\hat{y}\),更希望它会接近于训练集中的\(y\)值,为了对上面的公式更详细的介绍, 需要说明上面的定义是对一个训练样本来说的,这种形式也使用于每个训练样本, 使用这些带有圆括号的上标来区分索引和样本,训练样本\(i\)所对应的预测值是\({{y}^{(i)}}\),是用训练样本的\({{w}^{T}}{{x}^{(i)}}+b\)然后通过sigmoid函数来得到,也可以把\(z\)定义为\({{z}^{(i)}}={{w}^{T}}{{x}^{(i)}}+b\), 将使用这个符号\((i)\)注解,上标\((i)\)来指明数据表示\(x\)或者\(y\)或者\(z\)或者其他数据的第\(i\)个训练样本,这就是上标\((i)\)的含义。

损失函数:

损失函数又叫做误差函数,用来衡量算法的运行情况,Loss function:\(L\left( \hat{y},y \right)\).

通过这个\(L\)称为的损失函数,来衡量预测输出值和实际值有多接近。一般 用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中 不这么做,因为当 在学习逻辑回归参数的时候,会发现 的优化目标不是凸优化,只能找到多个局部最优值,梯度下降法很可能找不到全局最优值,虽然平方差是一个不错的损失函数,但是 在逻辑回归模型中会定义另外一个损失函数。

在逻辑回归中用到的损失函数是:\(L\left( \hat{y},y \right)=-y\log(\hat{y})-(1-y)\log (1-\hat{y})\)

为什么要用这个函数作为逻辑损失函数?当 使用平方误差作为损失函数的时候, 会想要让这个误差尽可能地小,对于这个逻辑回归损失函数, 也想让它尽可能地小,为了更好地理解这个损失函数怎么起作用, 举两个例子:

当\(y=1\)时损失函数\(L=-\log (\hat{y})\),如果想要损失函数\(L\)尽可能得小,那么\(\hat{y}\)就要尽可能大,因为sigmoid函数取值\([0,1]\),所以\(\hat{y}\)会无限接近于1。

当\(y=0\)时损失函数\(L=-\log (1-\hat{y})\),如果想要损失函数\(L\)尽可能得小,那么\(\hat{y}\)就要尽可能小,因为sigmoid函数取值\([0,1]\),所以\(\hat{y}\)会无限接近于0。

有很多的函数效果和现在这个类似,就是如果\(y\)等于1, 就尽可能让\(\hat{y}\)变大,如果\(y\)等于0, 就尽可能让 \(\hat{y}\) 变小。

损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何, 需要定义一个算法的代价函数,算法的代价函数是对\(m\)个样本的损失函数求和然后除以\(m\):
\(J\left( w,b \right)=\frac{1}{m}\sum\limits_{i=1}^{m}{L\left( {{{\hat{y}}}^{(i)}},{{y}^{(i)}} \right)}=\frac{1}{m}\sum\limits_{i=1}^{m}{\left( -{{y}^{(i)}}\log {{{\hat{y}}}^{(i)}}-(1-{{y}^{(i)}})\log (1-{{{\hat{y}}}^{(i)}}) \right)}\)
损失函数只适用于像这样的单个训练样本,而代价函数是参数的总代价,所以在训练逻辑回归模型时候, 需要找到合适的\(w\)和\(b\),来让代价函数 \(J\) 的总代价降到最低。
根据 对逻辑回归算法的推导及对单个样本的损失函数的推导和针对算法所选用参数的总代价函数的推导,结果表明逻辑回归可以看做是一个非常小的神经网络。

标签:逻辑,函数,代价,损失,神经网络,训练样本,hat
From: https://www.cnblogs.com/oten/p/17782086.html

相关文章

  • 解决Clion中写多个C++文件中存在多个main函数报错的问题
    解决Clion中写多个C++文件中存在多个main函数报错的问题在刷题写C++的时候,常常因为要写多个文件,这时存在多个main就会报错,通常解决这个问题会有以下两种解决方法:把不需要的main给注释掉新建一个Project项目这边我介绍一种新的办法:(适用于IDEA)1.先下载这个插件,C/C++Single......
  • Flutter/Dart第15天:Dart类构造函数
    Dart官方文档:https://dart.dev/language/constructors重要说明:本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。如下代码样例,和Java类似,最常用的生成式构造函数:classPoint{doublex=0;......
  • 无涯教程-AWK - 位操作函数
    AWK具有以下内置位处理函数-and与运算执行按位与运算。[Learnfk]$awk'BEGIN{num1=10num2=6printf"(%dAND%d)=%d\n",num1,num2,and(num1,num2)}'在执行此代码时,您将获得以下输出-(10AND6)=2compl补码运算它执行按位补码运算。[Learnfk]$awk'BE......
  • 自已的一个小工具需要用到软键盘,就写成了个函数~
    自已的一个小工具需要用到软键盘,就写成了个函数~看图unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls,StdCtrls,XPMan;typeTForm1=class(TForm)Panel1:TPanel;Button1:......
  • 无涯教程-AWK - 时间函数
    AWK具有以下内置时间函数-该函数返回当前的当前时间,该时间是自Epoch(在POSIX系统上为1970-01-0100:00:00UTC)以来的秒数。[Learnfk]$awk'BEGIN{print"NumberofsecondssincetheEpoch="SYSTIME()}'在执行此代码时,您将获得以下输出-Numberofsecondssincethe......
  • Python第七课——函数
    记忆关键点:一、定义函数defgreet_user():"""显示简单的问候语"""print("hello!")greet_user()defgreet_user():"""显示简单的问候语"""print("hello!")greet_user()defgreet_user(username):......
  • 无涯教程-AWK - 字符串函数
    AWK具有以下内置String函数-asort(arr[,d[,how]]) 此函数使用GAWK的常规规则对arr的内容进行排序以比较值,并使用从1开始的连续整数替换排序后的值arr的索引。[Learnfk]$awk'BEGIN{arr[0]="Three"arr[1]="One"arr[2]="Two"print"Arrayelementsbefo......
  • Python 函数:定义、调用、参数、递归和 Lambda 函数详解
    函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。函数可以返回数据作为结果。创建函数在Python中,使用def关键字定义函数:示例defmy_function():print("Hellofromafunction")调用函数要调用函数,请使用函数名称后跟括号:示例defmy_function......
  • Python 函数:定义、调用、参数、递归和 Lambda 函数详解
    函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。函数可以返回数据作为结果。创建函数在Python中,使用def关键字定义函数:示例defmy_function():print("Hellofromafunction")调用函数要调用函数,请使用函数名称后跟括号:示例defmy_function(......
  • 前端find函数
    在前端开发中,"find"函数通常被用来在数组中查找满足特定条件的元素。这个函数是Array对象的原生方法之一,通过调用数组对象的"find"方法可以进行查找。该方法接受一个回调函数作为参数,该回调函数会为数组的每个元素调用一次。当回调函数返回一个真值时,"find"方法将返回第一个满足条......