当前位置: 首页 > article >正文

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

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.kler.cn/a/421855.html

相关文章:

  • Ubuntu22.04上kdump和crash的使用
  • 12.2深度学习_项目实战
  • 非标自动化行业ERP选型与案例展示!
  • 【设计模式系列】单例模式(二十)
  • 无分类编址的IPv4地址
  • 704. 二分查找 C++
  • imfilter函数用法及其在边缘检测中的应用详解
  • ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想
  • 网络技术-不使用K8S情况下哪些方法可搭建服务链编排
  • Spring Cloud Alibaba(六)
  • Spring Boot 进阶话题:Actuator
  • pytest自定义命令行参数
  • k8s Quality of Service
  • 使用 MATLAB 绘制雷达图并导入 Excel 数据
  • 机器学习周志华学习笔记-第13章<半监督学习>
  • MySQL:DQL数据库查询语言
  • FPGA实战篇(LED灯闪烁试验)
  • 机器学习快速入门(黑马程序员版)
  • 力扣3366.最小数组和
  • 可嵌入项目的Java文件系统
  • Redis服务配置文件 redis.conf 更新修改配置参数说明
  • springboot请求入参重复读问题ContentCachingRequestWrapper
  • 第四十四篇 EfficientNetV1、V2模型详解
  • 【机器学习】探索机器学习决策树算法的奥秘
  • 初识ProtoBuf以及环境搭建(Win和Ubuntu)
  • Qt自定义 Widget 组件