跳至主要內容

    羅吉斯迴歸:如何把特徵變成分類機率?

    分清線性分數、sigmoid、log loss與分類閾值,再檢查輸出的機率是否可信

    sunny 桑尼· · 17 MIN READ · 191 次瀏覽

    羅吉斯迴歸:如何把特徵變成分類機率?
    本文目錄

    上一種模型預測配送要花幾分鐘;現在換一個問題:這張訂單會不會延遲?

    若直接用一條沒有輸出限制的直線預測「延遲機率」,可能算出−0.2或1.4,無法當成機率。羅吉斯迴歸先計算線性分數,再用sigmoid把它映射到0和1之間,建立二元事件的機率模型。

    這篇要把四件事拆開:怎麼算出機率型輸出、用什麼損失學參數、怎麼把分數轉成決策,以及機率到底準不準。名字有「迴歸」,不代表它在這裡預測的是連續分鐘數;它把線性結構放在log-odds上。

    第一步仍是加權和,輸出先叫z

    二元羅吉斯迴歸先用特徵計算一個線性分數:

    z = b + w₁x₁ + w₂x₂ + …
    p = sigmoid(z) = 1 / (1 + exp(−z))
    

    p用來表示模型估計的正類機率。你要先定義正類,例如延遲為1、準時為0;正類變了,機率的解釋也跟著變。

    圖1|橫軸是sigmoid的輸入分數,縱軸是輸出。z=0時p=0.5;有限z的數學結果在0與1之間,浮點運算則可能在極端處飽和。來源:Google,Calculating a probability with the sigmoid function,CC BY 4.0,原圖未改。

    z可以是任何實數;sigmoid對它做非線性轉換,但不是把大於1的值直接截成1。中間附近對z的變化比較敏感,兩端則逐漸變平。

    圖2|左圖先從x算z,右圖再從z算p。黃色點的原始x約−7.5,得到z=−10,再轉成約0.000045;不能把左圖x直接當成右圖的z。來源同圖1,原圖未改。

    算一次:距離先影響分數,再影響機率

    假設一個教學模型的截距是−3,距離係數是0.8,距離以公里輸入。這組係數是本文設定,不是從真實訂單訓練而來。

    z = −3 + 0.8×距離
    p = 1 / (1 + exp(−z))
    
    距離線性分數z模型延遲機率p
    1公里−2.2約0.100
    3公里−0.6約0.354
    5公里1.0約0.731

    同樣多兩公里,機率增加量不是固定的,因為線性的是z,不是p。這個模型也沒有證明距離造成延遲;它只按目前公式,把距離轉成一個機率型預測。

    圖3|來源教材以溫度預測Sunny=1、Rainy=0。資料點在0或1,曲線給中間的模型機率;這是原頁教學情境,不是本文配送數據,也未由本站驗證為真實天氣預報。來源:Erin Bugbee、Jared Wilber/Amazon MLU-Explain,Logistic Regression,CC BY-SA 4.0,原SVG重新渲染保存。

    係數解釋要回到odds,不能直接說機率乘幾倍

    機率p與odds不同。odds是正類機率和負類機率的比值:

    odds = p / (1−p)
    log-odds = ln(odds) = z
    

    若p=0.75,odds為3,表示正類對負類是3比1;不是75比1。

    在其他特徵固定時,某個輸入增加一單位,log-odds增加該係數,odds則乘上係數的指數。剛才距離係數0.8,意味每公里的模型odds乘 exp(0.8)≈2.226,不是延遲機率直接乘2.226。

    截距−3是所有輸入為0時的log-odds,exp(−3)才是那個位置的odds。零輸入是否有實際意義,也要回到特徵定義;模型係數的條件關係仍不能直接當成因果效果。

    訓練不只看猜對沒,還看機率有多合理

    同一張真正延遲的訂單,預測0.51與0.99在0.5閾值下都判延遲,但兩個機率承諾不同。只看分類正確與否,無法區分它們。

    二元log loss,也叫二元交叉熵,對單筆資料的定義是:

    loss(y,p) = −[y×ln(p) + (1−y)×ln(1−p)]
    
    y=1:loss = −ln(p)
    y=0:loss = −ln(1−p)
    
    真實結果預測p=0.1預測p=0.5預測p=0.9
    y=1約2.303約0.693約0.105
    y=0約0.105約0.693約2.303

    用自然對數計算時,越有把握卻猜錯,懲罰越大。這鼓勵模型改善機率預測,而不是只把分數推過一條分類線。

    圖4|藍線對應y=0,橘線對應y=1;p=0.5時兩者約0.69。來源:Erin Bugbee、Jared Wilber/Amazon MLU-Explain,CC BY-SA 4.0。以原圖重新渲染,調整文字描邊與0.69標籤位置以利閱讀,曲線、數值及座標未改;改作圖沿用相同授權。

    多筆資料可以加總,也可以取平均。比較數值時要先確認是哪一種,不能把一張總損失圖與另一張平均損失圖當成相同尺度。計算log loss時要保留p,不能先變成0/1標籤再代入對數。

    三筆數值核對:這裡先驗算前向計算

    以下用剛才的三個距離,另外設定真實標籤為0、0、1。程式只做指定係數下的機率與平均損失,不會學出或更新係數。

    from math import exp, log, log1p
    
    distance = [1.0, 3.0, 5.0]
    y = [0, 0, 1]
    b, w = -3.0, 0.8
    z = [b + w * x for x in distance]
    p = [1.0 / (1.0 + exp(-score)) for score in z]
    losses = [-log(q) if label == 1 else -log1p(-q) for label, q in zip(y, p)]
    print("分數:", [round(v, 3) for v in z])
    print("機率:", [round(v, 3) for v in p])
    print("平均log loss:", round(sum(losses) / len(losses), 6))
    for threshold in [0.5, 0.3]:
        print("閾值與標籤:", threshold, [int(q >= threshold) for q in p])
    

    本次用Python 3.10.12在WSL執行,分數為 [-2.2,-0.6,1.0],機率約 [0.100,0.354,0.731],平均log loss約0.285278。閾值0.5得到 [0,0,1],0.3得到 [0,1,1]。這個小範圍公式用來讀懂流程;極大或極小分數在正式系統中應採用數值穩定的實作。

    最大概似是估計目標,梯度下降是求解方法

    若把每筆標籤視為模型給定機率下的二元結果,最大化觀察到這組標籤的概似,等價於最小化對應的負對數概似,也就是加總log loss。固定樣本數下,改成平均不改變未正則化目標的最小值位置。

    梯度下降可以用來求這個目標。它不是與最大概似互斥的另一種目標;也可以採用其他數值優化方法。

    對單特徵、平均二元交叉熵,梯度可以寫得很簡單:

    ∂L/∂b = (1/n) Σ(pᵢ−yᵢ)
    ∂L/∂w = (1/n) Σ(pᵢ−yᵢ)×xᵢ
    

    先用目前係數算p與梯度,再依學習率更新。對線性logit與log loss,目標對參數是凸的,但步長與數值條件仍重要;不代表每個任意更新都能降低損失。

    資料完全可分、又沒有正則化時,係數可能越推越大,讓訓練損失趨近0,卻沒有有限的最大概似係數解。適當正則化與模型選擇,可以幫助控制這類問題;訓練分數仍要和保留資料上的表現一起看。

    閾值改的是決策,不會重新學出一套機率

    剛才程式只改threshold,p完全沒有變。你可以把同一組機率拿來做不同容量、誤報成本或漏報成本下的決策,但要在開發資料上選設定,再保留獨立評估。

    圖5|來源99筆玩具資料在0.10時為TP48、FP43、FN0、TN8。這裡展示的是原教材固定分數下的閾值變動,不是本文三筆算例。來源:Google,Thresholds and the confusion matrix,CC BY 4.0,原互動頁擷取。
    圖6|提高到0.90時為TP7、FP0、FN41、TN51。資料與分數沒換,分類名單變了;沒有誤報不代表沒有漏報。來源同圖5,原互動頁擷取。

    若只有原始線性特徵,在固定閾值下,決策邊界對應一個線性分數等於常數的位置;加入非線性特徵後,原始輸入空間的邊界則可以彎曲。不要把sigmoid曲線的S形,直接當成所有二維資料上的分類邊界形狀。

    排名、分類與校準,是不同的檢查

    圖7|ROC及其面積描述跨閾值的排序表現,操作點再對應特定誤報與抓取率;AUC不是機率校準的證據。來源:Google,ROC and AUC,CC BY 4.0,原圖未改。
    圖8|這張原圖標示AP約0.91,來源模型為LinearSVC;即使排名或預警名單表現不錯,也不能只靠PR圖認定輸出就是可靠機率。來源:scikit-learn developers,Precision-Recall,BSD 3-Clause,完整聲明見文末;原圖未改,本文未重跑。

    校準問的是:那些被報接近0.8的樣本,是否大約有八成實際為正類?把輸出限制在0到1,沒有自動滿足這個條件。模型設錯、正則化過強或樣本太少,都可能讓羅吉斯迴歸的機率不準。

    圖9|上方把預測機率分箱後,比較平均預測值與實際正類比例,理想參照是對角線;下方直方圖顯示各機率區間有多少樣本。來源採100,000筆合成資料,只用100筆訓練,其餘作評估,這是為教學設計的特殊切分。LinearSVC曲線使用來源明示的分數min-max轉換,不是證明SVM原生機率已校準。來源:scikit-learn developers,Comparison of Calibration of Classifiers,BSD 3-Clause,原圖未改,本文未重跑。

    這張圖只支持原例中的比較,不是模型家族的永久排名。校準曲線也要看各箱筆數與資料代表性;整體接近對角線,不保證每個城市、時段或子群都一樣可信。

    Log loss同時反映機率預測的辨別能力與校準等因素,不能把它直接當成純校準誤差。需要校準器時,擬合與評估也要避免資料洩漏;不能拿基礎模型已看過的答案,再當成獨立證據。

    什麼時候從羅吉斯迴歸開始?

    當目標是明確的二元事件、你希望有容易檢查的特徵與係數結構,它常是值得建立的基準。前提是輸入可得性、類別編碼、尺度、正則化與切分都正確,並且驗證支持這種表示。

    若重要關係無法由目前特徵的線性logit表達,可以比較非線性特徵、交互作用或其他模型。先問是哪種錯誤與資料條件沒有被處理,而不是因為模型名字較老就跳過它。

    交付時把正類、機率型輸出、分類閾值、選擇依據與校準檢查分開交代。這樣讀者才知道一個0.8到底是一個模型分數、經驗上可信的風險估計,還是一個尚未驗證的數字。

    來源與圖像授權

    配送距離、係數與標籤為本文另設教學資料;只實際執行其前向機率與損失計算,未訓練配送或天氣服務,也未重跑原圖實驗。

    圖像授權聲明

    以下保留scikit-learn原圖完整BSD聲明,原作者沒有為本站背書。

    BSD 3-Clause License
    
    Copyright (c) 2007-2026 The scikit-learn developers.
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    
    * Redistributions of source code must retain the above copyright notice, this
      list of conditions and the following disclaimer.
    
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    
    * Neither the name of the copyright holder nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    

    封面沿用本篇 Google 原圖,僅等比縮放並加白邊保留全圖,依原圖相同 CC BY 4.0 條件使用。

    手機版圖2將原圖左、右兩幅依序改為上、下排列,移除兩圖間的水平箭頭;座標、公式與資料點不變。原圖由 Google 提供,依 CC BY 4.0 改作。

    留言0

    登入後就能留言。

    登入
    sunny 桑尼
    sunny 桑尼

    AI 資料科學 · 產品經理 · 蒙奇 D 桑尼

    專注於 AI 工具應用與資料科學教育,致力於讓每個人都能用 AI 提升工作效率。曾任職於科技業,現為全職教育創作者。

    讀更多文章 →想自己動手試?領免費 Starter Kit →