文章目錄
- 一、 AdaBoost:自適應提升算法
- 1、AdaBoost數學原理詳解
- 1.1、 目標函數
- 1.2、 樣本權重更新的邏輯
- 1.3、 模型權重計算的含義
- 1.4、 AdaBoost的核心思想
- 2、為什么AdaBoost如此有效?
- 二、 隨機梯度提升算法:梯度優化下更精細的優化
- 1、隨機梯度提升算法:殘差驅動的梯度優化
- 1.1、核心目標函數
- 1.2、殘差驅動的訓練過程
- 殘差的本質:模型錯誤的量化
- 步驟1:計算負梯度(殘差)
- 步驟2:模型對殘差進行優化
- 步驟3:更新預測
- 1.3、為什么用殘差而不是直接預測?
- 避免重復學習
- 逐步精細化
- 1.4、隨機性的雙重作用
- 樣本隨機性
- 特征隨機性
- 1.5、隨機梯度提升的核心思想
- 2、為什么隨機梯度提升如此強大?
- 三、 提升算法與裝袋算法的對比
- 1、訓練方式的差異
- 2、數學原理的差異
提升算法是集成學習中的另一重要分支,與裝袋算法不同,提升算法通過順序訓練和權重調整,實現了與裝袋算法不同的集成策略。AdaBoost通過自適應權重調整關注難分類樣本,隨機梯度提升通過梯度優化實現精確的損失函數最小化。
一、 AdaBoost:自適應提升算法
AdaBoost的核心思想是:通過調整樣本權重,讓后續模型專注于之前模型預測錯誤的樣本。這種方法確保了每個基模型都能為集成貢獻獨特的價值。
1、AdaBoost數學原理詳解
1.1、 目標函數
F(x)=∑t=1Tαtht(x)F(x) = \sum_{t=1}^{T} \alpha_t h_t(x)F(x)=t=1∑T?αt?ht?(x)
這個公式表示:最終的預測是所有基模型預測的加權和
具體解釋:
- F(x)F(x)F(x) 是最終的集成預測
- ht(x)h_t(x)ht?(x) 是第 ttt 個基模型(比如決策樹)的預測
- αt\alpha_tαt? 是第 ttt 個模型的權重(重要性)
- TTT 是基模型的總數量
舉個例子:
假設有3個基模型,預測結果分別是:
- 模型1:h1(x)=1h_1(x) = 1h1?(x)=1,權重 α1=0.5\alpha_1 = 0.5α1?=0.5
- 模型2:h2(x)=?1h_2(x) = -1h2?(x)=?1,權重 α2=0.3\alpha_2 = 0.3α2?=0.3
- 模型3:h3(x)=1h_3(x) = 1h3?(x)=1,權重 α3=0.2\alpha_3 = 0.2α3?=0.2
那么最終預測為:
F(x)=0.5×1+0.3×(?1)+0.2×1=0.4F(x) = 0.5 \times 1 + 0.3 \times (-1) + 0.2 \times 1 = 0.4F(x)=0.5×1+0.3×(?1)+0.2×1=0.4
?
1.2、 樣本權重更新的邏輯
Dt+1(i)=Dt(i)exp?(?αtyiht(xi))ZtD_{t+1}(i) = \frac{D_t(i) \exp(-\alpha_t y_i h_t(x_i))}{Z_t}Dt+1?(i)=Zt?Dt?(i)exp(?αt?yi?ht?(xi?))?
這個公式表示:根據當前模型的預測結果調整樣本權重
具體解釋:
- Dt(i)D_t(i)Dt?(i) 是第 ttt 輪第 iii 個樣本的權重
- yiy_iyi? 是第 iii 個樣本的真實標簽(1或-1)
- ht(xi)h_t(x_i)ht?(xi?) 是第 ttt 個模型對第 iii 個樣本的預測
- αt\alpha_tαt? 是第 ttt 個模型的權重
- ZtZ_tZt? 是歸一化因子,確保權重和為1
關鍵理解:
- 如果 yiht(xi)=1y_i h_t(x_i) = 1yi?ht?(xi?)=1(預測正確),則 exp?(?αt)<1\exp(-\alpha_t) < 1exp(?αt?)<1,權重減小
- 如果 yiht(xi)=?1y_i h_t(x_i) = -1yi?ht?(xi?)=?1(預測錯誤),則 exp?(αt)>1\exp(\alpha_t) > 1exp(αt?)>1,權重增大
舉個例子:
假設第1個模型權重 α1=0.5\alpha_1 = 0.5α1?=0.5,對某個樣本的預測:
- 如果預測正確:yih1(xi)=1y_i h_1(x_i) = 1yi?h1?(xi?)=1,權重變為原來的 exp?(?0.5)≈0.61\exp(-0.5) \approx 0.61exp(?0.5)≈0.61 倍
- 如果預測錯誤:yih1(xi)=?1y_i h_1(x_i) = -1yi?h1?(xi?)=?1,權重變為原來的 exp?(0.5)≈1.65\exp(0.5) \approx 1.65exp(0.5)≈1.65 倍
?
1.3、 模型權重計算的含義
αt=12ln?(1??t?t)\alpha_t = \frac{1}{2} \ln(\frac{1 - \epsilon_t}{\epsilon_t})αt?=21?ln(?t?1??t??)
這個公式表示:根據模型的錯誤率計算其權重
具體解釋:
- ?t\epsilon_t?t? 是第 ttt 個模型的加權錯誤率
- αt\alpha_tαt? 是第 ttt 個模型的權重
關鍵理解:
- 錯誤率越低,權重越大
- 錯誤率越高,權重越小
- 當錯誤率 = 0.5時,權重 = 0(沒有貢獻)
舉個例子:
- 如果錯誤率 ?t=0.1\epsilon_t = 0.1?t?=0.1(很好),則 αt=12ln?(0.90.1)=1.1\alpha_t = \frac{1}{2} \ln(\frac{0.9}{0.1}) = 1.1αt?=21?ln(0.10.9?)=1.1(高權重)
- 如果錯誤率 ?t=0.4\epsilon_t = 0.4?t?=0.4(一般),則 αt=12ln?(0.60.4)=0.2\alpha_t = \frac{1}{2} \ln(\frac{0.6}{0.4}) = 0.2αt?=21?ln(0.40.6?)=0.2(中等權重)
- 如果錯誤率 ?t=0.5\epsilon_t = 0.5?t?=0.5(隨機),則 αt=0\alpha_t = 0αt?=0(無貢獻)
?
1.4、 AdaBoost的核心思想
設計思路
- 樣本權重更新:讓后續模型更關注之前預測錯誤的樣本
- 模型權重計算:讓表現好的模型在最終預測中有更大話語權
- 順序訓練:每個新模型都試圖糾正之前模型的錯誤
整體流程:
- 訓練第1個模型,計算錯誤率和權重
- 根據預測結果調整樣本權重(錯誤樣本權重增大)
- 訓練第2個模型(更關注權重大的樣本)
- 重復這個過程,直到訓練完所有模型
- 最終預測是所有模型預測的加權和
這就是AdaBoost如何通過"讓每個模型專注于之前模型預測錯誤的樣本"來實現強大集成效果的原理。
?
2、為什么AdaBoost如此有效?
AdaBoost的有效性可以從多個角度理解。從統計學角度看,AdaBoost通過調整樣本權重,讓每個基模型專注于不同的數據子集,從而實現了比簡單平均更強的集成效果。
從機器學習角度看,AdaBoost的自適應特性使得它能夠自動識別和關注難分類的樣本,這種機制確保了模型在復雜數據上的強大表現。
?
二、 隨機梯度提升算法:梯度優化下更精細的優化
隨機梯度提升算法的核心思想是:通過梯度下降的方式順序訓練基模型,每個新模型都試圖糾正之前模型的殘差。這種方法實現了比AdaBoost更精細的損失函數優化。
1、隨機梯度提升算法:殘差驅動的梯度優化
1.1、核心目標函數
隨機梯度提升算法的目標函數為:
F(x)=∑t=1Tft(x)F(x) = \sum_{t=1}^{T} f_t(x)F(x)=t=1∑T?ft?(x)
這個公式表示:最終的預測是所有基模型預測的簡單累加
具體解釋:
- F(x)F(x)F(x) 是最終的集成預測
- ft(x)f_t(x)ft?(x) 是第 ttt 個基模型(通常是決策樹)的預測
- TTT 是基模型的總數量
與AdaBoost的區別:
- AdaBoost:F(x)=∑t=1Tαtht(x)F(x) = \sum_{t=1}^{T} \alpha_t h_t(x)F(x)=∑t=1T?αt?ht?(x)(加權和)
- 隨機梯度提升:F(x)=∑t=1Tft(x)F(x) = \sum_{t=1}^{T} f_t(x)F(x)=∑t=1T?ft?(x)(簡單累加)
?
1.2、殘差驅動的訓練過程
殘差的本質:模型錯誤的量化
殘差就是當前模型預測與真實值之間的差距,它量化了模型預測錯誤的程度。
數學定義:
殘差=真實值?當前預測值殘差 = 真實值 - 當前預測值殘差=真實值?當前預測值
步驟1:計算負梯度(殘差)
rti=??L(yi,Ft?1(xi))?Ft?1(xi)r_{ti} = -\frac{\partial L(y_i, F_{t-1}(x_i))}{\partial F_{t-1}(x_i)}rti?=??Ft?1?(xi?)?L(yi?,Ft?1?(xi?))?
這個公式表示:計算當前模型預測與真實值之間的"殘差"
具體解釋:
- L(yi,Ft?1(xi))L(y_i, F_{t-1}(x_i))L(yi?,Ft?1?(xi?)) 是損失函數(如均方誤差)
- ?L?Ft?1(xi)\frac{\partial L}{\partial F_{t-1}(x_i)}?Ft?1?(xi?)?L? 是損失函數對預測的導數
- 負號表示我們要沿著梯度的反方向優化
對于均方誤差損失:
L(y,F)=(y?F)2L(y, F) = (y - F)^2L(y,F)=(y?F)2
?L?F=2(F?y)\frac{\partial L}{\partial F} = 2(F - y)?F?L?=2(F?y)
??L?F=2(y?F)=2×殘差-\frac{\partial L}{\partial F} = 2(y - F) = 2 \times 殘差??F?L?=2(y?F)=2×殘差
所以負梯度就是殘差的倍數!
舉個例子:
假設真實值 yi=5y_i = 5yi?=5,當前預測 Ft?1(xi)=3F_{t-1}(x_i) = 3Ft?1?(xi?)=3
- 殘差:5?3=25 - 3 = 25?3=2
- 負梯度:rti=2×2=4r_{ti} = 2 \times 2 = 4rti?=2×2=4
這意味著我們需要增加預測值來減少損失。
?
步驟2:模型對殘差進行優化
訓練基模型 ft(x)f_t(x)ft?(x) 來擬合殘差 rtir_{ti}rti?
核心思想:每個新模型的任務就是預測之前模型的殘差
這就像接力賽跑:
- 第1個選手跑了80米(模型1的預測)
- 還剩下20米(殘差)
- 第2個選手的任務就是跑這剩下的20米(預測殘差)
具體例子:
假設我們要預測房價,真實房價是100萬:
第1輪訓練:
- 真實值:y=100y = 100y=100萬
- 模型1預測:F1(x)=80F_1(x) = 80F1?(x)=80萬
- 殘差:r1=100?80=20r_1 = 100 - 80 = 20r1?=100?80=20萬
第2輪訓練:
- 新目標:預測殘差20萬
- 模型2預測:f2(x)=15f_2(x) = 15f2?(x)=15萬
- 更新預測:F2(x)=80+15=95F_2(x) = 80 + 15 = 95F2?(x)=80+15=95萬
- 新殘差:r2=100?95=5r_2 = 100 - 95 = 5r2?=100?95=5萬
第3輪訓練:
- 新目標:預測殘差5萬
- 模型3預測:f3(x)=4f_3(x) = 4f3?(x)=4萬
- 更新預測:F3(x)=95+4=99F_3(x) = 95 + 4 = 99F3?(x)=95+4=99萬
- 新殘差:r3=100?99=1r_3 = 100 - 99 = 1r3?=100?99=1萬
步驟3:更新預測
Ft(x)=Ft?1(x)+ηft(x)F_t(x) = F_{t-1}(x) + \eta f_t(x)Ft?(x)=Ft?1?(x)+ηft?(x)
這個公式表示:將新模型的預測加到之前的預測上
具體解釋:
- Ft?1(x)F_{t-1}(x)Ft?1?(x) 是之前所有模型的累積預測
- ft(x)f_t(x)ft?(x) 是第 ttt 個新模型的預測
- η\etaη 是學習率,控制新模型的貢獻大小
學習率的作用:
- η=1\eta = 1η=1:新模型完全貢獻其預測
- η=0.1\eta = 0.1η=0.1:新模型只貢獻10%的預測
- 較小的學習率通常能獲得更好的泛化性能
?
1.3、為什么用殘差而不是直接預測?
避免重復學習
如果每個模型都直接預測原始目標,它們可能會學習到相似的模式,導致冗余。
用殘差的優勢:
- 模型1學習:房價的基本模式
- 模型2學習:模型1遺漏的模式
- 模型3學習:模型1和2都遺漏的模式
?
逐步精細化
殘差通常比原始目標更容易預測,因為:
- 殘差的數值范圍更小
- 殘差的模式更簡單
- 每個新模型只需要關注"遺漏"的部分
?
1.4、隨機性的雙重作用
樣本隨機性
每個基模型使用隨機采樣的數據子集進行訓練。
具體實現:
- 從原始訓練集中隨機選擇一部分樣本
- 通常選擇80%的樣本
- 每個基模型使用不同的隨機樣本子集
作用:
- 增加基模型間的差異性
- 防止過擬合、提高模型的泛化能力
?
特征隨機性
每個基模型使用隨機選擇的特征子集。
具體實現:
- 從所有特征中隨機選擇一部分特征
- 通常選擇 p\sqrt{p}p? 個特征(ppp 是特征總數)
- 每個基模型使用不同的隨機特征子集
作用:
- 進一步增加基模型間的差異性
- 處理高維數據
- 提高模型的魯棒性
?
1.5、隨機梯度提升的核心思想
為什么這樣設計?
- 殘差驅動:通過預測殘差,每個新模型都專注于不同的錯誤模式
- 梯度優化:通過梯度信息指導模型訓練,比AdaBoost的權重調整更精確
- 隨機性:通過隨機采樣確保基模型間的差異性
- 學習率控制:通過較小的學習率防止過擬合
整體流程:
- 初始化模型 F0(x)=0F_0(x) = 0F0?(x)=0
- 對于每一輪 t=1,2,...,Tt = 1, 2, ..., Tt=1,2,...,T:
- 計算殘差(負梯度)
- 訓練新模型擬合殘差
- 更新累積預測
- 最終預測是所有模型預測的累加
?
2、為什么隨機梯度提升如此強大?
隨機梯度提升的強大之處在于它結合了梯度優化的精確性和隨機性的多樣性。從優化角度看,隨機梯度提升通過梯度下降實現了對損失函數的精確優化,這比AdaBoost的權重調整更加精細。
從集成角度看,隨機梯度提升的隨機性確保了基模型間的差異性,同時梯度優化確保了每個基模型都能為集成貢獻最大價值。
更重要的是,隨機梯度提升具有強大的泛化能力,通過控制學習率和基模型復雜度,可以有效防止過擬合。
?
三、 提升算法與裝袋算法的對比
1、訓練方式的差異
特性 | 裝袋算法 | 提升算法 |
---|---|---|
訓練方式 | 并行訓練 | 順序訓練 |
樣本權重 | 固定 | 動態調整 |
基模型獨立性 | 強 | 弱 |
過擬合風險 | 低 | 中等 |
2、數學原理的差異
裝袋算法:通過平均獨立訓練的模型減少方差
Var(f^bag(x))=σ2B+B?1Bρσ2Var(\hat{f}_{bag}(x)) = \frac{\sigma^2}{B} + \frac{B-1}{B} \rho \sigma^2Var(f^?bag?(x))=Bσ2?+BB?1?ρσ2
提升算法:通過順序優化減少偏差
F(x)=∑t=1Tαtht(x)或F(x)=∑t=1Tft(x)F(x) = \sum_{t=1}^{T} \alpha_t h_t(x) \quad \text{或} \quad F(x) = \sum_{t=1}^{T} f_t(x)F(x)=t=1∑T?αt?ht?(x)或F(x)=t=1∑T?ft?(x)
?