机器学习—交叉熵代价函数—极大似然估计推导

本文深入探讨了逻辑回归模型及其背后的数学原理,通过极大似然估计推导出了交叉熵代价函数,揭示了逻辑回归如何通过Sigmoid函数预测样本属于正例的概率,并通过最大似然估计构建了逻辑回归的代价函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、极大似然估计

首先得知道什么是极大似然估计

吴恩达老师在公开课直接给出交叉熵代价函数并简单解释了交叉熵代价函数作为逻辑回归代价函数的合理性,在周志华老师的《机器学习》教材中,从极大似然估计角度详细证明了交叉熵代价函数的推导。

二、逻辑回归模型

周志华老师从模型开始详细的介绍了逻辑回归的由来与其实质。
在这里插入图片描述
加入Sigmoid函数后得出
在这里插入图片描述
而在经过进一步的计算y=0和y=1时的概率
在这里插入图片描述
最终某样本属于正例的概率可以表示为
在这里插入图片描述
某样本属于负例的概率可以表示为
在这里插入图片描述
将w·x视为Sigmoid函数的输入,其中w是模型参数,x是特征向量,将Sigmoid函数的输出视为预测为正例的概率。

那模型将样本预测为正例的概率为sigmod(w·x);将样本预测为负例概率为1- sigmod(w·x)。

三、极大化目标

极大化 => 将所有正例预测为正例的概率的累乘 * 将所有负例预测为负例的概率的累乘
在这里插入图片描述
而在计算机中通常求最小化问题,对上述公式运用对数法则对数似然并转换为求解最小化问题得出交叉熵代价函数:
在这里插入图片描述

四、使用极大似然估计构建逻辑回归代价函数另一种写法


在这里插入图片描述

五、最大似然估计和最小代价函数两种方式推导逻辑回归

大佬链接:
最大似然估计和最小代价函数两种方式推导逻辑回归

### 代价函数的作用 在机器学习中,代价函数(Cost Function)是用来衡量模型预测结果与实际值之间的误差的函数。它的主要作用是量化模型的性能,并为优化算法提供一个明确的目标,即最小化该误差[^4]。通过调整模型参数,使得代价函数的输出尽可能小,可以提高模型的准确性。 例如,在线性回归问题中,假设函数通常是一个一次函数 $ h_\theta(x) = \theta_0 + \theta_1 x $,其中 $\theta_0$ 和 $\theta_1$ 是模型参数。代价函数则基于这些参数计算出预测值与真实值之间的差异,常见的形式为均方误差(Mean Squared Error, MSE): $$ J(\theta) = \frac{1}{2m} \sum_{i=1}^{m} (h_\theta(x^{(i)}) - y^{(i)})^2 $$ 这里的 $ m $ 表示训练样本的数量,而 $ J(\theta) $ 是代价函数的输出值。此公式表明,代价函数的核心在于计算预测值 $ h_\theta(x^{(i)}) $ 与实际值 $ y^{(i)} $ 的平方差的平均值 [^2]。 --- ### 代价函数的原理 代价函数的设计需要满足以下特性:非负性、连续性和可导性。非负性确保了代价函数的值始终为正;连续性和可导性则允许使用梯度下降等优化方法来更新模型参数。 对于分类任务,常用的代价函数包括交叉熵代价函数(Cross-Entropy Cost Function)。与二次代价函数相比,交叉熵代价函数能够更有效地促进神经网络的训练,特别是在多分类问题中。交叉熵的基本形式如下: $$ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$ 其中 $ y^{(i)} $ 是第 $ i $ 个样本的真实标签,$ h_\theta(x^{(i)}) $ 是模型对该样本的预测概率。交叉熵代价函数的优势在于它能够直接反映预测概率与真实标签之间的差异,并且在反向传播过程中提供了更稳定的梯度更新方向 [^3]。 --- ### 代价函数的公式推导逻辑回归中的代价函数为例,其目标是最大化似然函数。给定一组训练数据 $ \{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), ..., (x^{(m)}, y^{(m)})\} $,假设模型的预测函数为: $$ h_\theta(x) = \frac{1}{1 + e^{-\theta^T x}} $$ 这是逻辑回归sigmoid 函数。根据最大似然估计法,似然函数可以表示为: $$ L(\theta) = \prod_{i=1}^{m} h_\theta(x^{(i)})^{y^{(i)}} (1 - h_\theta(x^{(i)}))^{1 - y^{(i)}} $$ 为了简化计算,通常取对数似然函数: $$ \log L(\theta) = \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$ 最终,代价函数定义为负的对数似然函数除以样本数量 $ m $: $$ J(\theta) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y^{(i)} \log(h_\theta(x^{(i)})) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)})) \right] $$ 这一推导过程展示了如何从统计学的角度出发,构造一个合理的代价函数 [^3]。 --- ### 示例代码:实现逻辑回归代价函数 下面是一个用 Python 实现逻辑回归代价函数的示例: ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def cost_function(theta, X, y): """ 计算逻辑回归代价函数 :param theta: 模型参数 :param X: 输入特征矩阵 :param y: 标签向量 :return: 代价函数值 """ m = len(y) h = sigmoid(X @ theta) cost = -(1/m) * (y.T @ np.log(h) + (1 - y).T @ np.log(1 - h)) return cost # 示例数据 X = np.array([[1, 2], [1, 3], [1, 4], [1, 5]]) y = np.array([0, 0, 1, 1]) theta = np.zeros(2) cost = cost_function(theta, X, y) print("代价函数值:", cost) ``` 这段代码首先定义了一个 sigmoid 函数用于计算预测概率,然后实现了代价函数的计算逻辑。 --- ### 相关问题 1. 什么是梯度下降法?它是如何利用代价函数进行模型优化的? 2. 在神经网络中,如何选择合适的代价函数? 3. 为什么交叉熵代价函数比二次代价函数更适合用于分类任务? 4. 如何理解代价函数与损失函数的关系?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值