logistic逻辑回归算法推导

本文深入解析逻辑回归在分类问题中的应用,从线性回归出发,介绍如何通过Sigmoid函数转换预测值为概率,阐述损失函数特性及梯度下降法求解过程。

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

逻辑回归:解决分类问题

在线性回归的基础上,通过激活函数sigmod转换为0-1概率值大小。

损失函数 

越靠近0,1,cost越大。

为凸函数,可以通过梯度下降方法求得最小值。函数图如下:

梯度下降法求最低值

函数求导

前半部分的导数

后半部分的导数

相加结果:

求导总结:

 

 

 

 

 

逻辑回归是一种广泛应用于二分类问题的统计模型,其核心思想是通过将线性回归的输出映射到一个概率值,从而预测某个样本属于某一类的概率。其数学推导主要包括以下几个关键部分: ### 1. 模型假设与Sigmoid函数 逻辑回归的基本假设是:给定输入特征向量 $ x $,输出的类别标签 $ y \in \{0,1\} $ 的概率可以通过以下函数建模: $$ P(y=1|x;w) = h_w(x) = \frac{1}{1 + e^{-w^T x}} $$ 该函数称为 **Sigmoid函数**,其输出范围在 $ (0,1) $ 之间,表示样本属于正类的概率。类似地,样本属于负类的概率为: $$ P(y=0|x;w) = 1 - h_w(x) $$ 因此,可以将两个类别的概率统一表示为: $$ P(y|x;w) = h_w(x)^y (1 - h_w(x))^{1-y} $$ [^5] ### 2. 似然函数与对数似然函数 对于一个训练集 $ \{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \dots, (x^{(n)}, y^{(n)})\} $,其联合概率(即似然函数)为: $$ L(w) = \prod_{i=1}^{n} P(y^{(i)}|x^{(i)};w) = \prod_{i=1}^{n} h_w(x^{(i)})^{y^{(i)}} (1 - h_w(x^{(i)}))^{1 - y^{(i)}} $$ 为了简化计算,通常取对数似然函数: $$ \ell(w) = \log L(w) = \sum_{i=1}^{n} \left[ y^{(i)} \log h_w(x^{(i)}) + (1 - y^{(i)}) \log (1 - h_w(x^{(i)})) \right] $$ [^2] ### 3. 目标函数与优化 逻辑回归的目标是最化对数似然函数 $ \ell(w) $,等价于最小化负对数似然函数: $$ J(w) = -\frac{1}{n} \sum_{i=1}^{n} \left[ y^{(i)} \log h_w(x^{(i)}) + (1 - y^{(i)}) \log (1 - h_w(x^{(i)})) \right] $$ 这个函数即为逻辑回归的 **代价函数**(cost function)。由于该函数是凸函数,因此可以通过梯度下降法或其他优化方法求解最优参数 $ w $。 ### 4. 梯度下降法求解 梯度下降法的核心是计算代价函数对参数 $ w $ 的偏导数,并沿负梯度方向更新参数。代价函数的梯度为: $$ \nabla_w J(w) = \frac{1}{n} \sum_{i=1}^{n} \left( h_w(x^{(i)}) - y^{(i)} \right) x^{(i)} $$ 参数更新公式为: $$ w := w - \alpha \nabla_w J(w) $$ 其中 $ \alpha $ 是学习率,控制每次更新的步长。 ### 5. 向量化实现 为了提高计算效率,通常采用向量化实现。设输入矩阵为 $ X \in \mathbb{R}^{n \times d} $,标签向量为 $ y \in \mathbb{R}^n $,参数向量为 $ w \in \mathbb{R}^d $,则预测值向量为: $$ h = \sigma(Xw) $$ 其中 $ \sigma(\cdot) $ 是Sigmoid函数。代价函数可表示为: $$ J(w) = -\frac{1}{n} \left[ y^T \log h + (1 - y)^T \log (1 - h) \right] $$ 梯度为: $$ \nabla_w J(w) = \frac{1}{n} X^T (h - y) $$ [^1] ### 6. Python代码实现示例 以下是一个简单的逻辑回归梯度下降实现: ```python import numpy as np def sigmoid(z): return 1 / (1 + np.exp(-z)) def logistic_regression(X, y, learning_rate=0.01, num_iters=1000): n, d = X.shape w = np.zeros(d) losses = [] for i in range(num_iters): h = sigmoid(X @ w) loss = -np.mean(y * np.log(h) + (1 - y) * np.log(1 - h)) losses.append(loss) gradient = (1 / n) * X.T @ (h - y) w -= learning_rate * gradient return w, losses ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值