計(jì)學(xué)習(xí)方法概論:從核心概念到實(shí)踐應(yīng)用的機(jī)器學(xué)習(xí)基石)
1. 從“概論”開始為什么統(tǒng)計(jì)學(xué)習(xí)是繞不開的基石如果你對(duì)機(jī)器學(xué)習(xí)、數(shù)據(jù)科學(xué)感興趣或者正在從事相關(guān)工作那么“統(tǒng)計(jì)學(xué)習(xí)方法”這個(gè)名字你一定不陌生。它可能是一本經(jīng)典教材也可能是一個(gè)龐大的知識(shí)體系。但很多時(shí)候我們?nèi)菀紫萑胍粋€(gè)誤區(qū)直接扎進(jìn)某個(gè)具體的算法比如支持向量機(jī)SVM或者隨機(jī)森林去研究它的代碼實(shí)現(xiàn)和調(diào)參技巧卻忽略了支撐這些算法的底層邏輯和統(tǒng)一框架。這就好比學(xué)武功只記招式不練內(nèi)功心法初期可能見效快但遇到新問題或者需要深入優(yōu)化時(shí)就會(huì)感到力不從心?!敖y(tǒng)計(jì)學(xué)習(xí)方法概論”要解決的正是這個(gè)“內(nèi)功心法”的問題。它不是一個(gè)具體的工具使用手冊(cè)而是一套關(guān)于“如何從數(shù)據(jù)中學(xué)習(xí)規(guī)律”的元方法論。無論你處理的是圖像、文本、用戶行為還是金融數(shù)據(jù)其核心問題都可以抽象為給定一組有限的觀測數(shù)據(jù)訓(xùn)練集我們希望構(gòu)建一個(gè)模型這個(gè)模型不僅能很好地?cái)M合已有的數(shù)據(jù)更重要的是能對(duì)未知的新數(shù)據(jù)做出準(zhǔn)確預(yù)測。統(tǒng)計(jì)學(xué)習(xí)就是為這個(gè)目標(biāo)提供一套嚴(yán)謹(jǐn)?shù)摹⒒诟怕式y(tǒng)計(jì)的理論框架和實(shí)現(xiàn)路徑。理解了這個(gè)概論你就拿到了解讀幾乎所有監(jiān)督學(xué)習(xí)算法的“萬能鑰匙”能看透不同算法表象下的共同本質(zhì)從而在模型選擇、評(píng)估和優(yōu)化時(shí)做出更明智的決策。2. 統(tǒng)計(jì)學(xué)習(xí)的核心思想與基本概念拆解2.1 統(tǒng)計(jì)學(xué)習(xí)的定義與核心要素統(tǒng)計(jì)學(xué)習(xí)簡而言之是基于數(shù)據(jù)構(gòu)建概率統(tǒng)計(jì)模型并運(yùn)用模型對(duì)數(shù)據(jù)進(jìn)行預(yù)測與分析的一門學(xué)科。它的所有活動(dòng)都圍繞以下幾個(gè)核心要素展開輸入空間與輸出空間輸入空間 $\mathcal{X}$ 是所有可能輸入的集合比如一張圖片的所有像素值組合輸出空間 $\mathcal{Y}$ 是所有可能輸出的集合比如圖片對(duì)應(yīng)的標(biāo)簽“貓”或“狗”。監(jiān)督學(xué)習(xí)的任務(wù)就是學(xué)習(xí)一個(gè)從 $\mathcal{X}$ 到 $\mathcal{Y}$ 的映射關(guān)系。假設(shè)空間這是我們?yōu)榻鉀Q問題所準(zhǔn)備的所有可能模型的集合。比如我們決定用所有可能的線性函數(shù) $y wx b$ 來擬合數(shù)據(jù)那么所有 $(w, b)$ 的組合就構(gòu)成了我們的假設(shè)空間。學(xué)習(xí)的過程就是從這龐大的假設(shè)空間中根據(jù)某種準(zhǔn)則挑選出“最好”的那個(gè)模型。策略損失函數(shù)與風(fēng)險(xiǎn)函數(shù)如何定義“最好”這就需要引入損失函數(shù)和風(fēng)險(xiǎn)函數(shù)。損失函數(shù) $L(Y, f(X))$它度量模型在一次預(yù)測中產(chǎn)生的誤差。例如對(duì)于回歸問題常用平方損失 $(Y - f(X))^2$對(duì)于分類問題常用0-1損失預(yù)測錯(cuò)誤為1正確為0。風(fēng)險(xiǎn)函數(shù)期望風(fēng)險(xiǎn) $R_{exp}(f)$這是損失函數(shù)的期望值即模型 $f(X)$ 在聯(lián)合分布 $P(X, Y)$ 下的平均損失。$R_{exp}(f) E_P[L(Y, f(X))]$。我們理想中的最優(yōu)模型就是那個(gè)能最小化期望風(fēng)險(xiǎn)的模型。算法有了評(píng)價(jià)標(biāo)準(zhǔn)最小化風(fēng)險(xiǎn)我們需要具體的計(jì)算方法來從假設(shè)空間中找出這個(gè)最優(yōu)模型。這就是優(yōu)化算法比如梯度下降、序列最小優(yōu)化SMO等。注意這里的關(guān)鍵矛盾在于我們永遠(yuǎn)無法知道真實(shí)的聯(lián)合分布 $P(X, Y)$因此無法直接計(jì)算期望風(fēng)險(xiǎn)。這是統(tǒng)計(jì)學(xué)習(xí)理論需要解決的根本問題。2.2 經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化與結(jié)構(gòu)風(fēng)險(xiǎn)最小化既然真實(shí)風(fēng)險(xiǎn)算不了我們?cè)撛趺崔k統(tǒng)計(jì)學(xué)習(xí)給出了兩種核心策略。2.2.1 經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化一個(gè)最直觀的想法是用我們手頭上有限的訓(xùn)練數(shù)據(jù)來近似估計(jì)風(fēng)險(xiǎn)。這就是經(jīng)驗(yàn)風(fēng)險(xiǎn)$R_{emp}(f) \frac{1}{N}\sum_{i1}^{N} L(y_i, f(x_i))$。經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化策略認(rèn)為使經(jīng)驗(yàn)風(fēng)險(xiǎn)最小的模型就是最優(yōu)模型。很多經(jīng)典算法都基于此比如在機(jī)器學(xué)習(xí)中最小二乘法就是讓平方損失的經(jīng)驗(yàn)風(fēng)險(xiǎn)最小。但這里埋著一個(gè)大坑過擬合。模型可能會(huì)為了完美擬合訓(xùn)練數(shù)據(jù)經(jīng)驗(yàn)風(fēng)險(xiǎn)為0而變得極其復(fù)雜從而喪失了泛化到新數(shù)據(jù)的能力。就像一個(gè)學(xué)生死記硬背了所有課后習(xí)題的答案但遇到?jīng)]見過的考題就束手無策。2.2.2 結(jié)構(gòu)風(fēng)險(xiǎn)最小化為了對(duì)抗過擬合我們需要在經(jīng)驗(yàn)風(fēng)險(xiǎn)的基礎(chǔ)上增加一個(gè)對(duì)模型復(fù)雜度的懲罰項(xiàng)。這就是結(jié)構(gòu)風(fēng)險(xiǎn)最小化$R_{srm}(f) R_{emp}(f) \lambda J(f)$。其中 $J(f)$ 代表模型的復(fù)雜度$\lambda$ 是權(quán)衡兩者重要性的系數(shù)。這個(gè)策略體現(xiàn)了機(jī)器學(xué)習(xí)中著名的“奧卡姆剃刀”原則在同樣能解釋數(shù)據(jù)的模型中選擇最簡單的那個(gè)。支持向量機(jī)SVM中的間隔最大化、決策樹剪枝、以及所有正則化方法L1/L2正則化其本質(zhì)都是結(jié)構(gòu)風(fēng)險(xiǎn)最小化的具體實(shí)現(xiàn)。通過引入正則化項(xiàng)我們約束了假設(shè)空間引導(dǎo)模型向著更簡單、泛化能力更強(qiáng)的方向?qū)W習(xí)。2.3 模型評(píng)估與模型選擇我們訓(xùn)練了模型如何知道它好不好這就涉及到評(píng)估與選擇。訓(xùn)練誤差與測試誤差訓(xùn)練誤差模型在訓(xùn)練集上的平均損失。它反映的是模型對(duì)已知數(shù)據(jù)的擬合程度。測試誤差模型在獨(dú)立的測試集上的平均損失。它才是衡量模型泛化能力的金標(biāo)準(zhǔn)。我們最終追求的是小的測試誤差。過擬合與欠擬合過擬合訓(xùn)練誤差很小但測試誤差很大。模型“學(xué)得太細(xì)”把噪聲也當(dāng)規(guī)律學(xué)了。欠擬合訓(xùn)練誤差和測試誤差都很大。模型“學(xué)得太糙”連數(shù)據(jù)的基本規(guī)律都沒抓住。模型選擇的方法核心思想是用測試誤差來估計(jì)模型的泛化能力。常用方法包括正則化如前所述在損失函數(shù)中加入懲罰項(xiàng)是結(jié)構(gòu)風(fēng)險(xiǎn)最小化的直接應(yīng)用。交叉驗(yàn)證將數(shù)據(jù)集分成訓(xùn)練集和驗(yàn)證集循環(huán)使用不同部分作為驗(yàn)證集來評(píng)估模型最后綜合評(píng)估結(jié)果。k折交叉驗(yàn)證是最常用的方法。信息準(zhǔn)則如AIC赤池信息準(zhǔn)則和BIC貝葉斯信息準(zhǔn)則它們?cè)谀P蛿M合優(yōu)度的基礎(chǔ)上加入了與模型參數(shù)個(gè)數(shù)相關(guān)的懲罰項(xiàng)用于在多個(gè)模型間進(jìn)行選擇。3. 監(jiān)督學(xué)習(xí)的三要素方法模型策略算法這是統(tǒng)計(jì)學(xué)習(xí)方法論中一個(gè)極其精煉且強(qiáng)大的總結(jié)。任何監(jiān)督學(xué)習(xí)方法都可以被分解為以下三個(gè)要素理解了這個(gè)框架學(xué)習(xí)新算法將事半功倍。3.1 模型我們要學(xué)習(xí)的是什么模型決定了假設(shè)空間的形式。在監(jiān)督學(xué)習(xí)中模型就是要學(xué)習(xí)的條件概率分布 $P(Y|X)$ 或決策函數(shù) $Yf(X)$。概率模型如樸素貝葉斯、邏輯回歸。它們直接對(duì) $P(Y|X)$ 進(jìn)行建模。其優(yōu)勢在于能自然地給出預(yù)測的不確定性屬于某個(gè)類的概率是多少。非概率模型如感知機(jī)、支持向量機(jī)、k近鄰。它們直接學(xué)習(xí)輸入到輸出的映射函數(shù) $f$。其優(yōu)勢往往是決策邊界清晰在某些問題上表現(xiàn)更優(yōu)。選擇概率模型還是非概率模型取決于問題本身和我們的需求。例如在需要概率輸出的廣告點(diǎn)擊率預(yù)測中邏輯回歸是天然的選擇而在追求最大分類間隔的圖像分類任務(wù)中SVM可能更合適。3.2 策略我們依據(jù)什么來學(xué)習(xí)策略定義了從假設(shè)空間中挑選最優(yōu)模型的準(zhǔn)則即損失函數(shù)和風(fēng)險(xiǎn)最小化的具體形式。損失函數(shù)的選擇0-1損失分類問題最直觀的損失但數(shù)學(xué)性質(zhì)不好不連續(xù)不可導(dǎo)難以直接優(yōu)化。對(duì)數(shù)損失邏輯回歸使用的損失它是對(duì)數(shù)似然函數(shù)的負(fù)值與極大似然估計(jì)等價(jià)。合頁損失支持向量機(jī)使用的損失它只關(guān)注那些被誤分類或間隔不夠大的樣本從而導(dǎo)出稀疏的解即支持向量。指數(shù)損失AdaBoost算法使用的損失。平方損失回歸問題最常用的損失對(duì)應(yīng)最小二乘估計(jì)。不同的損失函數(shù)會(huì)導(dǎo)向完全不同的模型性質(zhì)。例如平方損失對(duì)異常值敏感而絕對(duì)損失則更穩(wěn)健。風(fēng)險(xiǎn)最小化策略如前所述是選擇經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化ERM還是結(jié)構(gòu)風(fēng)險(xiǎn)最小化SRM。這直接決定了模型是否會(huì)傾向于過擬合。3.3 算法我們?nèi)绾尉唧w地學(xué)習(xí)算法是求解最優(yōu)模型的具體計(jì)算方法即最優(yōu)化問題的數(shù)值求解方法。閉式解對(duì)于某些簡單模型如線性回歸的最小二乘估計(jì)最優(yōu)解有解析表達(dá)式可以直接計(jì)算。迭代優(yōu)化對(duì)于大多數(shù)復(fù)雜模型我們需要迭代算法來逼近最優(yōu)解。梯度下降法最基礎(chǔ)的優(yōu)化算法沿著損失函數(shù)梯度的反方向更新參數(shù)。有批量梯度下降、隨機(jī)梯度下降和小批量梯度下降等變種。牛頓法與擬牛頓法利用二階導(dǎo)數(shù)信息收斂速度更快但計(jì)算海森矩陣或其逆矩陣開銷大。序列最小優(yōu)化專門為求解SVM對(duì)偶問題設(shè)計(jì)的高效算法。EM算法用于含有隱變量的概率模型參數(shù)估計(jì)如高斯混合模型。實(shí)操心得在實(shí)際工作中我們往往不需要從頭實(shí)現(xiàn)這些優(yōu)化算法成熟的庫如Scikit-learn、XGBoost已經(jīng)做得很好但理解其原理至關(guān)重要。例如知道隨機(jī)梯度下降能在線學(xué)習(xí)、對(duì)大數(shù)據(jù)友好而牛頓法在小數(shù)據(jù)集上收斂快但可能內(nèi)存爆炸這能幫助你在選擇求解器solver時(shí)做出正確決策。4. 模型評(píng)估的實(shí)戰(zhàn)從理論到代碼理解了理論我們來看看如何在實(shí)際中應(yīng)用。這里以最常用的分類問題為例展示完整的評(píng)估流程。4.1 數(shù)據(jù)集劃分的黃金法則永遠(yuǎn)不要用訓(xùn)練數(shù)據(jù)來評(píng)估模型必須將數(shù)據(jù)至少分為兩部分訓(xùn)練集用于模型訓(xùn)練調(diào)整參數(shù)。測試集用于最終評(píng)估模型性能模擬真實(shí)環(huán)境。測試集在訓(xùn)練過程中絕對(duì)不可見。常見的劃分比例是7:3或8:2。對(duì)于數(shù)據(jù)量小的情況交叉驗(yàn)證是更可靠的選擇。4.2 分類性能度量指標(biāo)詳解準(zhǔn)確率Accuracy是最直觀的但在類別不平衡時(shí)可能失真。我們需要更細(xì)致的指標(biāo)。混淆矩陣一切評(píng)估的基礎(chǔ)。真實(shí)情況 / 預(yù)測結(jié)果預(yù)測為正例預(yù)測為反例實(shí)際為正例True Positive (TP)False Negative (FN)實(shí)際為反例False Positive (FP)True Negative (TN)精確率$Precision \frac{TP}{TP FP}$。“查得準(zhǔn)不準(zhǔn)”。例如在垃圾郵件檢測中我們關(guān)心被判定為垃圾郵件的郵件里有多少真的是垃圾郵件。召回率$Recall \frac{TP}{TP FN}$?!安榈萌蝗?。例如在疾病篩查中我們關(guān)心所有真正的病人里有多少被我們檢測出來了。F1分?jǐn)?shù)$F1 \frac{2 \times Precision \times Recall}{Precision Recall}$。精確率和召回率的調(diào)和平均數(shù)是綜合考量兩者一個(gè)很好的指標(biāo)。ROC曲線與AUC通過不斷調(diào)整分類閾值計(jì)算真正例率和假正例率繪制出的曲線。曲線下的面積AUC衡量的是模型“排序”的能力即把正樣本排在負(fù)樣本前面的概率。AUC對(duì)類別不平衡不敏感是一個(gè)非常魯棒的指標(biāo)。4.3 實(shí)操示例使用Scikit-learn進(jìn)行模型評(píng)估import numpy as np from sklearn.model_selection import train_test_split, cross_val_score from sklearn.linear_model import LogisticRegression from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score from sklearn.datasets import load_breast_cancer # 1. 加載數(shù)據(jù) data load_breast_cancer() X, y data.data, data.target # 2. 劃分訓(xùn)練集和測試集 X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.3, random_state42) # 3. 訓(xùn)練模型這里以邏輯回歸為例 model LogisticRegression(max_iter10000, solverlbfgs) model.fit(X_train, y_train) # 4. 在測試集上評(píng)估 y_pred model.predict(X_test) y_pred_proba model.predict_proba(X_test)[:, 1] # 獲取正類的預(yù)測概率 print( 混淆矩陣 ) print(confusion_matrix(y_test, y_pred)) print(\n 分類報(bào)告 ) print(classification_report(y_test, y_pred)) print(f\n ROC-AUC 分?jǐn)?shù) ) print(fROC-AUC: {roc_auc_score(y_test, y_pred_proba):.4f}) # 5. 使用5折交叉驗(yàn)證評(píng)估模型穩(wěn)定性 cv_scores cross_val_score(model, X, y, cv5, scoringroc_auc) print(f\n 5折交叉驗(yàn)證 ROC-AUC 分?jǐn)?shù) ) print(f各折分?jǐn)?shù): {cv_scores}) print(f平均分?jǐn)?shù): {cv_scores.mean():.4f} (/- {cv_scores.std()*2:.4f}))這段代碼展示了一個(gè)標(biāo)準(zhǔn)的評(píng)估流程。classification_report會(huì)直接輸出精確率、召回率、F1分?jǐn)?shù)和支持度。交叉驗(yàn)證的結(jié)果能告訴我們模型的性能是否穩(wěn)定。5. 統(tǒng)計(jì)學(xué)習(xí)理論基石泛化能力與VC維為什么一個(gè)在訓(xùn)練集上表現(xiàn)好的模型就一定能推廣到新數(shù)據(jù)統(tǒng)計(jì)學(xué)習(xí)理論試圖從數(shù)學(xué)上回答這個(gè)根本問題其核心是泛化誤差界。5.1 泛化誤差的分解模型的泛化誤差可以分解為三個(gè)部分泛化誤差 偏差 方差 噪聲偏差模型預(yù)測值的期望與真實(shí)值之間的差異。高偏差意味著模型本身的學(xué)習(xí)能力不足無法捕捉數(shù)據(jù)的真實(shí)關(guān)系導(dǎo)致欠擬合。例如用線性模型去擬合非線性數(shù)據(jù)。方差模型預(yù)測值自身的波動(dòng)范圍。高方差意味著模型對(duì)訓(xùn)練數(shù)據(jù)中的隨機(jī)噪聲過于敏感導(dǎo)致過擬合。例如一棵深度很大且未剪枝的決策樹。噪聲數(shù)據(jù)本身固有的、不可約的誤差。偏差-方差權(quán)衡是機(jī)器學(xué)習(xí)中的一個(gè)基本困境降低偏差通常會(huì)增加方差反之亦然。我們的目標(biāo)是在兩者之間找到最佳平衡點(diǎn)。5.2 VC維度量模型復(fù)雜度的尺子為了定量地研究泛化能力需要一種度量假設(shè)空間復(fù)雜度的工具。VC維就是這樣一個(gè)工具。直觀上VC維描述了模型能夠“打散”的最大樣本數(shù)。所謂“打散”是指對(duì)于給定數(shù)量的樣本模型總能找到一種參數(shù)設(shè)置使得對(duì)這些樣本的所有可能標(biāo)記方式都能實(shí)現(xiàn)完美分類。例子在二維平面上線性分類器的VC維是3。因?yàn)閷?duì)于任意3個(gè)不共線的點(diǎn)總能用一條直線實(shí)現(xiàn)所有8種$2^3$標(biāo)記方式。但對(duì)于4個(gè)點(diǎn)如呈X形分布就無法用一條直線實(shí)現(xiàn)所有16種標(biāo)記了。意義VC維越大說明模型的擬合能力越強(qiáng)假設(shè)空間越復(fù)雜但同時(shí)也意味著需要更多的數(shù)據(jù)來約束它否則泛化誤差的上界會(huì)更大。統(tǒng)計(jì)學(xué)習(xí)理論中一個(gè)關(guān)鍵的結(jié)論是泛化誤差界與 $\sqrt{\frac{VC維}{樣本數(shù)}}$ 相關(guān)。注意事項(xiàng)VC維是一個(gè)理論工具對(duì)于像神經(jīng)網(wǎng)絡(luò)這樣的復(fù)雜模型其VC維很難精確計(jì)算且理論界通常非常寬松對(duì)實(shí)際指導(dǎo)意義有限。但它提供了一種重要的思維方式模型復(fù)雜度需要與數(shù)據(jù)量相匹配。5.3 正則化如何影響偏差和方差理解了偏差-方差分解就能看清正則化的本質(zhì)增加正則化強(qiáng)度如增大L2正則化的 $\lambda$會(huì)增大偏差因?yàn)槟P蛥?shù)被約束擬合能力下降但降低方差因?yàn)槟P蛯?duì)數(shù)據(jù)噪聲的敏感性降低。這常用于對(duì)抗過擬合。減小正則化強(qiáng)度會(huì)降低偏差但增大方差。在實(shí)際調(diào)參時(shí)我們就是通過觀察模型在驗(yàn)證集上的表現(xiàn)它綜合反映了偏差和方差來調(diào)整正則化參數(shù)尋找那個(gè)使泛化誤差最小的“甜蜜點(diǎn)”。6. 生成模型與判別模型兩種根本不同的哲學(xué)這是統(tǒng)計(jì)學(xué)習(xí)方法中一個(gè)至關(guān)重要的分類決定了我們建模的出發(fā)點(diǎn)。6.1 生成模型核心思想先對(duì)聯(lián)合概率分布 $P(X, Y)$ 進(jìn)行建模然后再通過貝葉斯定理求得條件概率 $P(Y|X)$ 進(jìn)行預(yù)測。建模對(duì)象$P(X, Y)$。預(yù)測公式$P(Y|X) \frac{P(X, Y)}{P(X)} \frac{P(Y)P(X|Y)}{\sum_Y P(Y)P(X|Y)}$。典型算法樸素貝葉斯、隱馬爾可夫模型、高斯混合模型。優(yōu)點(diǎn)可以還原出聯(lián)合分布因此能用于生成數(shù)據(jù)如AI繪畫、文本生成。能處理存在隱變量或數(shù)據(jù)缺失的情況。當(dāng)數(shù)據(jù)量增多時(shí)其收斂速度通??煊谂袆e模型。缺點(diǎn)需要更多的數(shù)據(jù)和假設(shè)。例如樸素貝葉斯假設(shè)特征條件獨(dú)立這個(gè)假設(shè)在現(xiàn)實(shí)中往往不成立。當(dāng)關(guān)注點(diǎn)僅僅是分類邊界時(shí)學(xué)習(xí)聯(lián)合分布可能做了許多“無用功”。6.2 判別模型核心思想直接對(duì)決策邊界或條件概率 $P(Y|X)$ 進(jìn)行建模。建模對(duì)象$P(Y|X)$ 或決策函數(shù) $Yf(X)$。預(yù)測公式直接輸出 $P(Y|X)$ 或類別標(biāo)簽。典型算法感知機(jī)、邏輯回歸、支持向量機(jī)、決策樹、神經(jīng)網(wǎng)絡(luò)。優(yōu)點(diǎn)直接面向預(yù)測任務(wù)通常學(xué)習(xí)效率更高分類性能更好。不需要對(duì)數(shù)據(jù)的生成機(jī)制做過多假設(shè)更靈活。缺點(diǎn)無法得到數(shù)據(jù)的聯(lián)合分布不能用于生成任務(wù)。對(duì)異常值可能更敏感。6.3 如何選擇如果你的目標(biāo)是獲得最高的分類準(zhǔn)確率通常判別模型是首選。如果你需要生成新樣本、處理不完整數(shù)據(jù)或者對(duì)數(shù)據(jù)的生成過程有先驗(yàn)知識(shí)生成模型可能更合適。在數(shù)據(jù)量非常少的情況下生成模型因?yàn)橐肓讼闰?yàn)分布如樸素貝葉斯中的類別先驗(yàn)和條件概率有時(shí)會(huì)比判別模型表現(xiàn)更好。我個(gè)人在實(shí)際項(xiàng)目中有一個(gè)體會(huì)對(duì)于文本分類任務(wù)如果特征工程做得好邏輯回歸判別模型的性能常常優(yōu)于樸素貝葉斯生成模型。但樸素貝葉斯的訓(xùn)練和預(yù)測速度極快且對(duì)缺失數(shù)據(jù)不敏感在需要快速原型驗(yàn)證或處理流式數(shù)據(jù)時(shí)它仍然是一個(gè)非常有競爭力的基線模型。7. 常見問題與排查技巧實(shí)錄在實(shí)際應(yīng)用統(tǒng)計(jì)學(xué)習(xí)方法時(shí)會(huì)遇到各種各樣的問題。這里記錄一些典型場景和解決思路。7.1 模型表現(xiàn)不佳的診斷流程當(dāng)模型在測試集上表現(xiàn)不好時(shí)不要盲目調(diào)參遵循一個(gè)系統(tǒng)的診斷流程第一步檢查欠擬合還是過擬合現(xiàn)象訓(xùn)練誤差和測試誤差都高 -欠擬合。可能原因與對(duì)策模型太簡單如用線性模型擬合非線性關(guān)系嘗試更復(fù)雜的模型如多項(xiàng)式回歸、樹模型、神經(jīng)網(wǎng)絡(luò)。特征不足或無效進(jìn)行特征工程挖掘更有信息量的特征。正則化過強(qiáng)減小正則化系數(shù)如 $\lambda$?,F(xiàn)象訓(xùn)練誤差很低測試誤差很高 -過擬合??赡茉蚺c對(duì)策模型太復(fù)雜選擇更簡單的模型或?qū)Ξ?dāng)前模型增加正則化增大 $\lambda$對(duì)樹模型進(jìn)行剪枝。訓(xùn)練數(shù)據(jù)太少收集更多數(shù)據(jù)或使用數(shù)據(jù)增強(qiáng)技術(shù)。訓(xùn)練時(shí)間過長針對(duì)迭代算法如神經(jīng)網(wǎng)絡(luò)使用早停法。第二步檢查數(shù)據(jù)質(zhì)量數(shù)據(jù)泄露確保測試集的信息沒有以任何形式“污染”訓(xùn)練過程。這是最隱蔽也最致命的錯(cuò)誤之一。標(biāo)簽噪聲檢查訓(xùn)練數(shù)據(jù)中是否有大量錯(cuò)誤標(biāo)簽??梢允褂媒徊骝?yàn)證觀察不同數(shù)據(jù)子集上模型性能的穩(wěn)定性波動(dòng)過大可能暗示數(shù)據(jù)問題。特征尺度對(duì)于基于距離的模型如SVM、KNN或使用梯度下降的模型務(wù)必進(jìn)行特征標(biāo)準(zhǔn)化/歸一化。第三步檢查評(píng)估方式確保使用了獨(dú)立的測試集或可靠的交叉驗(yàn)證。對(duì)于類別不平衡數(shù)據(jù)確認(rèn)使用的評(píng)估指標(biāo)是否合適如用AUC、F1代替準(zhǔn)確率。7.2 超參數(shù)調(diào)優(yōu)的實(shí)戰(zhàn)技巧超參數(shù)如正則化系數(shù)C、樹的深度max_depth不是從數(shù)據(jù)中學(xué)到的需要人工設(shè)定。調(diào)優(yōu)是關(guān)鍵步驟。網(wǎng)格搜索在指定的參數(shù)網(wǎng)格中窮舉所有組合。簡單粗暴但計(jì)算成本高。隨機(jī)搜索從指定的參數(shù)分布中隨機(jī)采樣。研究表明在相同計(jì)算成本下隨機(jī)搜索往往比網(wǎng)格搜索效率更高因?yàn)樗芴剿鞯礁鼜V闊的空間。貝葉斯優(yōu)化利用之前評(píng)估過的參數(shù)組合結(jié)果構(gòu)建一個(gè)代理模型如高斯過程來預(yù)測未知參數(shù)點(diǎn)的性能從而智能地選擇下一個(gè)待評(píng)估點(diǎn)。這是目前最先進(jìn)高效的調(diào)參方法之一有Optuna、Hyperopt等庫支持。實(shí)操心得不要一上來就做精細(xì)調(diào)參。首先用一個(gè)寬泛的搜索范圍如C: [0.001, 0.01, 0.1, 1, 10, 100]進(jìn)行快速掃描鎖定性能較好的區(qū)域再在該區(qū)域進(jìn)行更密集的搜索。同時(shí)一定要使用交叉驗(yàn)證分?jǐn)?shù)而不是單次劃分的驗(yàn)證分?jǐn)?shù)來評(píng)估參數(shù)以避免偶然性。7.3 特征工程與模型選擇的聯(lián)動(dòng)特征和模型不是孤立的。不同的模型對(duì)特征有不同的偏好。線性模型對(duì)特征尺度和多重共線性敏感。需要標(biāo)準(zhǔn)化且對(duì)于高度相關(guān)的特征正則化如Lasso可以幫助進(jìn)行特征選擇。樹模型對(duì)特征尺度不敏感能處理非線性關(guān)系甚至可以處理缺失值。但獨(dú)熱編碼后的高維稀疏特征可能會(huì)降低樹模型的效率。SVM對(duì)特征尺度極其敏感必須標(biāo)準(zhǔn)化。核函數(shù)的選擇線性、多項(xiàng)式、RBF本質(zhì)上也是一種特征映射。一個(gè)常見的誤區(qū)是花大量時(shí)間做復(fù)雜的特征工程然后用一個(gè)簡單的模型如邏輯回歸去擬合。有時(shí)換一個(gè)更強(qiáng)大的模型如梯度提升樹即使使用原始特征或簡單處理后的特征也能取得更好的效果。我的經(jīng)驗(yàn)是先用一個(gè)復(fù)雜的、表達(dá)能力強(qiáng)的模型如隨機(jī)森林或XGBoost作為基線看它能達(dá)到什么性能。這代表了當(dāng)前特征下的“性能天花板”。如果天花板本身就不高那么重點(diǎn)應(yīng)放在特征工程和數(shù)據(jù)本身上如果天花板很高但簡單模型達(dá)不到那么重點(diǎn)應(yīng)放在模型選擇和調(diào)優(yōu)上。統(tǒng)計(jì)學(xué)習(xí)方法概論提供的正是這樣一套系統(tǒng)性的思維框架。它不教你某個(gè)庫的某個(gè)函數(shù)怎么調(diào)用而是教你面對(duì)一個(gè)數(shù)據(jù)問題時(shí)應(yīng)該如何思考該定義什么樣的模型空間依據(jù)什么標(biāo)準(zhǔn)來選擇模型如何評(píng)估和比較不同的模型這套“心法”的價(jià)值遠(yuǎn)超過任何一個(gè)孤立的“招式”。當(dāng)你真正理解了偏差與方差的權(quán)衡、生成與判別的區(qū)別、經(jīng)驗(yàn)風(fēng)險(xiǎn)與結(jié)構(gòu)風(fēng)險(xiǎn)的內(nèi)涵你就能在紛繁復(fù)雜的算法和工具面前保持清醒做出最合理的技術(shù)選型與決策。