
1. 從“預測”到“歸類”分類模型在數學建模中的角色轉變在數學建模的實戰中我們常常會遇到一類問題目標不再是預測一個具體的數值比如明天的氣溫、下個月的銷量而是要將研究對象“分門別類”。比如根據病人的各項體檢指標判斷其是否患有某種疾病健康/患病根據一封郵件的文本特征識別它是正常郵件還是垃圾郵件正常/垃圾或者根據一家企業的財務數據評估其信用等級AAA/AA/A...。這類問題的核心就是分類?!皵祵W建模學習筆記八——分類模型”這個標題指向的正是解決這類問題的核心工具箱。與回歸模型關注“是多少”不同分類模型關注的是“屬于哪一類”。這不僅僅是輸出形式的變化其背后的數學思想、模型假設、評估標準都發生了根本性的轉變。很多初學者在從回歸轉向分類時會不自覺地套用線性回歸的思路直接對類別標簽如0和1進行擬合這往往會走入誤區。分類模型有自己的一套“玩法”理解這套玩法的底層邏輯比記住幾個算法名字要重要得多。在這篇筆記里我不想僅僅羅列KNN、決策樹、SVM這些算法名稱和調用代碼。我更想和你一起拆解當我們面對一個分類問題時完整的思考路徑應該是怎樣的我們手頭的數據適合用什么模型不同模型到底是怎么“想”問題的那個準確率99%的模型真的就無敵了嗎在實際競賽和項目中有哪些教科書上不會寫的“坑”和“技巧”我們將從最基礎、最經典的模型入手剖析其原理對比其優劣并深入到模型評估、樣本不平衡等實戰中必然遇到的棘手問題。無論你是正在備戰數模競賽的學生還是希望將分類方法應用于實際工作的從業者這些從一次次調參、一次次失敗中總結出的經驗或許能幫你少走些彎路。2. 模型基石邏輯回歸——從線性到概率的橋梁當我們談論分類尤其是二分類結果只有兩種通常編碼為0和1時邏輯回歸往往是第一個被想到的模型。它名字里帶有“回歸”但本質是分類模型這本身就容易讓人困惑。它的核心思想是為線性回歸的輸出套上一個“概率轉換器”。2.1 為什么不能直接用線性回歸做分類設想一個簡單的二分類問題根據學習時間預測考試是否通過通過1不通過0。如果我們強行用普通線性回歸Y β? β?X去擬合會得到一條直線。這條直線會預測出諸如Y0.2或Y1.5這樣的值。這些值既不是0也不是1解釋起來很別扭0.2代表20%的可能性通過1.5代表150%的可能性這顯然不合理因為概率必須在0到1之間。更嚴重的是線性回歸的誤差項通常假設為正態分布而0/1標簽的分布與此嚴重不符會導致參數估計有偏且預測值可能超出[0,1]范圍。因此我們需要一個模型能將線性組合z β? β?X? ... β?X?的結果映射到(0,1)區間內并且這個映射函數最好是單調、光滑的。這就是Sigmoid函數或稱Logistic函數登場的原因。2.2 Sigmoid函數與“幾率”的概念Sigmoid函數的公式是σ(z) 1 / (1 e^{-z})。它的圖像是一條優美的S型曲線將整個實數域z ∈ (-∞, ∞)平滑地壓縮到(0, 1)區間。當z趨近于正無窮時σ(z)趨近于1當z趨近于負無窮時σ(z)趨近于0當z0時σ(z)0.5。在邏輯回歸中我們并不直接預測類別0或1而是預測樣本屬于正類標記為1的概率即P(Y1|X) σ(z)。那么這個z是什么z就是我們特征變量的線性組合。由此我們得到了邏輯回歸的核心方程P 1 / (1 e^{-(β? β?X? ... β?X?)})為了更容易理解參數β的意義我們引入“幾率”的概念。幾率Odds是指事件發生的概率與不發生的概率之比Odds P / (1-P)。將上面的公式進行變換可以得到P / (1-P) e^{β? β?X? ... β?X?}兩邊取自然對數ln(P / (1-P)) β? β?X? ... β?X?左邊ln(P / (1-P))稱為對數幾率。這個公式非常美妙它意味著邏輯回歸模型實際上是在用線性模型擬合輸出Y的對數幾率。因此參數β?就有了清晰的解釋在其他特征不變的情況下特征X?每增加一個單位其對應的對數幾率將增加β?或者說幾率將變為原來的e^{β?}倍。如果β?是正數e^{β?}1說明該特征對預測為正類有正向貢獻反之則為負向貢獻。注意這里的“幾率”是統計學概念與日常用語中的“概率”含義不同e^{β?}是幾率比解釋時務必謹慎避免說成“概率增加了β?”。2.3 參數估計極大似然法與梯度下降線性回歸用最小二乘法估計參數目標是讓預測值與真實值的平方誤差最小。但邏輯回歸的輸出是概率真實值是類別標簽平方誤差不再適用。邏輯回歸采用極大似然估計。其思想是尋找一組參數β使得在這組參數下觀測到當前這批樣本數據的可能性似然最大。對于單個樣本其似然函數是如果真實標簽y1我們希望預測概率P盡量大如果y0我們希望1-P盡量大??梢越y一寫為L(β) P^y * (1-P)^{1-y}。對于所有獨立同分布的樣本整體似然函數是每個樣本似然的乘積。通常我們對其取對數對數似然函數將連乘變為連加便于求導優化。LL(β) Σ [y_i * ln(P_i) (1-y_i) * ln(1-P_i)]我們的目標就是最大化這個對數似然函數LL(β)。由于直接求解析解困難通常采用數值優化方法如梯度下降法或其變種如隨機梯度下降、擬牛頓法來求解。梯度下降會沿著對數似然函數梯度增長最快的方向逐步調整參數β直至找到最大值點。實操心得在實際調用sklearn.linear_model.LogisticRegression時其solver參數就是指定優化算法。對于小數據集或特征不多的情況liblinear是不錯的選擇對于大數據集sag或saga隨機平均梯度下降效率更高。另外務必要注意penalty正則化參數默認的L2正則化能有效防止過擬合尤其是在特征較多或存在共線性時。3. 線性與非線性分界支持向量機SVM的幾何直覺如果說邏輯回歸是從概率統計的視角切入分類那么支持向量機則是從幾何間隔最大化的視角為我們提供了另一種清晰而強大的思路。SVM的核心目標是找到一個超平面不僅能將兩類樣本分開還要使兩類樣本中離這個超平面最近的點的距離即“間隔”盡可能大。這些最近的樣本點就被稱為“支持向量”它們決定了超平面的最終位置。3.1 硬間隔與軟間隔理想與現實的妥協在最理想的、線性可分的情況下SVM尋找的是“硬間隔”超平面。它要求所有樣本都被正確分類且間隔最大化。這可以轉化為一個凸二次規劃問題有成熟的算法求解。然而現實中的數據往往不是完美線性可分的或者存在一些噪聲點。如果堅持硬間隔可能會導致模型非常復雜過擬合或者根本找不到解。這時就需要引入“軟間隔”。軟間隔SVM允許一些樣本點違反間隔約束甚至被錯誤分類但對這些“違規”行為施加懲罰。這個懲罰力度由一個超參數C來控制。C值很大意味著對分類錯誤的懲罰很重模型會傾向于更少的誤分類間隔可能變窄模型更復雜容易過擬合。C值很小意味著對分類錯誤的容忍度較高模型更追求“寬間隔”允許一些樣本點落在間隔內或被誤分模型更簡單可能欠擬合。C的選擇是SVM調參的關鍵之一通常需要通過交叉驗證來確定。3.2 核技巧升維打擊解決非線性問題SVM本質上是線性分類器但通過“核技巧”它能巧妙地處理非線性分類問題。其思想非常精妙如果原始特征空間中的數據線性不可分我們可以通過一個映射函數φ將數據映射到一個更高維甚至是無窮維的特征空間。在這個高維空間中數據可能就變得線性可分了。SVM在這個高維空間中尋找最優超平面。但直接計算高維空間中的內積φ(x_i)·φ(x_j)可能計算量巨大維度災難。核技巧的精髓在于我們不需要知道映射函數φ的具體形式也不需要真的去高維空間計算只要找到一個函數K(x_i, x_j)它在原始空間的計算結果等于在高維空間的內積結果即K(x_i, x_j) φ(x_i)·φ(x_j)。這個函數K就是核函數。常用的核函數有線性核K(x_i, x_j) x_i·x_j。就是原始空間的內積退化為線性SVM。多項式核K(x_i, x_j) (γ * x_i·x_j r)^d。其中d是多項式次數γr是參數。徑向基函數核K(x_i, x_j) exp(-γ * ||x_i - x_j||^2)。這是最常用、最強大的核函數之一γ參數控制單個樣本的影響范圍。γ越大模型越復雜容易過擬合γ越小模型越平滑容易欠擬合。踩坑實錄核函數和參數的選擇極具藝術性。我曾在一個項目中用RBF核的SVM在訓練集上達到了接近100%的準確率欣喜若狂。但在測試集上卻一塌糊涂。這就是典型的過擬合。后來通過網格搜索交叉驗證找到了一個合適的(C, γ)組合雖然訓練集準確率降到95%但測試集穩定在92%以上泛化能力大大提升。切記在SVM中C和核參數如RBF的γ的調優是必須的步驟不能只看訓練集效果。3.3 SVM的優缺點與適用場景優點在高維空間中非常有效。當特征維度遠大于樣本數時仍然能較好地工作。決策函數只依賴于支持向量內存效率高。通過核函數可以靈活處理非線性問題。缺點如果特征數量遠大于樣本數量核函數的選擇和正則化項C就至關重要否則容易過擬合。不直接提供概率估計sklearn中可以通過probabilityTrue設置進行概率校準但會增加計算開銷。對缺失數據和參數調優比較敏感。大規模訓練樣本時訓練速度可能較慢盡管有序列最小優化等高效算法。適用場景SVM特別適用于小到中型、特征維度較高、且需要清晰決策邊界的分類問題如圖像識別、文本分類等。4. 樹形結構的力量從決策樹到隨機森林決策樹是一種非常直觀的“白盒”模型它模擬人類做決策的過程通過一系列“如果...那么...”的問題最終得到一個結論。構建一棵決策樹關鍵在于如何選擇每個節點上用于劃分數據的特征。4.1 決策樹的核心特征選擇與劃分準則決策樹學習的目的是為了產生一棵泛化能力強即處理未見示例能力強的樹。其生成是一個遞歸地選擇最優劃分特征并根據該特征對訓練數據進行分割使得各個子數據集有一個最好的分類的過程。這個過程對應著對特征空間的劃分也對應著決策樹的構建。常用的特征選擇準則有信息增益這是ID3算法使用的準則。它基于信息論中的熵。熵表示隨機變量不確定性的度量。信息增益表示得知特征X的信息而使得類Y的信息的不確定性減少的程度。傾向于選擇分支數量多的特征有偏好。信息增益比C4.5算法對信息增益的改進用信息增益除以該特征本身的熵稱為“分裂信息”來校正信息增益對可取值數目較多的特征的偏好。基尼指數CART樹用于分類的準則。基尼指數表示一個隨機選中的樣本在子集中被分錯的可能性?;嶂笖翟叫〖系募兌仍礁?。與信息增益/信息增益比相比基尼指數的計算不涉及對數運算速度稍快。以基尼指數為例對于數據集D其基尼值為Gini(D) 1 - Σ (p_k)^2其中p_k是第k類樣本所占的比例。 若根據特征A將D劃分為兩個子集D1和D2則劃分后的基尼指數為Gini(D, A) |D1|/|D| * Gini(D1) |D2|/|D| * Gini(D2)我們選擇那個使得Gini(D, A)最小的特征A作為當前節點的劃分特征。4.2 剪枝對抗過擬合的必由之路決策樹非常容易過擬合它可以一直生長直到每個葉子節點只包含一個樣本純度100%但這棵樹在訓練集上準確率100%在未知數據上往往表現很差。剪枝是決策樹學習算法中對付過擬合的主要手段。剪枝分為預剪枝和后剪枝預剪枝在樹生長過程中對每個節點劃分前進行估計若當前節點的劃分不能帶來決策樹泛化性能的提升如驗證集準確率不再提高則停止劃分并將該節點標記為葉節點。預剪枝降低了過擬合風險減少了訓練時間但可能帶來欠擬合風險因為有些分支的當前劃分雖不能提升泛化性能但在其基礎上進行的后續劃分卻有可能顯著提高性能。后剪枝先構造一棵完整的決策樹然后自底向上地對非葉節點進行考察若將該節點對應的子樹替換為葉節點能帶來決策樹泛化性能的提升則將該子樹替換為葉節點。后剪枝通常比預剪枝保留了更多的分支欠擬合風險小但訓練時間開銷更大。個人體會在實際使用sklearn.tree.DecisionTreeClassifier時我們通過參數來控制樹的復雜度和剪枝。max_depth最大深度和min_samples_leaf葉節點最少樣本數是最常用、最有效的預剪枝參數。通常我會先設置一個較大的max_depth比如10然后通過繪制“樹深度-交叉驗證得分”曲線來觀察模型性能何時達到平臺期或開始下降從而確定一個合適的深度。盲目追求深度只會得到一棵在訓練集上“完美”但無用的樹。4.3 集成學習隨機森林如何讓“樹”變得強大單棵決策樹不穩定容易過擬合。而隨機森林通過Bagging集成思想和隨機特征選擇構建了多棵決策樹并通過投票分類或平均回歸來得到最終結果顯著提升了模型的泛化能力和魯棒性。隨機森林的構建過程自助采樣從原始訓練集中有放回地隨機抽取n個樣本形成一個自助采樣集。該過程重復B次B即森林中樹的數量得到B個不同的訓練子集。隨機特征對于每棵樹的每個節點不是從所有m個特征中選擇最優劃分特征而是先隨機選取一個特征子集通常大小為sqrt(m)或log2(m)然后從這個子集中選擇最優特征進行劃分。這進一步增強了樹之間的差異性。獨立生長每棵樹都基于其對應的訓練子集和特征選擇策略獨立地生長不進行剪枝或僅進行很弱的剪枝讓其充分生長。集成輸出對于分類問題B棵樹進行投票對于回歸問題取B棵樹輸出的平均值。為什么隨機森林有效降低方差通過平均多棵高方差、低偏差的樹決策樹容易過擬合即高方差有效降低了整體模型的方差。引入隨機性自助采樣和隨機特征選擇保證了樹之間的差異性使得集成模型更穩定不易過擬合。天然評估在自助采樣過程中約有37%的樣本未被抽中這些“袋外”樣本可以用于評估單棵樹的性能進而評估整個森林的性能無需單獨劃分驗證集。實戰技巧隨機森林有兩個核心參數n_estimators樹的數量和max_features節點劃分時考慮的最大特征數。n_estimators越大越好但計算成本也越高通常增加到模型性能不再顯著提升即可。max_features是控制隨機性的關鍵默認值sqrt(n_features)對于分類問題通常是個好起點。隨機森林還能輸出特征重要性這是模型可解釋性的一個寶貴副產品可以幫助我們進行特征篩選。5. 超越準確率分類模型的評估與選擇陷阱模型建好了在訓練集上準確率高達98%是不是就大功告成了遠非如此。在分類任務中尤其是類別不平衡或錯誤代價不對稱的場景下準確率是一個極具誤導性的指標。5.1 混淆矩陣與更豐富的評估指標假設我們有一個二分類問題正類P負類N模型預測結果與真實情況對比會形成如下混淆矩陣真實情況 \ 預測結果預測為正類預測為負類實際為正類真正例假負例實際為負類假正例真負例從這個矩陣中我們可以衍生出多個關鍵指標準確率(TPTN) / (TPTNFPFN)。所有樣本中被正確分類的比例。在類別嚴重不平衡時如99%負例1%正例一個將所有樣本都預測為負類的“笨”模型準確率也能達到99%但這毫無意義。精確率TP / (TPFP)。所有被預測為正類的樣本中真正是正類的比例。它關注的是預測的“準不準”。在垃圾郵件過濾中我們非常關心精確率因為把正常郵件誤判為垃圾郵件FP的代價很高。召回率TP / (TPFN)。所有真實的正類樣本中被模型成功找出來的比例。它關注的是找的“全不全”。在疾病篩查中我們非常關心召回率因為漏診FN的代價很高。F1分數2 * Precision * Recall / (Precision Recall)。精確率和召回率的調和平均數。當精確率和召回率都重要且需要找一個平衡點時F1分數是一個綜合指標。避坑指南永遠不要只看準確率拿到數據后第一件事就是看類別分布。如果存在不平衡評估模型時必須結合混淆矩陣看精確率、召回率和F1分數。例如在金融風控中預測交易是否欺詐欺詐樣本極少正例我們可能更看重召回率盡可能抓住所有欺詐同時也要保證精確率不能太低否則人工審核成本太高此時F1分數或PR曲線下的面積就是更好的評估標準。5.2 ROC曲線與AUC衡量模型排序能力ROC曲線和AUC是評估二分類模型性能的另一個強大工具它不依賴于單一的分類閾值。ROC曲線的橫軸是假正例率FPR FP / (FPTN)即所有負例中被錯判為正例的比例??v軸是真正例率即召回率TPR TP / (TPFN)。分類模型通常輸出一個屬于正類的概率值如邏輯回歸的P(Y1|X)。我們需要設定一個閾值比如0.5大于閾值的判為正類否則為負類。每設定一個不同的閾值就會得到一對(FPR, TPR)值在圖上形成一個點。讓閾值從1到0連續變化就得到了ROC曲線。曲線越靠近左上角(0,1)點越好表示在很低的FPR下就能獲得很高的TPR。對角線yx代表隨機猜測模型的性能。AUC是ROC曲線下的面積取值范圍[0.5, 1]。AUC可以解釋為隨機選取一個正樣本和一個負樣本模型對正樣本的輸出概率高于負樣本的概率。AUC衡量的是模型對樣本的排序能力而非絕對的分類能力。AUC對類別不平衡不敏感這是它的一大優點。5.3 模型選擇中的“沒有免費午餐”定理面對邏輯回歸、SVM、決策樹、隨機森林乃至神經網絡我們該如何選擇這里必須提及“沒有免費午餐”定理沒有任何一個模型在所有問題上都優于其他模型。模型的選擇高度依賴于數據特征、問題背景和計算資源。一個粗略的決策流程可以參考數據量與特征數據量小、特征少可以嘗試邏輯回歸、線性SVM、簡單決策樹。數據量大、特征多可以考慮帶正則化的邏輯回歸、非線性SVM需謹慎調參、隨機森林、梯度提升樹如XGBoost, LightGBM。問題性質需要模型可解釋性邏輯回歸看系數、決策樹看路徑是首選。追求極致預測性能且可解釋性要求不高可以嘗試集成方法或深度學習。計算資源與時間隨機森林訓練可以并行預測快但模型存儲大。SVM訓練慢尤其大數據但預測快。XGBoost訓練通常比隨機森林慢但模型性能往往更強。實戰策略永遠從簡單的模型開始如邏輯回歸。建立一個性能基線。然后再嘗試更復雜的模型如隨機森林看性能提升是否顯著。如果提升不大則可能簡單模型已經足夠復雜模型帶來的邊際效益很低且增加了過擬合風險和計算成本。在我參與過的一個用戶流失預測項目中我們先后嘗試了邏輯回歸、決策樹、隨機森林和XGBoost。邏輯回歸的AUC為0.78給出了哪些特征如最近登錄間隔、消費金額下降比例對流失有正向/負向影響業務方非常認可。隨機森林將AUC提升到了0.82XGBoost達到了0.83。但考慮到0.83相比0.78的提升所帶來的業務價值與模型復雜度、維護成本之間的權衡項目組最終選擇了邏輯回歸隨機森林特征重要性篩選的方案用隨機森林篩選出Top 20的重要特征再用這些特征訓練邏輯回歸。最終模型AUC為0.81既保證了可解釋性性能也比原始邏輯回歸有提升。這個案例說明模型選擇是技術、業務和資源的綜合決策。