用deepseek學大模型05邏輯回歸

deepseek.com:邏輯回歸的目標函數,損失函數,梯度下降 標量和矩陣形式的數學推導,pytorch真實能跑的代碼案例以及模型,數據,預測結果的可視化展示, 模型應用場景和優缺點,及如何改進解決及改進方法數據推導。

邏輯回歸全面解析

一、數學推導

模型定義
邏輯回歸模型為概率預測模型,輸出 P ( y = 1 ∣ x ) = σ ( w ? x + b ) P(y=1 \mid \mathbf{x}) = \sigma(\mathbf{w}^\top \mathbf{x} + b) P(y=1x)=σ(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=1N?[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=1N?(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=1x)=y^?=σ(w?x+b),P(y=0x)=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=1N?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=1N?[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}) yBernoulli(y^?),其概率質量函數為:
P ( y ∣ y ^ ) = y ^ y ( 1 ? y ^ ) 1 ? y . P(y \mid \hat{y}) = \hat{y}^y (1 - \hat{y})^{1 - y}. P(yy^?)=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(yy^?)=ylogy^?+(1?y)log(1?y^?).
最大化對數似然等價于最小化其負數,即交叉熵損失。

2. 梯度推導(矩陣形式)

設設計矩陣 X ∈ R N × D \mathbf{X} \in \mathbb{R}^{N \times D} XRN×D,權重 w ∈ R D \mathbf{w} \in \mathbb{R}^D wRD,偏置 b ∈ R b \in \mathbb{R} bR,預測值 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=1N?(y^?i??yi?).


四、實際應用中的設計原則

  1. 任務需求匹配:分類任務需概率輸出,回歸任務用 MSE。
  2. 優化效率:梯度應穩定且易于計算。
  3. 概率解釋性:損失函數需與概率模型一致(如交叉熵配 sigmoid)。
  4. 魯棒性:對異常值的敏感程度(交叉熵比 MSE 更敏感,需數據清洗)。

五、總結

邏輯回歸的交叉熵損失函數是通過以下步驟設計的:

  1. 概率假設:假設數據服從伯努利分布。
  2. 最大似然估計:將參數估計問題轉化為優化問題。
  3. 數學簡化:取負對數似然,得到交叉熵形式。
  4. 優化驗證:選擇梯度性質更優的損失函數。

這種設計使得邏輯回歸在二分類任務中高效、穩定,且輸出具有概率意義,成為基礎且強大的模型。

二、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()

三、可視化展示
  • 數據分布:二維散點圖展示類別分離情況。
  • 損失曲線:訓練過程中損失值下降曲線。
  • 決策邊界:等高線圖顯示模型預測分界線。

四、應用場景與優缺點
  • 應用場景
    信用評分、垃圾郵件檢測、疾病預測(線性可分問題)。

  • 優點

    1. 計算高效,適合大規模數據。
    2. 輸出概率解釋性強。
  • 缺點

    1. 無法直接處理非線性關系。
    2. 對多重共線性敏感。

五、改進方法與數學推導
  1. 正則化

    • 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λ?w2
      梯度更新:
      w ← w ? η ( ? w J + λ w ) \mathbf{w} \leftarrow \mathbf{w} - \eta \left( \nabla_{\mathbf{w}} J + \lambda \mathbf{w} \right) ww?η(?w?J+λw)
  2. 特征工程
    添加多項式特征 x 1 2 , x 2 2 , x 1 x 2 x_1^2, x_2^2, x_1x_2 x12?,x22?,x1?x2?等,將數據映射到高維空間。

  3. 核方法
    通過核技巧隱式映射到高維空間(需結合其他模型如SVM)。


六、總結

邏輯回歸通過概率建模解決二分類問題,代碼簡潔高效,但需注意其線性假設的限制。通過正則化、特征工程等手段可顯著提升模型性能。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895699.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895699.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895699.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年02月17日Github流行趨勢

項目名稱:OmniParser 項目地址url:https://github.com/microsoft/OmniParser 項目語言:Jupyter Notebook 歷史star數:8971 今日star數:969 項目維護者:yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kris…

RocketMQ 5.0安裝部署

0.前言 在微服務架構逐漸成為主流的今天,消息隊列如同數字世界的快遞員,承擔著系統間高效通信的重要使命。 Apache RocketMQ 自誕生以來,因其架構簡單、業務功能豐富、具備極強可擴展性等特點被眾多企業開發者以及云廠商廣泛采用。歷經十余…

Ubuntu 22.04.5 LTS 安裝企業微信,(2025-02-17安裝可行)

一、依賴包(Ubuntu 20.04/Debian 11) 點擊下載https://www.spark-app.store/download_dependencies_latest 1、 下載最新的依賴包。 請訪問星火應用商店依賴包下載頁面, 下載最新的依賴包。2、解壓依賴包 </

如何使用 HPjtune 分析 Java GC 日志并優化 JVM 性能

HPjtune 是一款用于分析 Java 應用程序垃圾回收&#xff08;GC&#xff09;日志的工具&#xff0c;主要用于優化 JVM 性能。雖然 HPjtune 本身并不直接生成 HTML 格式的報告&#xff0c;但可以通過結合其他工具或方法將分析結果導出為 HTML 格式。以下是實現這一目標的步驟和方…

國產FPGA開發板選擇

FPGA開發板是學習和開發FPGA的重要工具&#xff0c;選擇合適的開發板對學習效果和開發效率至關重要。隨著國產FPGA的發展&#xff0c;淘寶上的許多FPGA開發板店鋪也開始進行國產FPGA的設計和銷售&#xff0c;本文將對國產FPGA和相關店鋪做個簡單梳理&#xff0c;幫助有需要使用…

Java高頻面試之SE-22

hello啊&#xff0c;各位觀眾姥爺們&#xff01;&#xff01;&#xff01;本baby今天又來了&#xff01;哈哈哈哈哈嗝&#x1f436; Java中的Optional了解多少&#xff1f; 在 Java 中&#xff0c;Optional 是 Java 8 引入的一個容器類&#xff0c;用于顯式處理可能為 null 的…

使用OBS和nginx實現直播流

使用OBS和nginx實現直播流&#xff0c;如 1&#xff0c;下載OBS OBS用于視頻錄制和直播的免費開源軟件。在 Windows、Mac 或 Linux 上快速輕松地下載并開始流式傳輸。官網下載 2&#xff0c;下載nginx 注意nginx需要下載帶gryghon版本&#xff0c;這個才有rtmp模塊&#xff0…

PyTorch 源碼學習:閱讀經驗 代碼結構

分享自己在學習 PyTorch 源碼時閱讀過的資料。本文重點關注閱讀 PyTorch 源碼的經驗和 PyTorch 的代碼結構。因為 PyTorch 不同版本的源碼實現有所不同&#xff0c;所以筆者在整理資料時盡可能按版本號升序&#xff0c;版本號見標題前[]。最新版本的源碼實現還請查看 PyTorch 倉…

python實現jaccard系數得出兩個集合的相似度

python實現jaccard系數得出兩個集合的相似度 1、簡介 計算兩個集合之間的Jaccard系數是一種常用的方法,用于衡量這兩個集合的相似度。 Jaccard系數定義為兩個集合交集大小與它們并集大小的比值。 Jaccard 系數的值范圍在 0 到 1 之間,值越大表示兩個集合越相似。 2、求兩個…

小愛音箱控制手機和電視聽歌的嘗試

最近買了小愛音箱pro&#xff0c;老婆讓我扔了&#xff0c;吃灰多年的舊音箱。當然舍不得&#xff0c;比小愛還貴&#xff0c;剛好還有一臺紅米手機&#xff0c;能插音箱&#xff0c;為了讓音箱更加靈活&#xff0c;買了個2元的藍牙接收模塊Type-c供電3.5接口。這就是本次嘗試起…

Pycharm+CodeGPT+Ollama+Deepseek

首先&#xff0c;體驗截圖&#xff1a; 接著&#xff1a; 1、下載Ollama&#xff1a; Download Ollama on macOS 2、下載模型 以1.5b為例&#xff0c;打開命令行&#xff0c;輸入: ollama run deepseek-r1:1.5b 3、Pycharm安裝Code GPT插件 打開PyCharm&#xff0c;找到文…

如何確保 for...in 循環按照特定順序遍歷對象屬性

由于 for...in 循環遍歷對象屬性的順序在 ECMAScript 規范中沒有嚴格規定&#xff0c;若要確保按照特定順序遍歷對象屬性&#xff0c;不能直接依賴 for...in 本身&#xff0c;不過可以借助一些其他方法來實現。以下是幾種常見的解決方案&#xff1a; 1. 使用數組存儲屬性名并排…

25/2/17 <嵌入式筆記> 桌寵代碼解析

這個寒假跟著做了一個開源的桌寵&#xff0c;我們來解析下代碼&#xff0c;加深理解。 代碼中有開源作者的名字。可以去B站搜著跟著做。 首先看下main代碼 #include "stm32f10x.h" // Device header #include "Delay.h" #include &quo…

Qt中基于開源庫QRencode生成二維碼(附工程源碼鏈接)

目錄 1.QRencode簡介 2.編譯qrencode 3.在Qt中直接使用QRencode源碼 3.1.添加源碼 3.2.用字符串生成二維碼 3.3.用二進制數據生成二維碼 3.4.界面設計 3.5.效果展示 4.注意事項 5.源碼下載 1.QRencode簡介 QRencode是一個開源的庫&#xff0c;專門用于生成二維碼&…

【Android開發】華為手機安裝包安裝失敗“應用是非正式版發布版本,當前設備不支持安裝”問題解決

問題描述 我們將Debug版本的安裝包發送到手機上安裝&#xff0c;會發現華為手機有如下情況 解決辦法 在文件gradle.properties中粘貼代碼&#xff1a; android.injected.testOnlyfalse 最后點擊“Sync now”&#xff0c;等待重新加載gradle資源即可 后面我們重新編譯Debug安裝…

前端面試手寫--虛擬列表

目錄 一.問題背景 二.代碼講解 三.代碼改裝 四.代碼發布 今天我們來學習如何手寫一個虛擬列表,本文將把虛擬列表進行拆分并講解,然后發布到npm網站上. 一.問題背景 為什么需要虛擬列表呢?這是因為在面對大量數據的時候,我們的瀏覽器會將所有數據都渲染到表格上面,但是渲…

vue項目本地svg圖標使用

提前準備&#xff1a; 1、一個本地的svg圖片 這個直接從網上找一個就行 2、文件整體目錄 安裝插件 npm i vite-plugin-svg-iconsvite.config.ts中配置插件 完整代碼 import { fileURLToPath, URL } from node:url import { resolve } from path import { defineConfig } f…

Go: 使用VS Code配置Go項目支持Windows與Linux雙系統調試

在現代軟件開發中&#xff0c;越來越多的開發者開始使用VS Code等集成開發環境&#xff08;IDE&#xff09;來提高生產力&#xff0c;特別是在支持遠程開發時。VS Code的遠程SSH功能&#xff0c;使得開發者可以在本地Windows電腦上&#xff0c;通過遠程SSH連接到Linux服務器&am…

萌新學 Python 之集合 set

集合 set&#xff1a;使用一對大括號&#xff0c;元素寫在大括號之間&#xff0c;使用逗號分隔 集合中的元素只能是不可變的數據類型&#xff0c;不能是列表、字典和集合 set1 {1, 2, 3} set2 {1, a, (1, 2, 3)} print(type(set1), type(set2)) # <class set> <c…

python中使用數據庫sqlite3

Python使用sqlite3數據庫 python3.x標準庫內置了SQLite3 查看sqlite的版本 import sqlite3 sqlite_version sqlite3.sqlite_version print(f"SQLite version: {sqlite_version}") 顯示 導入模塊連接sqlitte3 import sqlite3 consqlite3.connect("d:/fi…