《統計學習方法(李航)》整合學習(內容有拓展)學習筆記
作者:jliang
1.自助法(Bootstrap)
1)自助法是一種有放回的抽樣方法。
核心思想是從原樣本集有放回抽取N個子集,訓練N個分類器,進行整合。
2)Bagging和Boosting都是Bootstraping思想的應用。
2. 袋裝法(Bagging)
1)特點:各個弱學習器之間沒有依賴關係,可以並行擬合。
2)隨機取樣和訓練集m有一樣多的樣本,每輪有放回抽樣中約有36.8%的資料沒有被採集到,這部分資料被稱為袋外資料OOB。
(1)OOB可作為驗證集來對泛華效能進行包外估計。
(2)基學習器為決策樹時,可用來輔助剪枝基學習器為神經網路時,可輔助早期停止以減少過擬合的風險。
3)Bagging對弱學習器沒有限制,但常用決策樹和神經網路
4)對分類問題,通常使用簡單投票法產生結果。對迴歸問題,通常使用簡單平均法產生結果。
5)隨機森林
(1)它是Bagging的進化版,增加了對特徵的取樣。每輪對特徵抽樣數nsub越小,則模型越健壯,此時訓練集的擬合程度會變差。(方差減少,偏倚增大)
(2)RF使用CART作為弱分類器
(3)RF優點
- 並行化
- 訓練後,可以給出各個特徵的重要性
- 模型方差小,泛華能力強
- 簡單易實現
- 對部分特徵缺失不敏感
(4)RF缺點:
- 噪音較大時,容易過擬合
- 取值劃分比較多時容易對RF產生更大影響,從而影響擬合的模型效果。
(5)RF推廣
- TRTE:一種非監督學習的資料轉化方法,將低維資料對映到高維空間
- IForest:一種異常點檢測方法
3. 提升(Boosting)
1)在分類問題中,它通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,提高分類的效能。
(1)思想:對於一個複雜的任務來說,將多個專家的判斷進行適當的綜合所得出的判斷。
(2)強可學習和弱可學習
- 強可學習:如果存在一個多項式的學習演算法能夠學習它,並且準確率很高
- 弱可學習:如果存在一個多項式的學習演算法能夠學習它,學習的正確率僅比隨機猜測略好
- 強可學習的充分必要條件是弱可學習
- 弱分類器通常容易學習很多
(3)提升發生是從弱學習演算法出發,反覆學習,得到一系列的弱分類器(基分類器),然後組合這些分類器,構成一個強分類器。
- 大多數提升方法都是改變訓練資料的概率分佈(訓練資料的權值分佈),針對不同的訓練資料分佈呼叫弱學習演算法學習一系列的弱分類器。
- 改變權重的方法:提高那些被前一輪弱分類器錯誤分類樣本的權值,降低那些被正確分類樣本的權重。
- 弱模型的組合方法:AdaBoost採用加權多數表決的方法。加大分類誤差率小的弱分類器的權值,使其起較大的作用;減小分類誤差率大的弱分類器的權值,使其起較小的作用。
2)AdaBoost演算法
(1)學習步驟
a. 初始化訓練資料權值分佈,所有訓練樣本擁有統一的權重w=1/N
b. 對於m=1,2,…,M,學習弱分類器
a)學習弱分類器
b)計算弱分類器在訓練資料集上的分類誤差率(加權誤差率,與樣本權重有關)
c) 計算的係數
隨的減少而增大,分類誤差率越小的基分類器在最終分類器中作用越大
d)更新訓練資料的權值分佈
d. 加權線性組合基分類器
(2)AdaBoost的訓練誤差是以指數速率下降的。
(3)AdaBoost具有適應性,能適應弱分類器各自的訓練誤差率,這也是它名稱(適應的提升)的由來。
(4)AdaBoost另一種解釋:AdaBoost是加法模型、損失函式為指數函式、學習演算法為前向分步演算法時的二分類學習方法。
(5)AdaBoost優點
- 精度高
- 可使用各種分類器
- 不用做特徵篩選
- 不易overfitting
(6)AdaBoost缺點
- 對離群點敏感
- 訓練時間長
3)前向分步演算法
(1)前向分步演算法可以求解複雜的優化問題,因為學習的是加法模型,如果能夠從前向後,每一步只學習一個基函式及其係數,逐步逼近優化目標函式minβm,γmi=1NLyi,m=1Mβmbxi;γm,那麼久可以簡化優化的複雜度。
(2)學習步驟
a. 初始化
b. 對m=1,2,…,M
a)極小化損失函式,得到引數
b)更新
c. 得到加法模型
(3)前向分步演算法將同時求解從m=1到M所有引數的優化問題簡化為逐次求解各個的優化問題。
4)前向分步演算法與AdaBoost
(1)AdaBoost演算法是前向分步演算法的特例。當分佈演算法學習的是加法模型,當基函式為基本分類器時,該加法模型等價於AdaBoost的最終分類器。
5)提升樹
(1)提升樹是以分類樹或迴歸樹為基本分類器的提升方法,提升樹被認為是統計學習中效能最好的學習方法之一。
- 提升方法實際採用加法模型(即基函式的線性組合)與前向分步演算法。以決策樹為基函式的提升方法為提升樹。
- 對分類問題決策樹是二叉分類樹,對迴歸問題決策樹是二叉迴歸樹。
(2)不同問題的提升樹演算法的區別在於損失函式不同
- 迴歸問題:平方誤差損失函式
- 分類問題:指數損失函式
- 一般決策問題:一般損失函式
(3)Adaboost基分類器為二分類樹時,AdaBoost為提升樹。
6)梯度提升
(1)提升樹利用加法模型與前向分步演算法實現,對於使用平方損失和指數損失函式的每一步優化很簡單,但對一般損失函式而言,往往每一步並不容易。梯度提升(gradient boosting)演算法利用最速下降法的近似方法,其關鍵是利用損失函式的負梯度在當前模型的值作為迴歸問題提升樹演算法的殘差的近似值。
(2)Gradient Boosting分類
- GBRT(Gradient Boost Regression Tree)/GBT/GTB:漸進梯度迴歸樹
- GBDT(Gradient Boost Decision Tree):漸進梯度決策樹
- MART(Multiple Additive Regression Tree):多決策迴歸樹
- TreeNet:決策樹網路
(3)GDBT常用損失函式
- 分類演算法
- 指數損失函式:
- 對數損失函式
- 二分類:
- 多分類:
- 迴歸演算法
- 均方差:
- 絕對損失:
- Huber損失:對於原理中心的異常點採用絕對值損失,而中心附近的點採用均方差。
- 分位數損失:,θ為分位數
對於Huber損失函式和分位數損失函式,主要用於健壯迴歸,減少異常點對損失函式的影響。
7)GBDT構建特徵,利用GBDT產生特徵的組合
(1)在CTR預估中,工業界一般採用邏輯迴歸對組合的新特徵進行處理
(2)構建特徵步驟
a. 使用GBDT產生多棵樹。上圖中產生兩棵樹,共5個葉子節點
b. 輸入樣本x分別落到兩棵樹的葉子節點上,樣本落到的葉子節點的值為1,否則為0
c. 輸出特徵為兩棵樹的葉子節點總數
如x落到第1顆數的第1個節點和第2顆數的第2個節點,則輸出特徵為[1, 0, 0, 0, 1]
8)Adaboost和GBDT的區別
(1)損失函式不一樣
- Adaboost的目標是找到一個可以使當前損失函式最小的弱分類器(具體的數學解就是偏導數等於0的解)
- GBDT本輪的目標是找到弱分類器ht(x)讓本來的損失函式最小,即使已有分類器+新分類器總損失最小。
(2)Adaboost利用前一輪迭代弱學習器的誤差率來更新訓練集的權重,這樣一輪一輪迭代下去。GBDT也是迭代,使用前向分步演算法,但弱學習器限定只能使用CART迴歸樹模型。同時迭代器思路和Adaboost也有所不同。
4. Stacking
1)整合步驟
(1)選擇基模型:Xgboost、lightgbm、RF、SVM、ANN、KNN、LR等能想到的模型都可以
(2)把訓練資料分成N份(一般為5份,如果計算複雜度太高,可以把N值適當設定小一點),把其中N-1份作訓練s_train_x, s_train_y,剩餘的一份作為測試集s_test,測試集test不變。
(3)以s_train訓練模型,訓練出的模型預測s_test得到s_pred,再預測test得到y_pred。
(4)訓練集再選擇另外一份作為小的測試集s_test_x,其他N-1份作為訓練集訓練模型。
(5)重複2、3、4步驟N次,得到N個s_pred和y_pred。N個s_pred作為新的train_x,原始train_y作為train_Y。此時到達一個新的特徵,多選幾個模型重新訓練即可到達多個特徵,這些新的特徵作為下一層模型的輸入特徵。
(6)第二層模型使用LR模型訓練。
2)注意事項
(1)stacking比較耗時,可以把N改小(4或3都可以)
(2)stacking充分利用不同演算法從不同的資料空間角度和資料結構角度對資料不同觀測,取長補短,優化模型。所以我們除了不同引數的相同模型外,更重要的是要儘可能多一些不同種類的基模型,也就是模型要跨越空間。
3)stacking一些改進:還可以對特徵進行一些變化,比如選部分特徵做stacking,或者對stacking的結果進行再一次stacking。但時間複雜度高,效果並不一定明顯。