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

吴恩达机器学习笔记复盘(十一)逻辑回归的代价和损失函数

简介

逻辑回归是一种二分类算法,损失函数和代价函数和线性回归模型不同。目标是根据特征预测标签Y(0或1)。模型通过参数W和B拟合数据,但如何选择最优参数成为关键。本质上说线性回归的损失函数是对数值本身的误差平均值描述,而逻辑回归的损失函数是对概率的误差平均值描述。

逻辑回归概念复习

为了便于思考,这里重新复述一下逻辑回归的概念,加深记忆。

逻辑回归用于解决二分类问题,其目标是根据输入特征预测样本属于某个类别的概率。对于一个样本 x,逻辑回归模型通过逻辑函数(也称为Sigmoid函数)将线性组合

z = w^T x + b

转换为概率值:

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

其中,w是权重向量,b是偏置项。

模型的输出

\hat{y} = \sigma(w^T x + b)

表示样本 x属于正类的概率。

损失函数

损失函数用于衡量单个样本的预测值与真实值之间的差异。在逻辑回归中,常用的损失函数是对数损失函数(Log Loss),也称为交叉熵损失函数(Cross-Entropy Loss)。

对于单个样本 (x, y),其中 y \in \{0, 1\} 是真实标签,\hat{y}是模型的预测概率,对数损失函数定义如下:

- 当 y = 1 时,损失函数为 -\log(\hat{y})。这意味着如果模型预测为正类的概率 \hat{y} 接近 1,损失就会很小;如果 \hat{y}接近 0,损失就会很大。

- 当y = 0时,损失函数为 -\log(1 - \hat{y})。同样,如果模型预测为负类的概率 1 - \hat{y}接近 1,损失就会很小;如果1 - \hat{y} 接近 0,损失就会很大。

可以将这两种情况合并为一个表达式: L(\hat{y}, y) = -y \log(\hat{y}) - (1 - y) \log(1 - \hat{y})

代价函数

代价函数是所有样本的损失函数的平均值,用于衡量整个训练集上模型的性能。

 - 非凸性:若直接沿用线性回归的平方误差代价函数,逻辑回归的代价函数会呈现非凸形态,导致梯度下降易陷入局部极小值。

- 图示说明:当模型输出F(x)(逻辑函数值)与真实标签差异较大时,平方误差的曲面会出现多个局部最小值,无法保证全局最优解。

给出解决方案

对于包含 m个样本的训练集\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \cdots, (x^{(m)}, y^{(m)})\},逻辑回归的代价函数 J(w, b)定义为:

J(w, b) = \frac{1}{m} \sum_{i = 1}^{m} \left[ -y^{(i)} \log(\hat{y}^{(i)}) - (1 - y^{(i)}) \log(1 - \hat{y}^{(i)}) \right]

其中,

\hat{y}^{(i)} = \sigma(w^T x^{(i)} + b)

是第 i个样本的预测概率。

损失函数和代价函数的特点

- 凸性:逻辑回归的代价函数是凸函数,这意味着它只有一个全局最小值,没有局部最小值。因此,可以使用梯度下降等优化算法来找到全局最优解。

- 单调性:对数损失函数具有单调性,即预测值与真实值之间的差异越大,损失函数的值就越大。这使得模型在训练过程中能够朝着减小损失的方向进行优化。

- 概率解释:对数损失函数可以从最大似然估计的角度进行解释。通过最大化训练数据的似然函数,可以得到最小化对数损失函数的结果。

 Python 代码示例

以下是一个非常简单的使用 Python 和 NumPy 实现逻辑回归损失函数和代价函数的示例:

import numpy as np

def sigmoid(z):
    """
    计算 Sigmoid 函数
    """
    return 1 / (1 + np.exp(-z))

def log_loss(y_true, y_pred):
    """
    计算单个样本的对数损失函数
    """
    return -y_true * np.log(y_pred) - (1 - y_true) * np.log(1 - y_pred)

def cost_function(X, y, w, b):
    """
    计算逻辑回归的代价函数
    """
    m = X.shape[0]
    z = np.dot(X, w) + b
    y_pred = sigmoid(z)
    cost = (1 / m) * np.sum(log_loss(y, y_pred))
    return cost

# 示例数据
X = np.array([[1, 2], [3, 4], [5, 6]])
y = np.array([0, 1, 1])
w = np.array([0.1, 0.2])
b = 0.3

# 计算代价函数
cost = cost_function(X, y, w, b)
print("Cost:", cost)

在这个示例中,我们首先定义了 Sigmoid 函数、对数损失函数和代价函数,然后使用示例数据计算了代价函数的值。

通过最小化代价函数,可以找到最优的权重向量 w 和偏置项 b,从而得到一个简单的的逻辑回归模型。

总结概括

  • 数学简洁性:避免了分段讨论,便于代码实现。将两种分类情况统一为单一表达式,降低了实现复杂度。
  • 凸性保证:代价函数为凸函数,梯度下降可收敛到全局最优解。确保了梯度下降的有效性,避免局部极小值问题。
  • 统计依据:该代价函数基于最大似然估计推导,符合统计学原理。
  • 后续将结合梯度下降算法,进一步优化逻辑回归模型的参数。

http://www.kler.cn/a/611977.html

相关文章:

  • 扭蛋机小程序开发,潮玩娱乐消费风口下的机遇
  • 右击没有Word、PPT、Excel功能
  • 蓝桥与力扣刷题(蓝桥 蓝桥骑士)
  • Centos 前准备工作
  • Rust vs. Go: 性能测试(2025)
  • 深入解析libsunrpc:构建分布式系统的核心RPC库
  • 考研408-数据结构完整代码 线性表的链式存储结构 - 单链表
  • 微商生态的技术重构:定制开发开源AI智能名片与S2B2C商城小程序源码的赋能逻辑
  • 登录接口带验证码自动化(tesseract-OCR)
  • Crypto Architecture Kit简介
  • DiskGenius 硬盘管理工具下载+D盘空间扩容给C盘教程
  • ZIP_STORED和ZIP_LZMA没有compresslevel参数!
  • Scala 简介
  • 数据库的DDL操作
  • Flutter视频播放优化
  • 【数学建模】(智能优化算法)元胞自动机在数学建模中的应用
  • LeetCode 20 Valid Parentheses 有效的括弧 Java
  • 5款视觉OCR开源模型
  • 输入百分比校验(数字非负数保留2位不四舍五入)
  • c# 动态库重名冲突处理方法 (起别名)