神經網絡的本質 邏輯回歸 python的動態展示

神經網絡的本質 邏輯回歸 python的動態展示

    • 邏輯回歸運行圖
    • 相關代碼
    • 什么是邏輯回歸
    • 和ai的關系
    • 邏輯回歸公式流程與實際案例解析
        • **一、邏輯回歸的數學公式流程**
          • 1. **線性組合階段**
          • 2. **激活函數(Sigmoid)**
          • 3. **概率預測與決策**
          • 4. **交叉熵損失函數**
          • 5. **梯度下降優化**
        • **二、實際案例:腫瘤良惡性預測**
          • **1. 初始化參數**
          • **2. 前向傳播計算預測概率**
          • **3. 計算交叉熵損失**
          • **4. 計算梯度并更新參數**
          • **5. 迭代優化**
          • **6. 最終決策邊界**
        • **三、與代碼的結合解析**
        • **四、邏輯回歸的本質與局限**

邏輯回歸運行圖

在這里插入圖片描述

在這里插入圖片描述

相關代碼

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import time
from matplotlib.gridspec import GridSpec# 解決中文顯示問題
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False# 生成模擬數據
np.random.seed(int(time.time()))
n_samples = 200
X = np.vstack([np.random.normal([-1, -1], 1, size=(n_samples, 2)),np.random.normal([1, 1], 1, size=(n_samples, 2))
])
y = np.hstack([np.zeros(n_samples), np.ones(n_samples)])# 激活函數
def sigmoid(x):return 1 / (1 + np.exp(-x))# 訓練函數
def train(X, y, lr=0.01, epochs=300, save_every=10):n_samples, n_features = X.shapeW = np.random.randn(n_features)b = 0w_history = [W.copy()]b_history = [b]loss_history = []for epoch in range(epochs):linear_output = np.dot(X, W) + by_pred = sigmoid(linear_output)dW = (1 / n_samples) * np.dot(X.T, (y_pred - y))db = (1 / n_samples) * np.sum(y_pred - y)W -= lr * dWb -= lr * dbif epoch % save_every == 0:w_history.append(W.copy())b_history.append(b)loss = -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred))loss_history.append(loss)print(f"Epoch {epoch}, Loss: {loss:.4f}")return w_history, b_history, loss_history# 預測函數
def predict(X, W, b):linear_output = np.dot(X, W) + by_pred = sigmoid(linear_output)return np.round(y_pred)# 動畫更新函數(使用GridSpec管理布局)
def update(frame, w_history, b_history, X, y, gs):W = w_history[frame]b = b_history[frame]plt.clf()fig = plt.gcf()fig.set_size_inches(10, 8)# 主圖:數據點和決策邊界ax1 = fig.add_subplot(gs[0, :])ax1.scatter(X[y == 0, 0], X[y == 0, 1], c='blue', label='類別0', alpha=0.8)ax1.scatter(X[y == 1, 0], X[y == 1, 1], c='red', label='類別1', alpha=0.8)# 繪制決策邊界x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1xx, yy = np.meshgrid(np.linspace(x_min, x_max, 200), np.linspace(y_min, y_max, 200))Z = predict(np.c_[xx.ravel(), yy.ravel()], W, b)Z = Z.reshape(xx.shape)ax1.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')ax1.contour(xx, yy, Z, colors='k', linewidths=1)ax1.set_xlabel('特征1', fontsize=12)ax1.set_ylabel('特征2', fontsize=12)ax1.set_title(f'邏輯回歸訓練過程 - 迭代 {frame * 10}', fontsize=14)ax1.legend()# 子圖:損失曲線(使用GridSpec管理)ax2 = fig.add_subplot(gs[1, :])ax2.plot(range(len(loss_history))[1:], loss_history[1:], 'r-')ax2.set_title('損失曲線')ax2.set_xlabel('迭代 (x10)')ax2.set_ylabel('損失')ax2.grid(True)# 使用GridSpec后無需tight_layout# plt.tight_layout()  # 取消此行# 訓練模型
w_history, b_history, loss_history = train(X, y, lr=0.05, epochs=300, save_every=5)# 配置GridSpec布局
fig = plt.figure(figsize=(12, 10))
gs = GridSpec(2, 1, height_ratios=[3, 1], figure=fig)  # 主圖占3份,子圖占1份# 創建動畫
ani = FuncAnimation(fig, update,frames=len(w_history),fargs=(w_history, b_history, X, y, gs),interval=100,repeat=True
)plt.show()
plt.close('all')

什么是邏輯回歸

Logistic regression

  1. 分類算法
  2. 用于二分類問題
  3. 核心是構建線性模型
  4. 使用sigmoid函數將線性輸出映射到【0,1】區間
  5. 常用于垃圾郵件分析、風險控制、概率預測、特征分析

在這里插入圖片描述

在這里插入圖片描述
sigmoid函數可以很好的處理輸入的異常數據,并將輸出結果控制在【0,1】之間

在這里插入圖片描述
線性回歸使用 回歸線和所有點之間的平方差進行判斷
而對于邏輯回歸使用了交叉熵損失;
在這里插入圖片描述

和ai的關系

  1. AI 的基礎組成部分:
    人工智能的核心是讓機器具備 “學習” 和 “決策” 能力,而邏輯回歸作為最簡單的機器學習算法之一,是 AI 領域的基礎工具。它體現了 AI 中 “通過數據訓練模型進行預測” 的核心思想。
  2. 可解釋性 AI 的代表:
    相比復雜的深度學習模型,邏輯回歸的參數(權重和偏置)具有明確的物理意義,便于人類理解決策依據,因此在醫療、金融等對可解釋性要求高的場景中不可或缺。
  3. 復雜 AI 系統的前置步驟:
    在構建復雜 AI 系統時,邏輯回歸常作為基線模型(Baseline Model),用于對比更復雜模型的效果,或作為特征工程的驗證工具。

同時,邏輯回歸本質就是單層神經網絡,(僅有輸入、輸出層)
當神經網絡僅有一個輸出節點且使用sigmoid激活函數 == 邏輯回歸
邏輯回歸使用梯度下降法優化交叉熵損失,而神經網絡使用了反向傳播算法(擴展的梯度下降)優化損失;

邏輯回歸公式流程與實際案例解析

一、邏輯回歸的數學公式流程
1. 線性組合階段

邏輯回歸的基礎是線性模型,首先對輸入特征進行線性組合:

z = w?x? + w?x? + ... + w?x? + b = X·W + b
  • X:輸入特征向量(維度為n)
  • W:權重向量(模型參數)
  • b:偏置項(截距)
  • z:線性組合的結果
2. 激活函數(Sigmoid)

線性組合的結果通過sigmoid函數映射到[0,1]區間,表示樣本屬于正類的概率:

σ(z) = 1 / (1 + e^(-z))

sigmoid函數的特性:

  • 當z→+∞時,σ(z)→1(屬于正類的概率高)
  • 當z→-∞時,σ(z)→0(屬于負類的概率高)
  • 導數特性:σ’(z) = σ(z)(1-σ(z)),這對梯度計算很重要
3. 概率預測與決策

預測概率:

P(y=1|X) = σ(z) = 1 / (1 + e^(-X·W - b))
P(y=0|X) = 1 - σ(z)

決策規則:

y_pred = {1, if σ(z) ≥ 0.5; 0, otherwise}
4. 交叉熵損失函數

邏輯回歸使用交叉熵作為損失函數,衡量預測概率與真實標簽的差異:

單個樣本損失:
L(?, y) = -[y·log(?) + (1-y)·log(1-?)]m個樣本的平均損失:
J(W, b) = -(1/m)∑[y???·log(????) + (1-y???)·log(1-????)]
  • y:真實標簽(0或1)
  • ?:預測概率(σ(z))
5. 梯度下降優化

計算損失函數對參數的梯度:

dJ/dW = (1/m)∑(? - y)·X
dJ/db = (1/m)∑(? - y)

參數更新公式:

W = W - α·dJ/dW
b = b - α·dJ/db
  • α:學習率
二、實際案例:腫瘤良惡性預測

下面以一個簡化的腫瘤預測問題為例,演示邏輯回歸的完整計算過程。

問題設定:

  • 特征:腫瘤大小(cm)、細胞異型性評分(1-10)
  • 標簽:1(惡性),0(良性)
  • 樣本數據:3個訓練樣本
腫瘤大小(x?)異型性評分(x?)惡性(y)
2.571
1.840
3.281
1. 初始化參數

設初始權重和偏置為:

W = [0, 0]
b = 0
學習率α = 0.1
2. 前向傳播計算預測概率

以第一個樣本(2.5, 7)為例:

z = 0×2.5 + 0×7 + 0 = 0
? = σ(0) = 1/(1+e^0) = 0.5

三個樣本的預測概率:

  • 樣本1: ?=0.5
  • 樣本2: ?=0.5
  • 樣本3: ?=0.5
3. 計算交叉熵損失

單個樣本損失:

  • 樣本1: -[1·log(0.5) + 0·log(0.5)] = -log(0.5) ≈ 0.693
  • 樣本2: -[0·log(0.5) + 1·log(0.5)] = -log(0.5) ≈ 0.693
  • 樣本3: -[1·log(0.5) + 0·log(0.5)] = -log(0.5) ≈ 0.693

平均損失:

J = (0.693 + 0.693 + 0.693)/3 ≈ 0.693
4. 計算梯度并更新參數

計算每個樣本的(? - y):

  • 樣本1: 0.5 - 1 = -0.5
  • 樣本2: 0.5 - 0 = 0.5
  • 樣本3: 0.5 - 1 = -0.5

計算梯度:

dJ/dW? = (1/3)[(-0.5)×2.5 + 0.5×1.8 + (-0.5)×3.2]= (1/3)[-1.25 + 0.9 - 1.6] = (1/3)(-1.95) = -0.65dJ/dW? = (1/3)[(-0.5)×7 + 0.5×4 + (-0.5)×8]= (1/3)[-3.5 + 2 - 4] = (1/3)(-5.5) ≈ -1.833dJ/db = (1/3)[-0.5 + 0.5 - 0.5] = (1/3)(-0.5) ≈ -0.167

參數更新:

W? = 0 - 0.1×(-0.65) = 0.065
W? = 0 - 0.1×(-1.833) = 0.1833
b = 0 - 0.1×(-0.167) = 0.0167
5. 迭代優化

重復前向傳播、損失計算和梯度更新過程,直到損失收斂。假設經過100次迭代后,參數收斂到:

W = [0.8, 1.2]
b = -5.0
6. 最終決策邊界

決策邊界方程為:

0.8x? + 1.2x? - 5 = 0

當樣本滿足0.8x? + 1.2x? - 5 ≥ 0時,預測為惡性腫瘤;否則為良性。

三、與代碼的結合解析
  1. 數據生成:創建兩類二維數據點
  2. sigmoid函數:實現激活函數
  3. train函數
    • 初始化參數W和b
    • 前向傳播計算z和?
    • 計算交叉熵損失
    • 計算梯度并更新參數
    • 記錄訓練過程

代碼中的核心公式對應關系:

  • linear_output = np.dot(X, W) + b 對應 z = X·W + b
  • y_pred = sigmoid(linear_output) 對應 ? = σ(z)
  • loss = -np.mean(y * np.log(y_pred) + (1 - y) * np.log(1 - y_pred)) 對應交叉熵損失
  • dW = (1 / n_samples) * np.dot(X.T, (y_pred - y)) 對應梯度計算
四、邏輯回歸的本質與局限

邏輯回歸本質上是通過線性模型擬合樣本的對數幾率(log-odds):

log(?/(1-?)) = X·W + b

這使得它能夠處理概率意義上的分類問題。

局限性

  • 只能處理線性可分問題(通過特征工程可部分解決)
  • 對異常值敏感
  • 無法自動學習特征間的復雜交互

但作為基礎模型,邏輯回歸在工業界仍有廣泛應用,尤其在需要可解釋性的場景中(如金融風控、醫療診斷)。

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

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

相關文章

sql server中的with 鎖各種區別

📘 SQL Server 常用 WITH (Hint) 用法與組合場景對照表 Hint 組合作用說明常見用途是否阻塞他人是否讀臟數據備注WITH (NOLOCK)不加共享鎖,允許讀取未提交數據報表導出、大數據分頁??等價于 READ UNCOMMITTED,臟讀風險高WITH (HOLDLOCK)保持…

KES數據庫部署工具使用

一、啟動部署工具 Windows系統 #命令行 ${安裝目錄}/ClientTools/guitools/DeployTools/deploy.exeLinux系統 #命令行 [rootnode ~]# ${安裝目錄}/ClientTools/guitools/DeployTools/deploy二、環境配置 1.硬件要求 #都是最小配置 CPU:主流32或64位 內存&#…

TB62211FNG是一款采用時鐘輸入控制的PWM斬波器的兩相雙極步進電機驅動器

TB62211FNG是一款采用時鐘輸入控制的PWM斬波器的兩相雙極步進電機驅動器。該器件采用BiCD工藝制造,額定電壓為40伏/1.0安培。片上電壓調節器允許使用單一VM電源控制步進電機。 特點: ? 雙極性步進電機驅動器 ? 脈沖寬度調制(PWM&#xf…

uni-app項目實戰筆記24--uniapp實現圖片保存到手機相冊

前提條件:微信小程序要想實現保存圖片到本地相冊需要到微信公眾平臺--小程序--開發管理中配置服務器域名中的downloadFile合法域名: \uniapp提供了saveImageToPhotosAlbum API實現保存的圖片到本地相冊。下面是它的配置參數: 參數名類型必填…

面試題-定義一個函數入參數是any類型,返回值是string類型,如何寫出這個函數,代碼示例

在 TypeScript 里,要定義一個入參為any類型、返回值為string類型的函數,可參考下面幾種實現方式: 1. 基礎實現 直接把入參轉換為字符串返回。 function anyToString(input: any): string {return String(input); // 使用String()進行類型轉…

TensorFlow深度學習實戰——Transformer模型評價指標

TensorFlow深度學習實戰——Transformer模型評價指標 0. 前言1. 質量1.1 GLUE1.2 SuperGLUE1.3 SQuAD1.4 RACE1.5 NLP-progress2. 參數規模3. 服務成本相關鏈接0. 前言 可以使用多種類型的指標評估 Transformer 模型。在本節中,我們將學習一些用于評估 Transformer 的關鍵因素…

linux內核學習(一)---內核社區介紹及補丁提交

目錄 一、引言 二、內核源碼 三、內核社區 ------>3.1、社區的組織架構 ------>3.2、內核社區的工作方式 ------>3.3、內核社區核心網站 ------------>3.3.1、Linux Kernel 官網 ------------>3.3.2、Linux Kernel 郵件列表(LKML) ------------>3.3…

輕量級web開發框架之Flask web開發框架學習:get請求數據的發送

Flask是一個使用 Python 編寫的輕量級 Web 應用框架,簡介靈活,可快速構建開發框架。 協作流程示例 客戶端請求 → Web服務器(Nginx) → WSGI服務器(Gunicorn/uWSGI)↓WSGI協議傳遞請求數據(env…

Vue 3 異步三劍客:Suspense、async setup() 和 await 的戲劇性關系,白屏的解決

文章目錄 🎭 Vue 3 異步三劍客:Suspense、async setup() 和 await 的戲劇性關系,白屏的解決🎬 角色介紹🎭 正常演出流程(有 Suspense 時)💥 災難場景(缺少 Suspense 時&a…

【JavaScript-Day 48】告別 Ajax,擁抱現代網絡請求:Fetch API 完全指南

Langchain系列文章目錄 01-玩轉LangChain:從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊:四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain:從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

BUUCTF在線評測-練習場-WebCTF習題[極客大挑戰 2019]Knife1-flag獲取、解析

解題思路 這題沒有什么解題思路,打開靶場,標題是白給的shell 頁面顯示了 eval($_POST["Syc"]); 這是php webshell命令,密碼為Syc,可直接通過該命令連接,根據標題提示,直接嘗試用蟻劍連接 連接成…

Qt—(Qt線程,Qt進程,,QT與sqlite數據庫)

一 Qt線程與進程概述 線程與進程對比 特性線程 (QThread)進程 (QProcess)內存空間共享父進程內存獨立內存空間創建開銷小 (幾MB)大 (幾十MB)通信方式共享內存/信號槽管道/套接字/文件崩潰影響導致整個進程終止僅自身終止適用場景高并發任務、計算密集型隔離第三方應用、安全需求…

計算機視覺階段一:CV入門基礎

目錄 學習目標: 一、核心知識點 二、實用工具推薦 三、學習內容與步驟 1.環境搭建 2.圖像獲取與顯示 3 圖像基礎處理 4 圖像幾何變換 5 圖像像素操作 四、實戰任務建議 實戰 1:圖像加載 顯示 保存 實戰 2:灰度圖 邊緣檢測 圖…

新增MCP接入和AutoAgent,漢得靈猿AI中臺1.6版正式發布!

漢得靈猿(大圣)AI中臺1.6版本,經過數月迭代,現已正式發布! 新版本最被期待的新功能,無疑是4月份預告的MCP接入,而令人同樣激動的另一項新功能,則是AutoAgent動態規劃智能體。除了兩…

總結匯報思路

一、明確匯報目標 受眾需求:領導/客戶/團隊最關心什么?(結果?問題?下一步計劃?) 核心目的:展示成果?爭取資源?總結經驗?解決問題? 時…

文件鎖的藝術:深入解析 `fcntl(F_SETLK/F_GETLK)`

引言:在共享資源時代守護數據一致性 在多進程/多線程的應用場景中,文件作為一種共享資源常常面臨被并發訪問的挑戰。想象一個數據庫系統,多個客戶端可能同時嘗試修改同一數據文件;或者一個配置文件,需要確保在更新時不…

一個免費的視頻、音頻、文本、圖片多媒體處理工具

大家好,我是小悟。 給大家推薦一款可以免費使用的視頻、音頻、文本、圖片處理工具,名字叫百創工坊,不用下載,不用注冊,有免費的用就趕緊薅吧。 視頻工具 提取音頻:從視頻中提取音頻文件,支持多…

在 ef core 中操作復雜類型的序列化和反序列化時,如何全局設置 utf-8 編碼避免中文字符被轉義?

我們在使用 Entity Framework Core(EF Core) 時,如果希望 全局設置 JSON 序列化和反序列化使用 UTF-8 編碼,通常需要配置 System.Text.Json 的默認行為,因為 EF Core 6.0 及以上版本默認使用 System.Text.Json 進行 JS…

WPF CommunityToolkit.Mvvm 信使 (ObservableRecipient)

WPF CommunityToolkit.Mvvm 中的 ObservableRecipient 是什么? ObservableRecipient 是 .NET Community Toolkit MVVM 庫中的一個核心類,繼承自 ObservableObject。它專為 WPF 應用設計,提供以下核心功能: 基礎數據綁定支持&am…

《C++》命名空間簡述

文章目錄 一、命名空間定義二、訪問命名空間內的成員三、標準命名空間:std四、嵌套命名空間 一、命名空間定義 在C中,命名空間(namespace)是一種將標識符分組的機制,用于避免重命名。例如: int a 3;int main() {int a 0;print…