主页 > IT业界  > 

用deepseek学大模型05逻辑回归

用deepseek学大模型05逻辑回归

deepseek :逻辑回归的目标函数,损失函数,梯度下降 标量和矩阵形式的数学推导,pytorch真实能跑的代码案例以及模型,数据,预测结果的可视化展示, 模型应用场景和优缺点,及如何改进解决及改进方法数据推导。

逻辑回归全面解析 一、数学推导

模型定义: 逻辑回归模型为概率预测模型,输出 P ( y = 1 ∣ x ) = σ ( w ⊤ x + b ) P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w}^\top \mathbf{x} + b) P(y=1∣x)=σ(w⊤x+b),其中 σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e−z1​。


1. 目标函数与损失函数

损失函数(交叉熵): 单个样本的损失: L ( y , y ^ ) = − y log ⁡ ( y ^ ) − ( 1 − y ) log ⁡ ( 1 − y ^ ) \mathcal{L}(y, \hat{y}) = -y \log(\hat{y}) - (1-y) \log(1-\hat{y}) L(y,y^​)=−ylog(y^​)−(1−y)log(1−y^​) 其中 y ^ = σ ( w ⊤ x + b ) \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b) y^​=σ(w⊤x+b)。

所有样本的平均损失(标量形式): J ( w , b ) = − 1 N ∑ i = 1 N [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] J(\mathbf{w}, b) = -\frac{1}{N} \sum_{i=1}^N \left[ y_i \log(\hat{y}_i) + (1-y_i) \log(1-\hat{y}_i) \right] J(w,b)=−N1​i=1∑N​[yi​log(y^​i​)+(1−yi​)log(1−y^​i​)]

矩阵形式( X \mathbf{X} X为设计矩阵, y \mathbf{y} y为标签向量): J ( w , b ) = − 1 N [ y ⊤ log ⁡ ( σ ( X w + b ) ) + ( 1 − y ) ⊤ log ⁡ ( 1 − σ ( X w + b ) ) ] J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log(\sigma(\mathbf{X}\mathbf{w} + b)) + (1-\mathbf{y})^\top \log(1-\sigma(\mathbf{X}\mathbf{w} + b)) \right] J(w,b)=−N1​[y⊤log(σ(Xw+b))+(1−y)⊤log(1−σ(Xw+b))]


2. 梯度下降推导

标量形式梯度: 对 w j w_j wj​求偏导: ∂ L ∂ w j = ( y ^ − y ) x j \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j ∂wj​∂L​=(y^​−y)xj​ 对 b b b求偏导: ∂ L ∂ b = y ^ − y \frac{\partial \mathcal{L}}{\partial b} = \hat{y} - y ∂b∂L​=y^​−y

矩阵形式梯度: 梯度矩阵为: ∇ w J = 1 N X ⊤ ( σ ( X w + b ) − y ) \nabla_{\mathbf{w}} J = \frac{1}{N} \mathbf{X}^\top (\sigma(\mathbf{X}\mathbf{w} + b) - \mathbf{y}) ∇w​J=N1​X⊤(σ(Xw+b)−y) ∂ J ∂ b = 1 N ∑ i = 1 N ( y ^ i − y i ) \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i) ∂b∂J​=N1​i=1∑N​(y^​i​−yi​)


损失函数的设计是机器学习模型的核心环节,它决定了模型如何衡量预测值与真实值的差异,并指导参数优化方向。逻辑回归的损失函数(交叉熵)设计并非偶然,而是基于概率建模、数学优化和信息论的深刻原理。以下从多个角度详细解释其设计逻辑:


一、损失函数的设计逻辑 1. 概率建模的视角

逻辑回归的目标是预测样本属于某一类的概率(二分类)。

假设数据服从伯努利分布: 对单个样本,标签 y ∈ { 0 , 1 } y \in \{0,1\} y∈{0,1},模型预测的概率为: { P ( y = 1 ∣ x ) = y ^ = σ ( w ⊤ x + b ) , P ( y = 0 ∣ x ) = 1 − y ^ . \begin{cases} P(y=1 \mid \mathbf{x}) = \hat{y} = \sigma(\mathbf{w}^\top \mathbf{x} + b), \\ P(y=0 \mid \mathbf{x}) = 1 - \hat{y}. \end{cases} {P(y=1∣x)=y^​=σ(w⊤x+b),P(y=0∣x)=1−y^​.​ 样本的联合似然函数为: L ( w , b ) = ∏ i = 1 N y ^ i y i ( 1 − y ^ i ) 1 − y i . L(\mathbf{w}, b) = \prod_{i=1}^N \hat{y}_i^{y_i} (1 - \hat{y}_i)^{1 - y_i}. L(w,b)=i=1∏N​y^​iyi​​(1−y^​i​)1−yi​.

最大化对数似然: 为了便于优化,对似然函数取负对数(将乘法转为加法,凸函数性质不变): − log ⁡ L ( w , b ) = − ∑ i = 1 N [ y i log ⁡ y ^ i + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] . -\log L(\mathbf{w}, b) = -\sum_{i=1}^N \left[ y_i \log \hat{y}_i + (1 - y_i) \log (1 - \hat{y}_i) \right]. −logL(w,b)=−i=1∑N​[yi​logy^​i​+(1−yi​)log(1−y^​i​)]. 最小化该式等价于最大化似然函数,此即 交叉熵损失。

2. 信息论视角

交叉熵(Cross-Entropy)衡量两个概率分布 P P P(真实分布)和 Q Q Q(预测分布)的差异: H ( P , Q ) = − E P [ log ⁡ Q ] . H(P, Q) = -\mathbb{E}_{P}[\log Q]. H(P,Q)=−EP​[logQ]. 对于二分类问题:

真实分布 P P P:标签 y y y是确定的(0或1),可视为一个 Dirac delta分布。预测分布 Q Q Q:模型输出的概率 y ^ \hat{y} y^​。 交叉熵的表达式与负对数似然一致,因此最小化交叉熵等价于让预测分布逼近真实分布。 3. 优化视角:梯度性质

交叉熵 vs 均方误差(MSE): 若使用 MSE 损失 L = 1 2 ( y − y ^ ) 2 \mathcal{L} = \frac{1}{2}(y - \hat{y})^2 L=21​(y−y^​)2,其梯度为: ∂ L ∂ w j = ( y − y ^ ) ⋅ y ^ ( 1 − y ^ ) ⋅ x j . \frac{\partial \mathcal{L}}{\partial w_j} = (y - \hat{y}) \cdot \hat{y} (1 - \hat{y}) \cdot x_j. ∂wj​∂L​=(y−y^​)⋅y^​(1−y^​)⋅xj​. 当 y ^ \hat{y} y^​接近 0 或 1 时(预测置信度高),梯度中的 y ^ ( 1 − y ^ ) \hat{y}(1 - \hat{y}) y^​(1−y^​)趋近于 0,导致 梯度消失,参数更新缓慢。

交叉熵的梯度为: ∂ L ∂ w j = ( y ^ − y ) x j . \frac{\partial \mathcal{L}}{\partial w_j} = (\hat{y} - y) x_j. ∂wj​∂L​=(y^​−y)xj​. 梯度直接正比于误差 ( y ^ − y ) (\hat{y} - y) (y^​−y),无论预测值大小,梯度始终有效,优化更高效。

4. 数学性质 凸性:交叉熵损失函数在逻辑回归中是凸函数(Hessian矩阵半正定),保证梯度下降能找到全局最优解。概率校准性:交叉熵强制模型输出具有概率意义(需配合 sigmoid 函数),而 MSE 无此特性。
二、为什么不是其他损失函数? 1. 均方误差(MSE)的缺陷 梯度消失问题(如上述)。对概率的惩罚不对称: 当 y = 1 y=1 y=1时,预测 y ^ = 0.9 \hat{y}=0.9 y^​=0.9的 MSE 损失为 0.01 0.01 0.01,而交叉熵损失为 − log ⁡ ( 0.9 ) ≈ 0.105 -\log(0.9) \approx 0.105 −log(0.9)≈0.105。 交叉熵对错误预测(如 y ^ = 0.1 \hat{y}=0.1 y^​=0.1时 y = 1 y=1 y=1)的惩罚更严厉( − log ⁡ ( 0.1 ) ≈ 2.3 -\log(0.1) \approx 2.3 −log(0.1)≈2.3),符合分类任务需求。 2. 其他替代损失函数 Hinge Loss(SVM使用): 适用于间隔最大化,但对概率建模不直接,且优化目标不同。Focal Loss: 改进交叉熵,解决类别不平衡问题,但需额外调整超参数。
三、交叉熵的数学推导 1. 从伯努利分布到交叉熵

假设样本独立,标签 y ∼ Bernoulli ( y ^ ) y \sim \text{Bernoulli}(\hat{y}) y∼Bernoulli(y^​),其概率质量函数为: P ( y ∣ y ^ ) = y ^ y ( 1 − y ^ ) 1 − y . P(y \mid \hat{y}) = \hat{y}^y (1 - \hat{y})^{1 - y}. P(y∣y^​)=y^​y(1−y^​)1−y. 对数似然函数为: log ⁡ P ( y ∣ y ^ ) = y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) . \log P(y \mid \hat{y}) = y \log \hat{y} + (1 - y) \log (1 - \hat{y}). logP(y∣y^​)=ylogy^​+(1−y)log(1−y^​). 最大化对数似然等价于最小化其负数,即交叉熵损失。

2. 梯度推导(矩阵形式)

设设计矩阵 X ∈ R N × D \mathbf{X} \in \mathbb{R}^{N \times D} X∈RN×D,权重 w ∈ R D \mathbf{w} \in \mathbb{R}^D w∈RD,偏置 b ∈ R b \in \mathbb{R} b∈R,预测值 y ^ = σ ( X w + b ) \hat{\mathbf{y}} = \sigma(\mathbf{X}\mathbf{w} + b) y^​=σ(Xw+b)。 交叉熵损失: J ( w , b ) = − 1 N [ y ⊤ log ⁡ y ^ + ( 1 − y ) ⊤ log ⁡ ( 1 − y ^ ) ] . J(\mathbf{w}, b) = -\frac{1}{N} \left[ \mathbf{y}^\top \log \hat{\mathbf{y}} + (1 - \mathbf{y})^\top \log (1 - \hat{\mathbf{y}}) \right]. J(w,b)=−N1​[y⊤logy^​+(1−y)⊤log(1−y^​)]. 梯度计算: ∂ J ∂ w = 1 N X ⊤ ( y ^ − y ) , \frac{\partial J}{\partial \mathbf{w}} = \frac{1}{N} \mathbf{X}^\top (\hat{\mathbf{y}} - \mathbf{y}), ∂w∂J​=N1​X⊤(y^​−y), ∂ J ∂ b = 1 N ∑ i = 1 N ( y ^ i − y i ) . \frac{\partial J}{\partial b} = \frac{1}{N} \sum_{i=1}^N (\hat{y}_i - y_i). ∂b∂J​=N1​i=1∑N​(y^​i​−yi​).


四、实际应用中的设计原则 任务需求匹配:分类任务需概率输出,回归任务用 MSE。优化效率:梯度应稳定且易于计算。概率解释性:损失函数需与概率模型一致(如交叉熵配 sigmoid)。鲁棒性:对异常值的敏感程度(交叉熵比 MSE 更敏感,需数据清洗)。
五、总结

逻辑回归的交叉熵损失函数是通过以下步骤设计的:

概率假设:假设数据服从伯努利分布。最大似然估计:将参数估计问题转化为优化问题。数学简化:取负对数似然,得到交叉熵形式。优化验证:选择梯度性质更优的损失函数。

这种设计使得逻辑回归在二分类任务中高效、稳定,且输出具有概率意义,成为基础且强大的模型。

二、PyTorch 代码案例 import torch import torch.nn as nn import matplotlib.pyplot as plt from sklearn.datasets import make_classification # 生成数据 X, y = make_classification(n_samples=1000, n_features=2, n_redundant=0, n_clusters_per_class=1) X = torch.tensor(X, dtype=torch.float32) y = torch.tensor(y, dtype=torch.float32).view(-1, 1) # 定义模型 class LogisticRegression(nn.Module): def __init__(self, input_dim): super().__init__() self.linear = nn.Linear(input_dim, 1) def forward(self, x): return torch.sigmoid(self.linear(x)) model = LogisticRegression(2) criterion = nn.BCELoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.1) # 训练 losses = [] for epoch in range(100): y_pred = model(X) loss = criterion(y_pred, y) loss.backward() optimizer.step() optimizer.zero_grad() losses.append(loss.item()) # 可视化损失曲线 plt.plot(losses) plt.title("Training Loss") plt.show() # 决策边界可视化 w = model.linear.weight.detach().numpy()[0] b = model.linear.bias.detach().numpy() x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.linspace(x_min, x_max, 100), np.linspace(y_min, y_max, 100)) Z = model(torch.tensor(np.c_[xx.ravel(), yy.ravel()], dtype=torch.float32)).detach().numpy() Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y.squeeze(), edgecolors='k') plt.title("Decision Boundary") plt.show()
三、可视化展示 数据分布:二维散点图展示类别分离情况。损失曲线:训练过程中损失值下降曲线。决策边界:等高线图显示模型预测分界线。
四、应用场景与优缺点

应用场景: 信用评分、垃圾邮件检测、疾病预测(线性可分问题)。

优点:

计算高效,适合大规模数据。输出概率解释性强。

缺点:

无法直接处理非线性关系。对多重共线性敏感。
五、改进方法与数学推导

正则化:

L2正则化:目标函数变为 J reg = J ( w , b ) + λ 2 ∥ w ∥ 2 J_{\text{reg}} = J(\mathbf{w}, b) + \frac{\lambda}{2} \|\mathbf{w}\|^2 Jreg​=J(w,b)+2λ​∥w∥2 梯度更新: w ← w − η ( ∇ w J + λ w ) \mathbf{w} \leftarrow \mathbf{w} - \eta \left( \nabla_{\mathbf{w}} J + \lambda \mathbf{w} \right) w←w−η(∇w​J+λw)

特征工程: 添加多项式特征 x 1 2 , x 2 2 , x 1 x 2 x_1^2, x_2^2, x_1x_2 x12​,x22​,x1​x2​等,将数据映射到高维空间。

核方法: 通过核技巧隐式映射到高维空间(需结合其他模型如SVM)。


六、总结

逻辑回归通过概率建模解决二分类问题,代码简洁高效,但需注意其线性假设的限制。通过正则化、特征工程等手段可显著提升模型性能。

标签:

用deepseek学大模型05逻辑回归由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“用deepseek学大模型05逻辑回归