Sigmoid函数与逻辑回归

文章目录

      • (1). Sigmoid函数的由来——伯努利分布的衍生物
          • 1.1 为什么会有 sigmoid 函数的出现?
          • 1.2 sigmoid 函数推导过程
          • 1.3 sigmoid 函数求导
      • (2). 逻辑回归(Logistic Regression)
          • 2.1 逻辑回归算法的最终本质——求决策边界
          • 2.2 逻辑回归算法中的重要组成部分

(1). Sigmoid函数的由来——伯努利分布的衍生物

1.1 为什么会有 sigmoid 函数的出现?

考虑一个事件X,其发生的概率为p,不发生的概率为1-p,如下表所示:

X01
发生概率1 - pp

通过上述事件我们能够得到当事件一定发生(x=1)一定不发生(x=0) 的概率,但很多时候事件不一定是一个非0即1的事件,而是一个连续取值的事件。当x的取值在(0,1)之间时,如x=0.5时,我们就无法判断该事件是判定为发生还是不发生了。为此,我们期望找到连续变量 x 和发生概率 p 之间的对应关系,使得每一个 xxx 取值都有一个对应的事件发生概率 ppp,根据发生概率 ppp 来推测事件发生还是不发生。例如,当 p=0.8p=0.8p=0.8 时判断该事件发生,p=0.2p=0.2p=0.2 时判断该事件不发生。如何寻找这个对应关系呢,sigmoid 函数的求解过程就是在寻找这个对应关系,sigmoid 最终的求解形式就描述连续变量 xxx 和发生概率 ppp 关系:
p=11+e−xp = \frac{1}{1 + e^{-x}} p=1+ex1

1.2 sigmoid 函数推导过程

由上一节中的表可以得到,f(x)f(x)f(x) 分布函数可以写成:

f(x)={1−p;x=0p;x=1f(x) = \left\{ \begin{array}{rcl} 1-p; \qquad x=0 \\ p; \qquad x=1 \end{array} \right. f(x)={1p;x=0p;x=1

进一步的我们可这个分段函数写成一个函数:

f(x)=px∗(1−p)1−xf(x) = p^x*(1-p)^{1-x} f(x)=px(1p)1x

接着我们在这个式子上进行推导:

f(x)=elnpx(1−p)1−x=elnpx+ln(1−p)1−x=ex⋅lnp+(1−x)⋅ln(1−p)=ex[lnp−ln(1−p)]+ln(1−p)=ex⋅lnp1−p+ln(1−p)\begin{aligned} f(x) &= e^{lnp^x (1-p)^{1-x}} \\ &= e^{lnp^x + ln(1-p)^{1-x}} \\ &= e^{x·lnp + (1-x)·ln(1-p)} \\ &= e^{x [ lnp - ln(1-p)] + ln(1-p)} \\ &= e^{x·ln\frac{p}{1-p} + ln(1-p)} \end{aligned} f(x)=elnpx(1p)1x=elnpx+ln(1p)1x=exlnp+(1x)ln(1p)=ex[lnpln(1p)]+ln(1p)=exln1pp+ln(1p)

我们找出跟 xxx 变量相关的系数 lnp1−pln\frac{p}{1-p}ln1pp,令其等于 η\etaη,反解 η\etaη:
η=lnp1−peη=p1−pp=11+e−η\begin{aligned} \eta &= ln\frac{p}{1-p} \\ e^\eta &=\frac{p}{1-p} \\ p &= \frac{1}{1+e^{-\eta}} \end{aligned} ηeηp=ln1pp=1pp=1+eη1

最后计算出的形式就是sigmoid函数的函数形式,将 η\etaη 换成 xxx 后就得到了连续变量 xxx 和事件发生概率 ppp 之间的函数关系(至于为什么可以把 η\etaη 换成 xxx 这里我想了很久也没想通,如果有大佬希望可以指点下)。

1.3 sigmoid 函数求导

在逻辑回归中,构造函数选用的就是sigmoid函数。我们都知道在机器学习中会不断通过求解梯度来进行函数的参数更新,那么sigmoid作为目标函数,不可避免的就会涉及到sigmoid的求导,sigmoid函数求导结果如下:

f′(x)=(11+e−x)′=e−x(1+e−x)2=11+e−x⋅(1−11+e−x)=f(x)⋅(1−f(x))\begin{aligned} f'(x) &= (\frac{1}{1+e^{-x}})' \\ &= \frac{e^{-x}}{(1+e^{-x})^2} \\ &= \frac{1}{1+e^{-x}}·(1 - \frac{1}{1+e^{-x}}) \\ &= f(x)·(1-f(x)) \end{aligned} f(x)=(1+ex1)=(1+ex)2ex=1+ex1(11+ex1)=f(x)(1f(x))

(2). 逻辑回归(Logistic Regression)

2.1 逻辑回归算法的最终本质——求决策边界

逻辑回归中使用 sigmoid 函数 11+e−w⋅x\frac{1}{1 + e^{-w·x}}1+ewx1 来预测事件发生的概率,如下图所示,当纵坐标取值大于0.5时则判断事件发生(y=1),当纵坐标小于0.5时则判断事件不发生(y=0)。

我们仔细观察,整个式子 yyy 的取0还是取1完全取决于 w⋅xw·xwx 的取值是>0还是<0,于是我们就可以通过判断一个样本点是在直线 z=w⋅xz=w·xz=wx 的上半边还是下半边来判断 yyy 的取值了。这样一来,我们求解的最根本的问题就是求解一条直线 z=w⋅xz = w·xz=wx,使得在直线一边的数据点全为正样本,另一边的数据点全为负样本。因此,逻辑回归算法算法的本质其实是去求解一个“边界”,这个边界不仅能够保证数据分类的正确性,还能保证所有分类后的数据的 cost 值最小,如下图所示(这和SVM的最小间隔距离非常相似):

决策边界由函数:w⋅X=0w·X = 0wX=0 来确定,其中参数 www是我们需要学习的参数,因此核心问题就成了求解边界:
z=w⋅X=w0+w1⋅X1+w2⋅X2+...z = w·X = w_0 + w_1·X_1 + w_2·X_2 + ... z=wX=w0+w1X1+w2X2+...

2.2 逻辑回归算法中的重要组成部分

对于任何一个算法来说,通常都需要考虑的3个部分:

  • 构建基本函数(就是用来预测最终yyy值的函数)
  • 构建目标函数(目标函数=损失函数 + 正则项)
  • 构建优化方法(也叫优化器optimizer)

逻辑回归中的基本构造函数

在逻辑回归算法中,选用的基本函数就是sigmoid函数 hθ(x)=11+e−xh_{\theta}(x) = \frac{1}{1 + e^{-x}}hθ(x)=1+ex1,该函数用于预测输入 xxx 后标签 yyy 的概率,注意,这里的 xxx 并非是数据集的原始数据输入,而是乘以了参数 θ\thetaθ 之后的值,即 x=X⋅θx = X · \thetax=Xθ,因此逻辑回归的基本函数为:
hθ(X)=11+e−θXh_{\theta}(X) = \frac{1}{1+e^{-\theta X}} hθ(X)=1+eθX1

逻辑回归中的损失函数

逻辑回归的损失函数为:

loss(yi,yi′)=−∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))loss(y_i, y_i') = -\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)}) + (1 - y^{(i)})log(1-h_{\theta}(x^{(i)}) loss(yi,yi)=i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i))
其中,hθ(X)=11+e−θXh_{\theta}(X) = \frac{1}{1+e^{-\theta X}}hθ(X)=1+eθX1,这个式子可以从两个思路推导出来:最大似然估计、交叉熵损失函数,下面分别从这两个方面进行推导。

  • 通过极大似然估计来解释损失函数

首先我们需要知道极大似然估计是什么,举个例子:假设取球事件为y,取到白球时y=1,概率为p,取到黑球时y=0,概率为1-p。由于是独立事件,三次拿球两黑一白的概率可以表示为:P(y=0∣p)P(y=0∣p)P(y=1∣p)=(1−p)(1−p)p=p3−2p2+pP(y = 0 | p)P(y = 0 | p)P(y = 1 | p) = (1 - p)(1 - p)p = p^3 - 2p^2 + pP(y=0p)P(y=0p)P(y=1p)=(1p)(1p)p=p32p2+p。白球的极大似然估计就是求使得这个概率表达式最大的p值,对上式求导,求此一元二次方程的根得p=1/3或p=1,可知原式在[0, 1/3]区间单调递增,在[1/3, 1]区间单调递减。因此,在白球概率范围[0.2,0.8]内,当p=1/3时表达式取得最大值,取得白球的概率的极大似然估计为1/3(例子引自这里)。通过这个例子可以看到,最大似然估计其实是在给定了若干个事实后(去了三次球两黑一白),对事件发生的最大可能概率(取到白球的概率)进行估计。

那么在逻辑回归中,假定每一个数据样本相互独立,则取了 mmm 个样本后,得到的似然函数为根据每一个数据样本标签计算出的概率值相乘:
L(θ)=∏i=1mpiyi(1−pi)1−yil(θ)=∑i=1mln[piyi(1−pi)1−yi]L(\theta) = \prod_{i=1}^m p_i^{y_i} (1-p_i)^{1-y_i}\\ l(\theta) = \sum_{i=1}^mln[p_i^{y_i}(1-p_i)^{1-y_i}] L(θ)=i=1mpiyi(1pi)1yil(θ)=i=1mln[piyi(1pi)1yi]
式子 L(θ)L(\theta)L(θ) 就等于上面白球例子中的:(1−p)(1−p)p(1 - p)(1 - p)p(1p)(1p)pl(θ)l(\theta)l(θ)是对原式求对数,把累成变为累加,这个式子也叫对数似然估计。我们现在假设 ppp 服从 11+e−θX\frac{1}{1+e^{-\theta X}}1+eθX1分布(其实真正的 ppp 并不是等于这个式子的,因为 θ\thetaθ 参数是不准确的,是需要学习的),这样一来,我们就有了损失函数:
loss(yi,yi′)=−l(θ)=−∑i=1mln[(11+e−θx)yi(11+eθx)1−yi]=−∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))\begin{aligned} loss(y_i, y_i') &= -l(\theta) \\ &= -\sum_{i=1}^mln[(\frac{1}{1+e^{-\theta x}})^{y_i} (\frac{1}{1+e^{\theta x}})^{1-y_i} ]\\ &=-\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)}) + (1 - y^{(i)})log(1-h_{\theta}(x^{(i)}) \end{aligned} loss(yi,yi)=l(θ)=i=1mln[(1+eθx1)yi(1+eθx1)1yi]=i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i))

怎么理解这个式子呢?这样想,我们按照服从 11+e−θX\frac{1}{1+e^{-\theta X}}1+eθX1的分布概率 p′p'p 来进行估测的结果并不是真实标签 yiy_iyi,而是有偏估计 yi′y_i'yi,因为我们的参数 θ\thetaθ 是有偏的。而原本的极大似然估计的本质是,在使用真实的分布概率 ppp 去做预测时,是可以得到正确的预测标签 yiy_iyi 的。因此,使用有偏概率 p′p'p 去做估计得到结果,就是有偏预测结果 y′y'y 和真实标签数据 yyy 之间的偏差值,也就是损失函数的结果。

  • 通过交叉熵来解释损失函数

损失函数的定义是:如果我们预测类型接近真实类型,则损失函数值非常小;如果预测类型偏离真是类型很多,则损失函数非常大。我们再列出最终的loss函数来看看:
loss(yi,yi′)=−∑i=1my(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i))loss(y_i, y_i') = -\sum_{i=1}^my^{(i)}logh_{\theta}(x^{(i)}) + (1 - y^{(i)})log(1-h_{\theta}(x^{(i)}) loss(yi,yi)=i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i))

可以发现其实这个函数可以拆成两个部分(图片引自这里):

分别代表当样本的真实标签 y=1y=1y=1 时,对应的损失函数为:−log(hθ(x))-log(h_{\theta}(x))log(hθ(x)),当样本的真实标签 y=0y=0y=0 时对应的损失函数为: −log(1−hθ(x))-log(1-h_{\theta}(x))log(1hθ(x))。如下图所示(图片引自这里):

这个图非常直观的表示了损失函数与预测准确度的关系,例如当y = 1时,如果 hθ(x)h_{\theta}(x)hθ(x) 的预测值越接近 1,则得到的损失函数值越小,若预测结果越接近 0,则得到的损失函数值越大。而从上面可以看出,不管是 y=1y=1y=1 还是 y=0y=0y=0 的情况,均使用 −log-loglog 来进行损失函数的定义,为什么呢?这就涉及到香农熵的问题了,香农信息量用来度量不确定性的大小:一个事件的香农信息量等于0,表示该事件的发生不会给我们提供任何新的信息,例如确定性的事件,发生的概率是1,发生了也不会引起任何惊讶;当不可能事件发生时,香农信息量为无穷大,这表示给我们提供了无穷多的新信息,并且使我们无限的惊讶,而 −log-loglog 函数恰恰能很好的表达在 xxx 取值接近 1 时函数值接近于 0,反之 xxx 取值接近 0 时函数值接近于无穷大。

逻辑回归中的优化方法

使用 SGD 随机梯度下降的方法来优化参数 θ\thetaθ:

θj:=θj+α⋅loss(yi,yi′)\theta_j: = \theta_j + \alpha·loss(y_i, y_i') θj:=θj+αloss(yi,yi)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C和指针之字符串实现strrstr函数

1、问题 实现strrstr(const char *str, const char *str2)函数,就是从最右边开始,找到第一次出现字符str2,然后返回指向这个字符的指针,找不到返回NULL,str2和str1一个为NULL 返回 NULL 2、思路 我们用2个变量, 先用strstr一个变量找一个保存当前地址,然后再用strstr去…

括号匹配

CTRL SHIFTP 括号匹配

react connect

connect([mapStateToProps], [mapDispatchToProps], [mergeProps],[options])连接 React 组件与 Redux store。连接操作不会改变原来的组件类&#xff0c;反而返回一个新的已与 Redux store 连接的组件类。参数[mapStateToProps(state, [ownProps]): stateProps] (Function): 如…

Avalonia跨平台入门第二十二篇之人脸检测

在前面分享的几篇中咱已经玩耍了Popup、ListBox多选、Grid动态分、RadioButton模板、控件的拖放效果、控件的置顶和置底、控件的锁定、自定义Window样式、动画效果、Expander控件、ListBox折叠列表、聊天窗口、ListBox图片消息、窗口抖动、语音发送、语音播放、语音播放问题、玩…

pkpm板按弹性计算还是塑性_PKPM中的S\R验算显红原因分析

PKPM软件砼结构施工图中的&#xff0c;梁的配筋面积中&#xff0c;SR验算&#xff0c;经常会有个别构件显红的情况。查了一下PKPM说明书&#xff0c;并没有针对此情况的详细说明。根据本人的实际经验&#xff0c;总结了一下解决此问题的主要方法&#xff1a;一.超筋SR的值显示为…

C和指针之字符串strspn、strcspn函数源代码的实现

1、strspn strcspn介绍 1)size_t strspn(const char *str, const char * accept); 我的理解是字符串str中前面连续的字符有多少在accept中,如果哪一个没在accept中,就到这里结束了,后面不比了,比如 char *str = "xnufux dfafa"; char accept = "linux"…

StackExchange.Redis 使用 (一)

在StackExchange.Redis中最重要的对象是ConnectionMultiplexer类&#xff0c; 它存在于StackExchange.Redis命名空间中。这个类隐藏了Redis服务的操作细节&#xff0c;ConnectionMultiplexer类做了很多东西&#xff0c; 在所有调用之间它被设计为共享和重用的。不应该为每一个操…

多智能体连续行为空间问题求解——MADDPG

目录1. 问题出现&#xff1a;连续行为空间出现2. DDPG 算法2.1 DDPG 算法原理2.2 DDPG 算法实现代码2.2.1 Actor & Critic2.2.2 Target Network2.2.3 Memory Pool2.2.4 Update Parameters&#xff08;evaluate network&#xff09;2.2.5 Update Parameters&#xff08;targ…

在.NET 6 中如何创建和使用 HTTP 客户端 SDK

如今&#xff0c;基于云、微服务或物联网的应用程序通常依赖于通过网络与其他系统通信。每个服务都在自己的进程中运行&#xff0c;并解决一组有限的问题。服务之间的通信是基于一种轻量级的机制&#xff0c;通常是一个 HTTP 资源 API。从.NET 开发人员的角度来看&#xff0c;我…

C和指针之字符串strtok函数

1、strtok函数 头文件&#xff1a;#include <string.h>定义函数&#xff1a;char * strtok(char *s, const char *delim);函数说明&#xff1a;strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串&#xff0c;参数delim 则为分割字符串&#xff0c;当strto…

#CSS# 初识CSS

CSS&#xff1a;Cascading Style Sheet &#xff08;层叠样式表&#xff09; CSS的内容可以分开写入CSS文件中&#xff0c;PHP文件中加入以下语句即可&#xff1a; <link herf"css/style.css" type"text/css" rel"stylesheet"/> 其中&…

js隐藏div

页面上有一个div&#xff0c;用JQuery隐藏<div id"hid_div" class"divID">解决方法&#xff1a;(1)用js&#xff1a;document.getElementById(hid_div).style.display "none";(2)jQuery:${.divID}.hid();ps:如果用方法&#xff08;1&…

ttl接地是高电平还是低电平_功放技术参数1——高电平

在汽车音响中的功放或者DSP再或者是DSP功放中我们都会遇到高电平信号或者低电平信号输入&#xff0c;我们该如何判断主机输出的到底是高电平信号还是低电平信号呢&#xff1f;我们可以用一个很简单的方法来鉴定&#xff0c;那就是主机输出能够直接驱动喇叭的为高电平信号输出&a…

静态属性,函数闭包,call/apply,继承

<!doctype html><html lang"en"><head><meta charset"UTF-8"><title>静态属性,函数闭包,call/apply,继承</title><script type"text/javascript"> /* 一&#xff1a;静态属性在一些面向对象语言里&am…

MultiProcessing中主进程与子进程之间通过管道(Pipe)通信

Python 中 Multiprocessing 实现进程通信1. 如何建立主进程与子进程之间的通信管道&#xff1f;2. 为什么一定要将Pipe中的某些端close()?本文参考自&#xff1a;python 学习笔记 - Queue & Pipes&#xff0c;进程间通讯 1. 如何建立主进程与子进程之间的通信管道&#xf…

如何为 .NET 项目自定义强制代码样式规则

前言每个人都有自己的代码样式习惯:命名约定、大括号、空格、换行等。但是&#xff0c;作为一个团队来说&#xff0c;应该使用同样的代码样式规则。这样可以有效减少编译器的警告/建议&#xff0c;保证阅读代码的人员理解一致。今天我们介绍一种为单独的 .NET 项目定义代码样式…

C和指针之字符操作(<ctype.h>)

1、字符操作 在头文件<ctype.h>中 1、字符分类 islower(int a) 是否是小写 isupper(int a) 是否是大写 2、字符转换 int tolower(int ch)转换成小写 int woupper(int ch)转换成大写 2、测试Demo #include <stdio.h> #include <ctype.h>int m…

零拷贝概念 -- linux内核

零拷贝&#xff08;zero-copy&#xff09; 备快速网络接口的主要技术。零拷贝技术通过降低或消除关键通信路径影响速率的操作&#xff0c;降低传输数据的操作系统开销和协议处理开销&#xff0c;从而有效提高通信性能&#xff0c;实现快速传输数据。 零拷贝技术能够降低数据拷贝…

我是如何帮助创业公司改进企业工作的

前段时间在一家创业公司实习&#xff0c;几十个人的团队&#xff0c;正处在规模逐渐扩大的阶段&#xff0c;但是整个公司的协作工作和日常管理却越来越麻烦&#xff0c;鉴于我以前对Saas和协作平台都有过一点研究&#xff0c;于是leader叫我去找一个“简单&#xff0c;好用&…

PHP单例模式(精讲)

2019独角兽企业重金招聘Python工程师标准>>> 首先我们要明确单例模式这个概念&#xff0c;那么什么是单例模式呢&#xff1f; 单例模式顾名思义&#xff0c;就是只有一个实例。作为对象的创建模式&#xff0c;单例模式确保某一个类只有一个实例&#xff0c;而且自行…