一、前言:為什麼不適合直接用線性迴歸進行分類?

線性迴歸的設計目標是預測連續型的數值(例如房價、溫度),若將其用於分類任務(例如預測是/否,以大於 0.5 算 1,小於 0.5 算 0),會遇到以下四個問題:

1. 輸出範圍無邊界

線性迴歸的預測公式為 z=wx+bz = wx + b,其輸出範圍涵蓋整個實數空間 (−∞,+∞)(-\infty, +\infty)。 在分類任務中,模型輸出的機率必須限制在 (0,1)(0, 1) 之間。若預測出 1000010000 或 −50-50,在數學與業務邏輯上較難給予合理解釋。

2. 易受異常值(Outliers)影響

線性迴歸使用最小平方法,會嘗試擬合所有的數據點。 若數據中存在特徵值極大的正樣本,整條擬合直線會產生偏移,導致決策邊界(y^=0.5\hat{y}=0.5 的位置)變動,可能使得原本能正確分類的樣本被誤判。

3. 對高置信度預測的高懲罰

假設某個樣本的真實標籤為 y=1y = 1(正類):

  • 若模型預測 y^=1\hat{y} = 1,誤差為 (1−1)2=0(1-1)^2 = 0。
  • 若模型預測 y^=2\hat{y} = 2(代表模型給予極高的預測值),在使用均方誤差(MSE)時,誤差會被計算為 (2−1)2=1(2-1)^2 = 1。 模型對於方向正確但數值較大的預測給予懲罰,在分類邏輯上並不合理。

4. 階躍函數不可導

若使用階躍函數(例如 z≥0→1z \ge 0 \to 1;z<0→0z < 0 \to 0)將線性輸出截斷為 0 和 1,會得到一個非連續的函數。此函數在分界點不可導,在其他地方導數均為 0,導致梯度下降法無法運作,模型難以訓練。

小結:分類任務為何需要預測「機率」?

預測連續的機率值(00 到 11 之間)相較於直接輸出硬分類結果有以下優勢:

  • 量化不確定性:模型預測「有 90%90\% 的機率為垃圾郵件」比「這是垃圾郵件」提供更多資訊。
  • 靈活的決策閾值(Threshold):輸出為機率,便能根據應用場景調整判斷標準(例如在醫療篩檢中調低閾值以防漏診)。
  • 計算損失較精準:機率值能反映模型預測的偏差程度,有助於損失函數微調權重。

二、邏輯迴歸的基礎:引入 Sigmoid 函數

為解決線性迴歸無邊界的問題,我們引入非線性函數(Sigmoid 函數),將輸出限制在 (0,1)(0, 1) 之間,這便是邏輯迴歸的基礎。 即:線性迴歸計算數值,Sigmoid 轉換為機率。

1. Sigmoid 函數公式與圖形

σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}} 將線性迴歸結果 z=wx+bz = wx + b 套入公式: y^=11+e−(wx+b)\hat{y} = \frac{1}{1 + e^{-(wx+b)}}

Sigmoid Function

2. Sigmoid 函數的特性

Sigmoid 符合分類任務的需求:

  1. 輸出具備機率含義:數值限制在 (0,1)(0, 1) 之間,0.8 代表模型評估為正類的機率為 80%。
  2. 具備決策分界點:σ(0)=0.5\sigma(0) = 0.5。 wx+b>0wx + b > 0 判為正類,wx+b<0wx + b < 0 判為負類,決策邊界即為 wx+b=0wx + b = 0。
  3. 處處可導:σ′(z)=σ(z)⋅(1−σ(z))\sigma'(z) = \sigma(z) \cdot (1 - \sigma(z)),便於使用梯度下降法。

3. 數學推導與運算效率

A. 為什麼 σ′(z)=σ(z)(1−σ(z))\sigma'(z) = \sigma(z)(1-\sigma(z))?

根據微積分的鏈式法則,推導如下: σ(z)=(1+e−z)−1\sigma(z) = (1 + e^{-z})^{-1} σ′(z)=−1⋅(1+e−z)−2⋅(−e−z)=e−z(1+e−z)2\sigma'(z) = -1 \cdot (1 + e^{-z})^{-2} \cdot (-e^{-z}) = \frac{e^{-z}}{(1 + e^{-z})^2} 將分子拆解並重新整理: σ′(z)=11+e−z⋅(1+e−z−11+e−z)=σ(z)⋅(1−σ(z))\sigma'(z) = \frac{1}{1 + e^{-z}} \cdot \left( \frac{1 + e^{-z} - 1}{1 + e^{-z}} \right) = \sigma(z) \cdot (1 - \sigma(z))

B. 對運算效率的幫助

在前向傳播時已計算出 σ(z)\sigma(z)。在反向傳播求梯度時,只需利用前向傳播的結果進行乘法運算 σ⋅(1−σ)\sigma \cdot (1 - \sigma),無需重新計算指數函數 e−ze^{-z},從而節省運算資源。

Derivative of Sigmoid Function


三、模型訓練:均方誤差 (MSE) 的侷限性

若直接將 MSE 應用於邏輯迴歸的機率輸出,會產生以下問題。

1. 線性迴歸 + MSE:凸函數

線性迴歸搭配 MSE 會形成一個凸函數 (Convex Function),保證梯度下降能找到全局最優解。 MSE Convex (Linear Regression)

2. 邏輯迴歸 + MSE:非凸函數

由於 Sigmoid 函數的非線性,若在此使用 MSE,損失函數會變成非凸函數(Non-convex Function),帶來兩個問題: MSE 非凸函數圖形

局部最優(Local Minimum)

梯度下降法可能在非凸函數的局部凹陷處停止更新,使得模型陷入局部最優解,無法抵達真正的最低點(全局最優解)。

梯度消失(Gradient Vanishing)

當模型初期的預測誤差極大(例如真實 y=1y=1,預測 y^≈0\hat{y} \approx 0)時,Sigmoid 的導數 σ′(z)\sigma'(z) 會趨近於 0(飽和區)。 此時雖然預測偏差大,但因為梯度趨於 0,參數的更新步長極小,模型學習速度會變得非常緩慢。


四、設計分類損失函數

為避免 MSE 應用於分類時的問題,針對分類問題的損失函數通常需具備以下特徵: 假設模型輸出機率為 pp:

  • 當真實標籤 y=1y=1,pp 越接近 1 損失越小,pp 越接近 0 損失則越大。
  • 當真實標籤 y=0y=0,pp 越接近 0 損失越小,pp 越接近 1 損失則越大。

[!NOTE] 損失最大的情況通常是模型對錯誤的分類給予極高的置信度(例如真實 y=1y=1,卻給出 p=0.001p=0.001)。


五、推導交叉熵損失(Cross-Entropy Loss)

工具一:對數函數(Logarithm)

在推導損失函數時,對數(log⁡\log)具有多方面的實用性:

1. 數學視角:單調性

  • 對數函數 log⁡(x)\log(x) 是一個嚴格單調遞增的函數。
  • 我們可以將「最大化機率」等價替換成「最大化機率的對數」。極值發生的位置不變,但乘法可轉換為加法,簡化運算。

2. 工程視角:防止數值下溢出

  • 聯合機率需將所有單一事件的機率相乘。多個小於 11 的數值連乘,會迅速趨近於 00,超出電腦浮點數能表示的下限,發生數值下溢出(Underflow),導致梯度歸零。
  • 引入 log⁡\log 將連乘轉換為連加:log⁡(a×b)=log⁡(a)+log⁡(b)\log(a \times b) = \log(a) + \log(b),有效減緩數值縮小速度,避免精度問題。

自然對數函數 y = log(x) 圖形

3. 機器學習視角:懲罰機制

假設 xx 是模型預測正確答案的機率:

  • 當 x→1x \to 1:−log⁡(1)=0-\log(1) = 0,損失為零。
  • 當 x→0x \to 0:−log⁡(x)→+∞-\log(x) \to +\infty,損失趨近於無限大。 這種特性可確保模型在預測偏差較大時產生足夠的梯度進行修正。此外,Log 的導數 1x\frac{1}{x} 可與 Sigmoid 的導數 x(1−x)x(1-x) 約分,使得梯度公式更簡潔。

線性懲罰與對數懲罰的比較

工具二:伯努利分佈

在二分類問題中,假設結果為 1 的機率是 pp,結果為 0 的機率是 1−p1-p。 可將其整合為單一機率公式: P(y)=py(1−p)1−yP(y) = p^y(1-p)^{1-y}

  • 當 y=1y = 1 時,公式為 p1×(1−p)0=pp^1 \times (1-p)^0 = p。
  • 當 y=0y = 0 時,公式為 p0×(1−p)1=1−pp^0 \times (1-p)^1 = 1-p。 此形式便於後續的連乘與求導操作。

工具三:最大似然估計(MLE)

最大似然估計的概念是:尋找一組參數,使得當前觀測結果發生的機率(似然函數)達到最大。

應用於邏輯迴歸

假設有 mm 個樣本,目標是尋找最佳權重 θ\theta:

  • 似然函數(所有樣本預測正確的機率連乘): L(θ)=∏i=1my^iyi(1−y^i)1−yiL(\theta) = \prod_{i=1}^m \hat{y}_i^{y_i}(1-\hat{y}_i)^{1-y_i}
  • 取對數(Log-Likelihood): log⁡L(θ)=∑i=1m[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]\log L(\theta) = \sum_{i=1}^m \left[ y_i\log(\hat{y}_i) + (1-y_i)\log(1-\hat{y}_i) \right]

結論:交叉熵損失函數

機器學習通常以「最小化損失」為目標,因此將似然函數加負號並取平均,即可得到交叉熵損失公式: J(θ)=−1m∑i=1m[yilog⁡(y^i)+(1−yi)log⁡(1−y^i)]J(\theta) = -\frac{1}{m} \sum_{i=1}^m \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right]

對單一樣本而言:

  • 當 y=1y = 1 時,損失為 −log⁡(y^i)-\log(\hat{y}_i)
  • 當 y=0y = 0 時,損失為 −log⁡(1−y^i)-\log(1-\hat{y}_i)

交叉熵損失函數曲線

交叉熵是一個凸函數,可確保模型利用梯度下降法穩定收斂至全局最優解。


六、梯度下降:權重更新公式

利用交叉熵損失函數計算梯度後,可得到與線性迴歸形式一致的權重更新公式。

梯度公式比較

項目線性迴歸 (Linear Regression)邏輯迴歸 (Logistic Regression)
權重梯度1m∑(y^−y)⋅xj\frac{1}{m} \sum (\hat{y} - y) \cdot x_j1m∑(y^−y)⋅xj\frac{1}{m} \sum (\hat{y} - y) \cdot x_j
偏置梯度1m∑(y^−y)\frac{1}{m} \sum (\hat{y} - y)1m∑(y^−y)\frac{1}{m} \sum (\hat{y} - y)
y^\hat{y} 的含義wx+bwx + b (連續數值)sigmoid(wx+b)sigmoid(wx + b) (機率)

公式特性

  1. 實作便利性:計算梯度的結構相同,差別僅在於 y^\hat{y} 是線性輸出或經過 Sigmoid 轉換。
  2. 穩定性:梯度 (y^−y)⋅x(\hat{y} - y) \cdot x 顯示參數更新的方向與幅度,取決於預測誤差 (y^−y)(\hat{y} - y) 及特徵輸入 xx。

七、模型評估與決策閾值

以乳癌檢測(測試集共 114 人)為例,說明如何評估模型表現。這段 Python 程式碼是使用機器學習領域最標準的工具庫 Scikit-Learn (sklearn) 來建立的。它是機器學習工程師在實作邏輯迴歸分類任務時,最經典、最標準的「工業級完整流水線(Pipeline)」,以下為完整程式碼:

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report

# 1. 載入乳腺癌數據集 (569 個樣本, 30 個特徵)
data = load_breast_cancer()
X, y = data.data, data.target

# 2. 切分訓練集 / 測試集 (比例為 8:2)
# stratify=y 確保訓練集與測試集中的正負樣本比例一致
# random_state=17 可精準重現 41 TP, 1 FN, 1 FP, 71 TN 的結果
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, stratify=y, random_state=17
)

# 3. 特徵縮放 (StandardScaler 標準化)
# 因為 30 個特徵的量綱(數值範圍)差異很大,標準化能幫助模型更快收斂
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 4. 建立與訓練邏輯迴歸模型
model = LogisticRegression(random_state=42)
model.fit(X_train_scaled, y_train)

# 5. 模型預測
y_pred = model.predict(X_test_scaled)      # 預測分類結果 (0 或 1)
y_prob = model.predict_proba(X_test_scaled) # 預測機率分布 (預測為 0 與 1 的各自機率)

# 6. 結果分析與評估
print("=== 模型評估結果 ===")
# 計算並印出準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"測試集準確率: {accuracy:.4f} (即 {accuracy:.2%})")

# 計算混淆矩陣
print("\n混淆矩陣 (Confusion Matrix):")
cm = confusion_matrix(y_test, y_pred)
print(cm)

# 印出詳細的評估報告 (包含 Precision, Recall, F1-score)
print("\n分類詳細報告:")
print(classification_report(y_test, y_pred, target_names=data.target_names))

1. 預測機率分布圖

預測機率分布圖

  • 圖表解析:紅色區塊代表真實為惡性腫瘤的患者(集中在 0 附近),藍色區塊代表真實為良性腫瘤的患者(集中在 1 附近)。
  • 結論:兩類樣本重疊度低,表示模型具備較好的區分能力。中央虛線為預設的決策閾值(Threshold = 0.5)。

2. 混淆矩陣 (Confusion Matrix)

若以 0.50.5 為閾值,可整理出混淆矩陣:

混淆矩陣

(註:在 Scikit-learn 預設資料中,惡性為 0,良性為 1。)

  • 真正例 TP (左上 41):實際為惡性,且預測正確。
  • 真負例 TN (右下 71):實際為良性,且預測正確。
  • 假正例 FP (左下 1,誤報):實際為良性,但預測為惡性。
  • 假負例 FN (右上 1,漏報):實際為惡性,但預測為良性。在醫療場景中,漏診通常帶來較大的風險。

該測試集準確率為 98.25%。

3. 決策閾值的權衡(Trade-off)

從混淆矩陣衍生出的常用指標:

  • 精確率(Precision):預測為正類的樣本中,實際為正類的比例。
  • 召回率(Recall):實際為正類的樣本中,被正確預測為正類的比例。

若要降低漏報率(FN),可考慮調整決策閾值。例如,將判斷為良性的標準提高(要求機率大於 0.80.8 才算良性)。這會降低漏報率,但可能增加誤報率。決策閾值的設定取決於實際應用場景對「誤報」與「漏報」的容忍度。


八、ROC 曲線與閾值選擇

為評估模型本身的分類能力,可使用 ROC 曲線與 AUC 分數。

ROC 曲線與決策閾值

  • ROC 曲線:繪製不同閾值下的假正率 (FPR) 與真正率 (TPR) 變化軌跡。曲線越靠近左上角,表示模型在較低 FPR 下能維持較高 TPR。
  • AUC 分數 (0.9954):ROC 曲線下的面積,滿分為 1.01.0。AUC 評估模型整體的排序能力,不受單一決策閾值影響。

閾值選擇範例

上圖中標示了五個不同閾值的點:

  • 閾值 = 0(暗紅色):全部判為正類。TPR = 1.00,FPR = 1.00。缺乏鑑別力。
  • 閾值 = 1(綠色):全部判為負類。TPR = 0.01,FPR = 0.00。漏診率高。
  • 閾值 = 0.8(藍色):TPR = 0.81,FPR = 0.02。雖然 FPR 低,但在醫療場景中 19% 的漏報率偏高。
  • 閾值 = 0.5(紅色)與 閾值 = 0.2(黃色):兩者 TPR 均為 1.00,FPR 均為 0.02。

選擇 0.5 或 0.2? 雖然在該測試集上表現相同,但在醫療等需要保守評估的場景中,常會選擇較低的閾值(如 0.2)作為緩衝,以降低潛在的漏報風險。實際選擇需視業務對 FPR 與 TPR 的權衡而定。


九、多分類:Softmax 迴歸

邏輯迴歸適用於二分類問題。對於多分類問題(例如:手寫數字辨識 0 到 9),通常使用 Softmax 迴歸。

1. Softmax 原理

  • 為每個類別計算一個「得分」(ziz_i)。
  • 透過 Softmax 函數,將得分轉化為機率分布。
  • 各類別機率總和為 1。

公式: Softmax(zi)=ezi∑jezjSoftmax(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}

直觀比喻: 在手寫數字辨識中,模型為 0 到 9 這 10 個類別各給出一個原始分數。Softmax 函數將這些分數透過指數運算 eze^z 轉換為正數並放大差異,再計算每個類別的佔比。最終輸出即為機率分布,例如預測為「7」的機率是 85%,預測為「1」的機率是 14%,其餘 1%。

2. 深度學習的關聯

邏輯迴歸的結構與單層神經網路高度相似:

  • 輸入層:特徵 x1,x2,…x_1, x_2, \dots
  • 權重與偏置:模型參數 ww 與 bb。
  • 激勵函數(Activation Function):Sigmoid(二分類)或 Softmax(多分類)。
  • 輸出層結構:現代神經網路的輸出層,處理分類任務時經常採用 Softmax 結構。

十、總結:線性迴歸 vs 邏輯迴歸

兩者的差異對比表:

評估維度線性迴歸 (Linear Regression)邏輯迴歸 (Logistic Regression)
解決問題回歸問題(預測連續數值)分類問題(預測類別)
模型輸出任意實數介於 0∼10 \sim 1 之間的機率
損失函數均方誤差 (MSE)交叉熵 (Cross-Entropy)
評估指標MSE / RMSE / R2R^2Accuracy / Precision / Recall / F1 / AUC

核心觀念整理

  1. 結構關聯:邏輯迴歸可視為線性迴歸結合 Sigmoid 函數的結果。
  2. 指標選擇:分類任務應根據場景需求,綜合考量 Precision、Recall 及 F1 分數,而非僅看準確率。
  3. 實務應用:邏輯迴歸具備可解釋性佳、訓練速度快等特點,在工業界廣泛應用。
  4. 多分類延伸:透過 Softmax 迴歸擴展至多分類,是神經網路常見的基礎結構。