【机器学习】机器学习的基本分类-监督学习-逻辑回归-Sigmoid 函数

news2024/11/30 9:47:55

Sigmoid 函数是一种常用的激活函数,尤其在神经网络和逻辑回归中扮演重要角色。它将输入的实数映射到区间 (0, 1),形状类似于字母 "S"。


1. 定义与公式

Sigmoid 函数的公式为:

\sigma(x) = \frac{1}{1 + e^{-x}}

特点

  1. 输出范围:(0, 1),适合用于概率预测。
  2. 单调性:是一个单调递增函数。
  3. 对称性:以 x = 0 为中心,对称于 y = 0.5。

2.Sigmoid 函数的推导过程

2-1. 目标与需求

我们希望构造一个函数 f(x) 满足以下性质:

  1. 输出范围:f(x) 的值限定在区间 (0, 1),便于解释为概率。
  2. 平滑性:函数连续且可导,以便使用梯度下降进行优化。
  3. 单调性:函数值随着输入 x 的增大而增大。
  4. 对称性:以 x = 0 为对称中心,输入为 0 时,输出为 0.5,表示不偏不倚的概率。

2-2. 构造 Sigmoid 函数

为了满足这些性质,可以使用指数函数 e^x 的形式,因为指数函数本身是平滑的、单调递增的。

构造输出范围

首先,为了限制输出范围在 (0, 1),我们构造如下函数:

f(x) = \frac{1}{1 + g(x)}

其中 g(x) > 0 保证分母大于 1,因此 f(x) 始终在 (0, 1)。

选择 g(x) = e^{-x},得到:

f(x) = \frac{1}{1 + e^{-x}}

性质验证

  1. 输出范围

    f(x) = \frac{1}{1 + e^{-x}}
    • x \to \inftye^{-x} \to 0f(x) \to 1
    • x \to -\inftye^{-x} \to \inftyf(x) \to 0
  2. 单调性: 指数函数 e^{-x} 单调递减,分母 1 + e^{-x} 随 x 增大而变大,分数值变小,因此 f(x) 单调递增。

  3. 对称性: 令 x = 0,

    f(0) = \frac{1}{1 + e^0} = \frac{1}{2}

    满足 f(0) = 0.5,以 x = 0 为中心对称。


2-3. 导数推导

公式

导数计算如下:

f(x) = \frac{1}{1 + e^{-x}}

对 f(x) 求导:

  1. 分母求导法则:

    \frac{\mathrm{d}}{\mathrm{d}x} \frac{1}{u} = -\frac{1}{u^2} \cdot \frac{\mathrm{d}u}{\mathrm{d}x}
  2. 应用到 f(x): 设 u = 1 + e^{-x},则:

    f'(x) = -\frac{1}{(1 + e^{-x})^2} \cdot (-e^{-x}) = \frac{e^{-x}}{(1 + e^{-x})^2}
  3. 进一步化简:

    f'(x) = \frac{1}{1 + e^{-x}} \cdot \left(1 - \frac{1}{1 + e^{-x}}\right)

    \sigma(x) = \frac{1}{1 + e^{-x}},得:

    f'(x) = \sigma(x) \cdot (1 - \sigma(x))

2-4. 推导的直观解释

概率建模视角

Sigmoid 函数可以看作将线性模型的输出 z = w^T x + b 转换为概率值的过程:

P(y=1|x) = \frac{1}{1 + e^{-z}}

z \to \infty,预测概率接近 1;当 z \to -\infty,预测概率接近 0。

对称性与平滑性

  • 对称性来源于指数函数的性质:负指数 e^{-x} 的曲线是正指数 e^{x} 的镜像。
  • 平滑性来源于指数函数的连续和可导性。

3. Sigmoid 的性质

导数

Sigmoid 的导数具有简洁的形式:

\sigma'(x) = \sigma(x) \cdot (1 - \sigma(x))

这使得计算变得高效。

梯度消失问题

  • 当 x 的绝对值较大时,σ(x) 的值接近 0 或 1,导数接近于 0。这会导致梯度更新过慢的问题,特别是在深层神经网络中。

4. Sigmoid 的用途

  1. 逻辑回归

    • 用于将线性回归的结果转化为二分类概率。
    P(y=1|x) = \frac{1}{1 + e^{-(w^T x + b)}}
  2. 神经网络

    • 作为激活函数,尤其是输出层,用于预测概率值。
  3. 概率建模

    • 用于模型的概率预测或生成。

5. 缺点

  1. 梯度消失
    • 绝对值较大的输入导致梯度趋于 0,影响深层网络的训练。
  2. 非零均值
    • Sigmoid 输出的均值不为零,可能导致下一层神经元的输入分布偏移。

6. 代码实现

以下是 Sigmoid 函数的实现及其应用示例。

Sigmoid 函数

import numpy as np
import matplotlib.pyplot as plt

# Sigmoid 函数
def sigmoid(x):
    return 1 / (1 + np.exp(-x))

# Sigmoid 导数
def sigmoid_derivative(x):
    s = sigmoid(x)
    return s * (1 - s)

# 绘图
x = np.linspace(-10, 10, 100)
y = sigmoid(x)
y_prime = sigmoid_derivative(x)

plt.plot(x, y, label='Sigmoid Function')
plt.plot(x, y_prime, label='Sigmoid Derivative', linestyle='--')
plt.title("Sigmoid and Its Derivative")
plt.xlabel("x")
plt.ylabel("f(x)")
plt.legend()
plt.grid()
plt.show()

逻辑回归示例

# 导入必要的库
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成一个模拟的二分类数据集
# 这里详细说明了数据集的特性:样本数、特征数、类别数、信息特征数、冗余特征数、重复特征数和随机种子
X, y = make_classification(n_samples=100, n_features=4, n_classes=2, n_informative=2, n_redundant=1, n_repeated=0,
                           random_state=0)

# 将数据集分为训练集和测试集,测试集大小为30%,并设置了随机种子以保证结果的可重复性
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化逻辑回归模型
model = LogisticRegression()
# 使用训练集数据训练模型
model.fit(X_train, y_train)

# 使用训练好的模型对测试集进行预测
y_pred = model.predict(X_test)
# 打印模型的准确率
print("Accuracy:", accuracy_score(y_test, y_pred))

输出结果

Accuracy: 0.9

7. Sigmoid 的替代品

为了克服 Sigmoid 的缺点,神经网络中常用以下替代激活函数:

  1. ReLU(Rectified Linear Unit): f(x) = max(0, x)
  2. Leaky ReLUf(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases}
  3. Tanhf(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} 输出范围为 (-1, 1)。

Sigmoid 函数虽然简单,但由于其梯度问题和计算开销,在深度学习中逐渐被其他激活函数所取代。不过,它在概率建模等领域仍然非常实用!

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

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

相关文章

C++游戏开发入门:如何从零开始实现自己的游戏项目?

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C游戏开发的相关内容! 关于【…

HTTP(网络)

目录 1.Http的基本代码 1.1 HttpServer.hpp 1.2 简单测试一下 1.3 用telnet测试一下 1.4 用浏览器访问 1.5 返回相应的过程(网页版本)​编辑 1.5.1 再次用浏览器访问 1.6 返回相应的过程(文件版本) 1.6.1网页 1.6.2 测试 …

docker服务容器化

docker服务容器化 1 引言2 多个容器间网络联通2.1 单独创建关联2.2 创建时关联 3 服务搭建3.1 镜像清单3.2 容器创建 4 联合实战4.2 flink_sql之kafka到starrocks4.2 flink_sql之mysql到starrocks 5 文献借鉴 1 引言 ​ 利用docker可以很效率地搭建服务,本文在win1…

Linux系统之iotop命令的基本使用

Linux系统之iotop命令的基本使用 一、iotop命令介绍二、iotop命令的使用帮助2.1 安装iotop2.2 iotop命令help帮助信息2.3 iotop命令选项解释 三、 iotop命令的基本使用四、iotop使用注意事项 一、iotop命令介绍 iotop 是一个类似于 top 的命令行工具,但它专注于显示…

opencv 区域提取三种算法

opencv 区域提取三种算法 1.轮廓查找 findContours()函数&#xff0c;得到轮廓的点集集合 cv::vector<cv::vector<Point>> contours;threshold(roiMat,binImg,m_pPara.m_nMinGray,m_pPara.m_nMaxGray,THRESH_BINARY);//膨胀处理Mat dilaElement getStructuringE…

【深度学习】—CNN卷积神经网络 从原理到实现

卷积神经网络&#xff08;CNN&#xff09;从原理到实现 什么是卷积神经网络&#xff08;CNN&#xff09;&#xff1f; 卷积神经网络&#xff08;Convolutional Neural Network, CNN&#xff09;是一种深度学习模型&#xff0c;主要应用于图像分类、目标检测和自然语言处理等领…

A-star算法

算法简介 A*&#xff08;A-star&#xff09;算法是一种用于图形搜索和路径规划的启发式搜索算法&#xff0c;它结合了最佳优先搜索&#xff08;Best-First Search&#xff09;和Dijkstra算法的思想&#xff0c;能够有效地寻找从起点到目标点的最短路径。A*算法广泛应用于导航、…

【数据集划分】训练集train/验证集val/测试集test是如何划分的?

&#x1f680;在跑代码时常常将数据集简单的划分为训练集train和测试集test(二划分)&#xff0c;其实更为全面完整的划分应该是划分为训练集train、验证集val、测试集test(三划分)。那么具体如何划分呢&#xff1f;各个部分起着什么作用呢&#xff1f; 如下图所示&#xff0c;…

Gentoo Linux部署LNMP

一、安装nginx 1.gentoo-chxf ~ # emerge -av nginx 提示配置文件需更新 2.gentoo-chxf ~ # etc-update 3.gentoo-chxf ~ # emerge -av nginx 4.查看并启动nginx gentoo-chxf ~ # systemctl status nginx gentoo-chxf ~ # systemctl start nginx gentoo-chxf ~ # syst…

Ubantu系统非root用户安装docker教程

非root用户没有超级权限&#xff0c;根据docker安装教程安装完毕会发现无法拉取镜像&#xff0c;或者每次运行docker都需要加上sudo&#xff0c;输入密码验证。 解决办法如下&#xff1a; 1、创建docker用户组 sudo groupadd docker2、将非root用户&#xff08;当前用户&am…

python可视化高纬度特征

可视化网络的特征层&#xff0c;假如resnet网络输出的特征维度是(batch_size,512). 如果要可视化测试集的每个图片的512高维度特征分布呢&#xff1f; embeds resnet18(x)&#xff0c;embeds是(batch_size,512)高维度特征。如下可视化。 import torch import matplotlib.pyp…

OceanBase 大数据量导入(obloader)

现需要将源数据库&#xff08;Oracle|MySQL等&#xff09;一些表的海量数据迁移到目标数据库 OceanBase 中&#xff0c;基于常规 jdbc 驱动编码的方式涉及开发工作&#xff0c;性能效率也要看编码的处理机制。 OceanBase 官方提供了的 OceanBase Migration Service (OMS) 数据…

Mac启动服务慢问题解决,InetAddress.getLocalHost().getHostAddress()慢问题。

项目启动5分钟&#xff0c;很明显有问题。像网上其他的提高jvm参数就不说了&#xff0c;应该不是这个问题&#xff0c;也就快一点。 首先找到自己的电脑名称&#xff08;用命令行也行&#xff0c;只要能找到自己电脑名称就行&#xff0c;这里直接在共享里看&#xff09;。 复制…

Ubuntu交叉编译 opencv for QNX

前言 在高通板子上开发一些程序的时候,会用到opencv帮助处理一下图像数据,高通车载板子sa8155和sm8295都有QNX os,需要交叉编译opencv的库,(这个交叉编译真是搞得我太恶心了,所以进行一个记录和分享) 搜了很多资料,有些太过于复杂,有些也存在错误导致最后没有编译成…

.NET 9 AOT的突破 - 支持老旧Win7与XP环境

引言 随着技术的不断进步&#xff0c;微软的.NET 框架在每次迭代中都带来了令人惊喜的新特性。在.NET 9 版本中&#xff0c;一个特别引人注目的亮点是 AOT&#xff08; Ahead-of-Time&#xff09;支持&#xff0c;它允许开发人员将应用程序在编译阶段就优化为能够在老旧的 Win…

Mac 环境下类Xshell 的客户端介绍

在 Mac 环境下&#xff0c;类似于 Windows 环境中 Xshell 用于访问 Linux 服务器的工具主要有以下几种&#xff1a; SecureCRT&#xff1a; 官网地址&#xff1a;https://www.vandyke.com/products/securecrt/介绍&#xff1a;支持多种协议&#xff0c;如 SSH1、SSH2、Telnet 等…

Cookie跨域

跨域&#xff1a;跨域名&#xff08;IP&#xff09; 跨域的目的是共享Cookie。 session操作http协议&#xff0c;每次既要request&#xff0c;也要response&#xff0c;cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …

虚拟机CentOS系统通过Docker部署RSSHub并映射到主机

公告 &#x1f4cc;更新公告 20241124-该文章已同步更新到作者的个人博客&#xff08;链接&#xff1a;虚拟机CentOS系统通过Docker部署RSSHub并映射到主机&#xff09; 一、编辑 YUM 配置文件 1、打开 CentOS 系统中的 YUM 软件仓库配置文件 vim /etc/yum.repos.d/CentOS-Ba…

DreamCamera2相机预览变形的处理

最近遇到一个问题&#xff0c;相机更换了摄像头后&#xff0c;发现人像角度顺时针旋转了90度&#xff0c;待人像角度正常后&#xff0c;发现 预览时图像有挤压变形&#xff0c;最终解决。在此记录 一人像角度的修改 先放示意图 设备预览人像角度如图1所示&#xff0c;顺时针旋…

Taro React小程序开发框架 总结

目录 一、安装 二、目录结构 三、创建一个自定义页面 四、路由 1、API 2、传参 3、获取路由参数 4、设置TabBar 五、组件 六、API Taro非常好用的小程序框架&#xff0c;React开发者无缝衔接上。 一、安装 官方文档&#xff1a;Taro 文档 注意&#xff0c;项目创建…