邏輯回歸詳解:從數學原理到實際應用

文章目錄

    • 一、邏輯回歸的核心思想:從線性到概率
      • 1. 線性回歸的局限與突破
        • Sigmoid函數特性(代碼可視化):
    • 2. 邏輯回歸的預測公式
    • 二、損失函數:如何學習最優參數?
      • 1. 對數損失函數的數學定義
        • 損失函數解析:
      • 2. 代碼中的損失函數體現
    • 三、參數優化:梯度下降法
      • 1. 梯度計算與參數更新
      • 2. 代碼中的優化器選擇
    • 四、多分類邏輯回歸
      • 1. 多分類原理
      • 2. 代碼實現
    • 五、正則化:防止過擬合
    • 六、總結:邏輯回歸的核心邏輯

邏輯回歸(Logistic Regression)是機器學習中經典的分類算法,盡管名稱包含 “回歸”,但本質是通過概率建模解決分類問題。本文將結合具體代碼,從數學原理到實際應用,全面解析邏輯回歸的工作機制。

一、邏輯回歸的核心思想:從線性到概率

1. 線性回歸的局限與突破

線性回歸通過公式 y^=wTx+b\hat{y} = w^T x + by^?=wTx+b 預測連續值,但分類問題需要離散的類別輸出(如0/1)。邏輯回歸的解決方案是:用線性模型輸出作為輸入,通過Sigmoid函數轉換為[0,1]區間的概率值

Sigmoid函數的數學定義:
σ(z)=11+e?z\sigma(z) = \frac{1}{1+e^{-z}} σ(z)=1+e?z1?

其中 z=wTx+bz = w^Tx + bz=wTx+b(線性回歸輸出)。

Sigmoid函數特性(代碼可視化):
import numpy as np
import matplotlib.pyplot as pltdef sigmoid(z):return 1 / (1 + np.exp(-z))z = np.linspace(-10, 10, 100)
plt.plot(z, sigmoid(z), 'b-')
plt.axhline(y=0.5, color='r', linestyle='--', label='閾值0.5')
plt.xlabel('z = w·x + b')
plt.ylabel('σ(z) 概率值')
plt.title('Sigmoid函數曲線')
plt.legend()
plt.show()

從圖像可見,Sigmoid 函數將任意實數 zzz 映射到 (0,1),完美適配概率的定義:

  • z→+∞z \to +\inftyz+ 時,σ(z)→1\sigma(z) \to 1σ(z)1(高概率屬于正類)
  • z→?∞z \to -\inftyz? 時,σ(z)→0\sigma(z) \to 0σ(z)0(高概率屬于負類)
  • z=0z = 0z=0 時,σ(z)=0.5\sigma(z) = 0.5σ(z)=0.5(決策閾值)

2. 邏輯回歸的預測公式

結合 Sigmoid 函數,邏輯回歸的概率預測公式為:

p^=P(y=1∣x)=σ(wTx+b)=11+e?(wTx+b)\hat{p} = P(y=1|x) = \sigma(w^T x + b) = \frac{1}{1+e^{-(w^T x+b)}} p^?=P(y=1∣x)=σ(wTx+b)=1+e?(wTx+b)1?

分類決策規則:

  • p^≥0.5\hat{p} \geq 0.5p^?0.5,預測為正類(y=1y = 1y=1
  • p^<0.5\hat{p} < 0.5p^?<0.5,預測為負類(y=0y = 0y=0

二、損失函數:如何學習最優參數?

邏輯回歸通過對數損失函數(Log Loss)學習參數 wwwbbb,其設計思想是:讓正確分類的樣本概率盡可能高,錯誤分類的樣本概率盡可能低

1. 對數損失函數的數學定義

對于二分類問題(y∈{0,1}y \in \{0, 1\}y{0,1}),單個樣本的損失為:

L(w,b)=?[y?log?(p^)+(1?y)?log?(1?p^)]L(w, b) = -[y \cdot \log(\hat{p}) + (1 - y) \cdot \log(1 - \hat{p})] L(w,b)=?[y?log(p^?)+(1?y)?log(1?p^?)]

損失函數解析:
  • y=1y = 1y=1 時,損失簡化為 ?log?(p^)-\log(\hat{p})?log(p^?)p^\hat{p}p^? 越接近 1,損失越小
  • y=0y = 0y=0 時,損失簡化為 ?log?(1?p^)-\log(1 - \hat{p})?log(1?p^?)p^\hat{p}p^? 越接近 0,損失越小

所有樣本的平均損失(成本函數):

J(w,b)=?1n∑i=1n[yi?log?(p^i)+(1?yi)?log?(1?p^i)]J(w, b) = -\frac{1}{n} \sum_{i=1}^{n} [y_i \cdot \log(\hat{p}_i) + (1 - y_i) \cdot \log(1 - \hat{p}_i)] J(w,b)=?n1?i=1n?[yi??log(p^?i?)+(1?yi?)?log(1?p^?i?)]

2. 代碼中的損失函數體現

在sklearn的LogisticRegression中,損失函數已內置實現,無需手動編寫。以下代碼展示如何通過數據學習參數:

import numpy as np
from sklearn.linear_model import LogisticRegression# 示例數據
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])  # 特征
y = np.array([0, 0, 1, 1])                       # 標簽# 創建并訓練邏輯回歸模型
model = LogisticRegression()
model.fit(X, y)# 輸出學習到的參數
print("權重w:", model.coef_)  # 對應w1, w2
print("偏置b:", model.intercept_)  # 對應b

三、參數優化:梯度下降法

邏輯回歸通過梯度下降法最小化損失函數 J(w,b)J(w, b)J(w,b),核心是沿損失函數的負梯度方向迭代更新參數。

1. 梯度計算與參數更新

損失函數對參數的偏導數(梯度)為:

  • 對權重 wjw_jwj?

?J?wj=1n∑i=1n(p^i?yi)?xij\frac{\partial J}{\partial w_j} = \frac{1}{n} \sum_{i=1}^{n} (\hat{p}_i - y_i) \cdot x_{ij} ?wj??J?=n1?i=1n?(p^?i??yi?)?xij?

  • 對偏置 bbb

?J?b=1n∑i=1n(p^i?yi)\frac{\partial J}{\partial b} = \frac{1}{n} \sum_{i=1}^{n} (\hat{p}_i - y_i) ?b?J?=n1?i=1n?(p^?i??yi?)

參數更新公式(α\alphaα 為學習率):

wj=wj?α??J?wjw_j = w_j - \alpha \cdot \frac{\partial J}{\partial w_j} wj?=wj??α??wj??J?

b=b?α??J?bb = b - \alpha \cdot \frac{\partial J}{\partial b} b=b?α??b?J?

2. 代碼中的優化器選擇

sklearn 的 LogisticRegression 提供多種求解器(優化算法),如:

  • lbfgs:默認求解器,適合中小數據集
  • saga:支持大規模數據和 L1 正則化

四、多分類邏輯回歸

邏輯回歸可通過一對多(One-vs-Rest)策略擴展到多分類問題(如示例代碼中的 3 分類任務)。

1. 多分類原理

對于 KKK 個類別,訓練 KKK 個二分類模型:

  • 模型 1:區分 “類別 1” 和 “其他類別”
  • 模型 2:區分 “類別 2” 和 “其他類別”
  • 模型 KKK:區分 “類別 KKK” 和 “其他類別”

預測時選擇概率最高的類別作為結果。

2. 代碼實現

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline# 加載數據(前三列為特征,第四列為標簽1/2/3)
data = np.loadtxt('datingTestSet2.txt', delimiter='\t')
X = data[:, :-1]  # 特征
y = data[:, -1]   # 標簽# 拆分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1000
)# 構建模型管道(標準化+邏輯回歸)
clf_pipeline = Pipeline([('scaler', StandardScaler()),  # 特征標準化(加速收斂)('logistic', LogisticRegression(C=0.01,          # 正則化強度倒數(值越小正則化越強)max_iter=1000,   # 迭代次數multi_class='ovr'  # 多分類策略:一對多))
])# 訓練與評估
clf_pipeline.fit(X_train, y_train)
print("三分類準確率:", clf_pipeline.score(X_test, y_test))

五、正則化:防止過擬合

邏輯回歸通過正則化限制參數大小,避免模型過度復雜。sklearn中通過參數C控制正則化強度(C=1/λλ為正則化系數):

  • C越小:正則化越強,參數更接近 0,防止過擬合
  • C越大:正則化越弱,模型可能更復雜
# 對比不同C值的效果
for C in [0.01, 0.1, 1, 10]:model = Pipeline([('scaler', StandardScaler()),('logistic', LogisticRegression(C=C, max_iter=1000))])model.fit(X_train, y_train)print(f"C={C}時的準確率:", model.score(X_test, y_test))

六、總結:邏輯回歸的核心邏輯

  1. 模型本質:用 Sigmoid 函數將線性輸出轉換為概率,實現分類
  2. 決策邊界:線性邊界( wTx+b=0w^T x + b = 0wTx+b=0
  3. 學習機制:通過對數損失函數和梯度下降學習參數
  4. 擴展能力:支持多分類(一對多策略)和正則化

邏輯回歸因其簡單、高效、可解釋性強(參數w可表示特征重要性),成為工業界處理分類問題的基礎工具,也是理解神經網絡等復雜模型的入門鑰匙。

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

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

相關文章

粒子群優化算法(Particle Swarm Optimization, PSO) 求解二維 Rastrigin 函數最小值問題

前言 提醒&#xff1a; 文章內容為方便作者自己后日復習與查閱而進行的書寫與發布&#xff0c;其中引用內容都會使用鏈接表明出處&#xff08;如有侵權問題&#xff0c;請及時聯系&#xff09;。 其中內容多為一次書寫&#xff0c;缺少檢查與訂正&#xff0c;如有問題或其他拓展…

【GitHub Workflows 基礎(二)】深入理解 on、jobs、steps 的核心語法與執行邏輯

&#x1f4d8; GitHub Workflows 基礎&#xff08;二&#xff09;&#xff1a;深入理解 on、jobs、steps 的核心語法與執行邏輯繼第一篇講完 .github/workflows/ 中多個工作流的結構后&#xff0c;本篇將深入 GitHub Actions 的核心三要素&#xff1a;on&#xff08;觸發器&…

React Filber及核心原理

1. React Fiber 的核心目標??增量渲染?&#xff1a;將大型更新拆解為可中斷的小任務&#xff08;時間切片&#xff09;&#xff0c;避免阻塞主線程?優先級調度?&#xff1a;動態管理任務執行順序&#xff08;如用戶交互 > 動畫 > 數據加載&#xff09;。與瀏覽器協作…

Shader開發(五)什么是渲染管線

在計算機圖形學中&#xff0c;渲染管線&#xff08;Rendering Pipeline&#xff09; 是圖形處理器&#xff08;GPU&#xff09;將3D網格數據轉化為屏幕圖像的核心流程。無論是炫酷的游戲畫面還是逼真的動畫場景&#xff0c;這一切都離不開渲染管線的默默工作。對于想要學習著色…

CentOS7 使用Docker安裝MinIO完整教程

目錄 1. MinIO簡介 什么是MinIO? 為什么選擇Docker安裝? 2. 環境準備 檢查Docker狀態 檢查防火墻設置 創建存儲目錄 3. 快速啟動MinIO 基礎啟動命令 驗證啟動狀態 4. 配置持久化存儲 停止并刪除臨時容器 使用數據卷啟動MinIO 驗證數據持久化 5. 訪問MinIO控制臺…

【數據庫】時序數據庫選型指南:從大數據視角看IoTDB的核心優勢

文章目錄前言-官網鏈接一、時序數據管理的時代挑戰二、時序數據庫選型的六大核心維度1. 數據模型設計2. 寫入與查詢性能3. 存儲效率4. 系統擴展性5. 生態兼容性6. 運維復雜度三、IoTDB的技術架構解析1. 存儲引擎創新2. 計算引擎優勢3. 分布式架構設計四、行業解決方案對比1. 能…

【25-cv-08364】Keith攜Hello Angel版權圖發案

Hello Angel版權圖案件號&#xff1a;25-cv-08364起訴時間&#xff1a;2025/7/22原告&#xff1a;Angelea Clark Van Dam原告律所&#xff1a;Keith受理法院&#xff1a;伊利諾伊州北區地方法院原告介紹原告是是一位來自澳大利亞的藝術家&#xff0c;筆名為Hello Angel&#xf…

SkSurface---像素的容器:表面

如果說 SkCanvas 是畫布&#xff0c;是所有繪圖操作的提供者的話&#xff0c;那么 SkSurface 就是畫布的容器&#xff0c;我們稱之為表面&#xff0c;它負責管理畫布對應的像素數據。這些像素數據可以是在內存中創建的&#xff0c;也可以是在 GPU 顯存中創建的。創建一個空白表…

26.(vue3.x+vite)以pinia為中心的開發模板

效果截圖 代碼實現 HelloWorld.vue <template><div style="padding: 20px;">介紹:<br>1:使用class 來減少pinia(store)的代碼量<br>

華為AI Agent智能園藝助手開發案例

一、引言與行業背景 在數字化與智能化日益滲透我們生活的今天&#xff0c;園藝這一傳統而充滿生機的領域&#xff0c;也迎來了智能化的革新。華為AI Agent智能園藝助手通過融合人工智能與園藝專業知識&#xff0c;為用戶提供一站式、個性化的園藝養護解決方案&#xff0c;徹底改…

Linux Flathub軟件管理方法 使用指南

Flathub 使用指南&#xff1a;軟件安裝、管理及常用軟件推薦 一. 什么是 Flathub&#xff1f; Flathub 是 Flatpak 應用程序的主要分發中心&#xff0c;類似于 Linux 上的"應用商店"。它提供了一種跨發行版的軟件打包和分發方式&#xff0c;讓用戶可以在任何 Linux 發…

GitLab 18.2 發布幾十項與 DevSecOps 有關的功能,可升級體驗【二】

沿襲我們的月度發布傳統&#xff0c;極狐GitLab 發布了 18.2 版本&#xff0c;該版本帶來了議題和任務的自定義工作流狀態、新的合并請求主頁、新的群組概覽合規儀表盤、下載安全報告的 PDF 導出文件、中心化的安全策略管理&#xff08;Beta&#xff09;等幾十個重點功能的改進…

??免費語音轉換服務(TTS)全面指南

????1. TTS技術概述?? TTS&#xff08;Text-to-Speech&#xff09;通過AI將文字轉化為自然語音&#xff0c;核心技術包括??深度神經網絡&#xff08;DNN&#xff09;??、??語音韻律建模??和??聲學合成??。其核心優勢在于&#xff1a; ??多語言支持??&a…

正則化都是放在模型的哪個位置呢?

? 什么是“正則化”&#xff1f;在神經網絡中&#xff0c;正則化&#xff08;Regularization&#xff09; 抑制過擬合的技巧 目的是讓模型在訓練集和測試集上都表現得好&#xff08;泛化能力強&#xff09;。&#x1f9e0; 常見的正則化手段包括&#xff1a;方法類型通常放在哪…

Python畢業設計 | 基于協同過濾的智能商品推薦與數據大屏系統(Vue+Flask+Scikit-learn,附源碼+文檔)

個人介紹&#x1f3af; 畢業設計私人教練 專注計算機畢設輔導第 6 年&#xff0c;累計 1v1 帶飛 800 同學順利通關。從選題、開題、代碼、論文到答辯&#xff0c;一條龍陪跑&#xff1b;擅長把導師的 “模糊要求” 變成能落地的技術方案。白天寫方案&#xff0c;晚上改論文&…

基于千問2.5-VL-7B訓練識別人的表情

一、安裝LLaMA-Factory 我們使用LLaMA-Factory來進行微調&#xff0c;安裝LLaMA-Factory來參考文章&#xff1a; 大模型微調工具LLaMA-Factory的安裝流程-CSDN博客 二、下載千問2.5-VL-7B模型 我們使用千問2.5-VL-7B多模態模型來進行微調 通義千問2.5-VL-7B-Instruct 下載…

Android屏幕適配:從dp到px的轉換與今日頭條適配方案詳解

前言 在Android開發中&#xff0c;屏幕適配一直是一個重要且復雜的話題。不同設備有著不同的屏幕尺寸、分辨率和像素密度&#xff0c;如何讓應用在各種設備上都能良好顯示&#xff0c;是每個開發者都需要面對的問題。本文將深入探討Android系統中dp到px的轉換原理&#xff0c;并…

nvim 縮進4空格

要把 Neovim 配置為縮進 4 空格&#xff0c;并適用于所有語言&#xff08;或某些語言如 C/C&#xff09;&#xff0c;你只需要設置這三個核心選項即可&#xff1a;? 通用方式&#xff1a;在 init.lua 或 options.lua 中添加 vim.opt.tabstop 4 -- 一個 <Tab> 等…

pdw估計edw怎么估計

問題一、pdw估計edw怎么估計PDW&#xff08;Pulse Descriptor Word&#xff09;數據是雷達接收到的每一個脈沖的瞬時特征數據&#xff0c;EDW&#xff08;Emitter Descriptor Word&#xff09;是對某一輻射源&#xff08;發射機&#xff09;整體特性的估計。PDW 是每一個脈沖的…

TS語法最佳實踐

switch 的 case不能使用條件表達式JavaScript 允許在 switch 的 case 中使用條件表達式&#xff0c;但這種用法實際上是無效的&#xff0c;因為 case 的值會被隱式地轉換為布爾值。TypeScript 明確禁止這種用法&#xff0c;以避免隱式類型轉換導致的邏輯錯誤。建議使用 if-else…