神經網絡的本質 邏輯回歸 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
- 分類算法
- 用于二分類問題
- 核心是構建線性模型
- 使用sigmoid函數將線性輸出映射到【0,1】區間
- 常用于垃圾郵件分析、風險控制、概率預測、特征分析
sigmoid函數可以很好的處理輸入的異常數據,并將輸出結果控制在【0,1】之間
線性回歸使用 回歸線和所有點之間的平方差進行判斷
而對于邏輯回歸使用了交叉熵損失;
和ai的關系
- AI 的基礎組成部分:
人工智能的核心是讓機器具備 “學習” 和 “決策” 能力,而邏輯回歸作為最簡單的機器學習算法之一,是 AI 領域的基礎工具。它體現了 AI 中 “通過數據訓練模型進行預測” 的核心思想。 - 可解釋性 AI 的代表:
相比復雜的深度學習模型,邏輯回歸的參數(權重和偏置)具有明確的物理意義,便于人類理解決策依據,因此在醫療、金融等對可解釋性要求高的場景中不可或缺。 - 復雜 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.5 | 7 | 1 |
1.8 | 4 | 0 |
3.2 | 8 | 1 |
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時,預測為惡性腫瘤;否則為良性。
三、與代碼的結合解析
- 數據生成:創建兩類二維數據點
- sigmoid函數:實現激活函數
- train函數:
- 初始化參數W和b
- 前向傳播計算z和?
- 計算交叉熵損失
- 計算梯度并更新參數
- 記錄訓練過程
代碼中的核心公式對應關系:
linear_output = np.dot(X, W) + b
對應 z = X·W + by_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
這使得它能夠處理概率意義上的分類問題。
局限性:
- 只能處理線性可分問題(通過特征工程可部分解決)
- 對異常值敏感
- 無法自動學習特征間的復雜交互
但作為基礎模型,邏輯回歸在工業界仍有廣泛應用,尤其在需要可解釋性的場景中(如金融風控、醫療診斷)。