机器学习面试——XGBoost,GBDT,RF(上)
1、常見的集成思想
bagging:基學習器之間并行訓練,且學習器之間沒有依賴,像是集體決策的過程,每個個體都進行單獨學習,再通過投票的方式做最后的集體決策。常見的算法有隨機森林
boosting:基學習器之間串行訓練,且學習器之間存在依賴,將基學習器層層疊加,每一層在訓練的時候,對前一層基學習器分錯的樣本給予更高的權重。類似于人類的學習過程,對于錯誤,進行加強學習,直到犯錯誤的次數減少到很低的程度。常見的算法有AdaBoost、GBDT、XGBoost。
Stacking:首先使用原始數據訓練出一級學習器,將一級學習器的輸出作為輸入并使用對應原始標記作為新標記,組成新的數據集來訓練二級學習器(結合學習器)。常用于模型融合。
2、從偏差和方差的角度解釋Bagging和Boosting
偏差是由于分類器的表達能力有限導致的系統性錯誤;
方差是由于分類器對于樣本分布過于敏感,導致在訓練樣本數較少時,產生過擬合;
bagging是采用分而治之策略,通過對訓練樣本進行多次采樣,并分別訓練出不同模型,然后做綜合,減小集成分類器之間的方差。
boosting是通過逐步聚焦于基學習器分錯的樣本,減小集成分類器的偏差。
2、隨機森林的隨機性?
數據集:有放回隨機取樣
特征:隨機選取特征,進行分割點計算
3、Adboost、提升樹(boosting tree),梯度提升樹的異同?
相同:
- 加法模型:模型是基學習器進行累加,得到一個最終的加法模型。
- 前向分步算法:從前向后,每一步只學習一個基函數及其系數,逐步逼近優化目標函數,簡化優化的復雜度。
區別:
Adaboost的實現步驟:
(1)初始化權重分布,假設模型有均勻的權值分布。
(2)對數據進行學習,計算Gm(分類器)在訓練數據集上的分類誤差率,
(3)計算Gm(分類器)系數,系數代表在最終分類器上的重要性。
(4)更新權重(m步的權重分布),
(5)對基學習器進行累加,組成線性組合,得到最終的分類器:
注釋:I(x)是指示函數,sign(x)是符號函數。
,
提升樹(Boosting Tree)的實現步驟:
提升方法實際采用加法模型和前向分布算法,以決策樹為基函數的提升方法稱為提升樹,對分類問題決策樹是二叉分類樹,損失函數時指數損失,對于回歸問題決策樹是二叉回歸樹,損失函數是均方損失。
分析:
其中,r是當前模型擬合數據的殘差。
梯度提升樹(Gradient boosting DT):
將當前模型損失函數的負梯度作為殘差的近似替換值。
4、RF和GBDT的區別
相同點:都用了集成思想
不同點:
- RF是bagging思想,減小了方差,GBDT是boosting思想,減小了偏差
- RF是串行,GBDT是并行
- RF是分類和回歸樹,GBDT只能回歸樹
- RF是采用投票進行最終決策,GBDT是多棵樹累加決策
- RF對異常值不敏感,且不需要歸一化,GBDT對異常值敏感(串行),需要歸一化(GBDT的樹是在上一顆樹的基礎上通過梯度下降求解最優解,歸一化能收斂的更快,而隨機森林本來就是通過減少方差提高性能的,樹之間建立關系是獨立的,不需要歸一化)
5、GBDT的缺點?
- 在高維稀疏的數據集上,表現性不好。
- 訓練過程是串行,需要在決策樹內部采用一些局部并行的手段提高訓練速度。
6、GBDT和XGBoost的異同?
不同:
- GBDT用了一階導數信息,XGBoost用了一階、二階導數信息
- GBDT不執行并行化,XGBoost在數據和特征方便增加了并行化處理,(數據采樣、特征重要性排序)
- GBDT對異常值敏感,XGBoost新增了缺失值處理策略
- GBDT只能是樹模型,XGBoost可以自定義基學習器
- XGBoost增加了正則化的策略
7、Xgboost 如何尋找最優特征?是有放回還是無放回呢?
Xgboost在訓練的過程中給出各個特征的增益評分,最大增益的特征會被選出來作為分裂依據,從而記憶了每個特征對在模型訓練時的重要性。從根到葉子中間節點涉及某特征的次數作為該特征重要性排序。Xgboost是不放回,還支持子采樣和列采樣。
8、Xgboost為什么要用泰勒展開,優勢在哪里?
XGBoost使用了一階和二階偏導,二階導數有利于梯度下降的更快更準,使用泰勒展開取得函數做自變量的二階導數形式,可以再不選定損失函數具體形式的情況下,僅僅依靠輸入數據的值就可以進行葉子分裂優化算法,本質上將損失函數的選取和模型算法優化/參數選擇分開,這種去耦合增強了XGBoost的適用性,使得模型按需選取損失函數。
9、RF如何處理缺失值?
方法一:將數值型變量中的缺失值用其所對應類別中的中位數替換。把描述型變量缺失的部分用所對應類別出現最多的數值替代。
方法二:在方法一的基礎上做了升級,引入了權重變量,即對需要替換的數據先和其他數據做相似度測量,如果是分類變量,則用沒有缺失的觀測實例相似度的權重投票,如果是連續型變量,則用加權平均和進行填充。
10、XGBoost如何處理缺失值?
xgboost把缺失值當做稀疏矩陣來對待,本身的在節點分裂時不考慮的缺失值的數值。缺失值數據會被分到左子樹和右子樹分別計算損失,選擇較優的那一個。如果訓練中沒有數據缺失,預測時出現了數據缺失,那么默認被分類到右子樹。11、隨機森林如何評估特征重要性?
12、XGBoost如何給特征評分?
在CART樹中,通過基尼指數選取分離點的特征,一個特征被選中的次數越多,該特征的評分就越高。
在XGboost中,枚舉不同的樹結構,利用打分函數來尋找最優的結構樹。從樹深度0開始,每個節點遍歷所有特征,對于單個特征,首先對特征的值進行排序,然后線性掃描該特征進行選擇最好的切割點,再比較所有的特征,選擇信息增益增高的特征為當前節點。
假設年齡這個特征,我們首先對年齡進行排序,設定閾值a,將小于閾值a的分為一類,大于閾值a的分為一類,計算該特征的基尼指數,若存在多個閾值,就會出現多個基尼指數值,選擇最大的那個為當前的閾值,并計算所有特征(年齡、性別、職業等),選擇最大的gini指數的特征為當前節點。這種只看到當前節點的思想就是greddy exact。
引入新葉子的懲罰項是為了優化目標函數,對應了樹的剪枝,當分割閾值小于懲罰項,就忽略這個分割。
總結
以上是生活随笔為你收集整理的机器学习面试——XGBoost,GBDT,RF(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下vi命令大全,linux系统
- 下一篇: Linux中vi命令详解