N問GBDT
01-29
寫在前面
關於GBDT(Gradient Boosting Decision Tree)的資料非常的多,本文試著換個角度來看GBDT。原理流程明白了,真上手時還會遇到各種各樣的問題,不妨列個list,check一下。
OK,lets go!
- 怎樣設置單棵樹的停止生長條件?
- 如何評估特徵的權重大小?
- 如何人工去干預某列特徵的權重?
- 當增加樣本數量時,訓練時長是線性增加嗎?
- 當增加樹的棵樹時,訓練時長是線性增加嗎?
- 當增加一個棵樹葉子節點數目時,訓練時長是線性增加嗎?
- 每個節點上都保存什麼信息?
- 常見的衡量分裂loss的指標都有哪些?
- 分類問題還說,決策樹DT如何來做回歸的?
- 如何防止過擬合?
- boosting的本意是是什麼?跟bagging,random forest,adaboost,gradient boosting有什麼區別?
- gbdt中哪些部分可以並行?
- 樹生長成畸形樹,會帶來哪些危害,如何預防?
- feature sample ratio = 1.0會怎麼樣?跟特徵數量的多少有聯繫么?
- 每個點分裂收益是如何計算的?
- 使用gbrank時,pair的正逆序比和權重有什麼關係?正逆序比越大權重就一定高么?
- 如何選擇特徵和相應的分裂點?
- 假如某些特徵是稀疏特徵,在特徵選擇的時候會吃虧,怎麼辦?
- 通過更改指定樣本sample和label來達到調整權重的目的,會有什麼缺點和不足?
- G所表示的gradient在哪裡體現的?
- 通過前N棵樹已經正確分類的數據,在第N+1棵樹上是會被怎樣處理的?
- 既然在實際應用的過程中是residuals(殘差),為何還稱其為GBDT,而不是稱其為RBDT?
- 每棵樹賦權重是怎樣體現的?
- GBDT可以解決分類、回歸問題,若是面對rank問題,該怎麼處理?
- 對於rank問題,優化的目標函數是什麼樣的?怎麼樣優化這種非凸函數?
- 為什麼大多數場景都選擇square loss作為loss function?它有什麼優缺點?
- boosting和bagging之間的比較?
- gbdt不適合於那些場景,或是說哪些場景下線性模型反而更好,或是差不多?
- 選擇損失函數時,squareloss和logloss的適用場景?
- 當前很火熱的xgboost和一般的gbdt相比,有哪些區別?
- xgboost採用了二階導,這樣會帶來哪些缺點?
- xgboost節點分裂選取特徵和特徵分裂值時,為什麼要先sort by one feature?
- 對於Nfeature,構建一棵深度為d的樹,時間複雜度是什麼樣的?
- 若是添加一個冗餘特徵會怎麼樣?
- gbdt涉及到了哪些主要參數,是怎樣來調參的?
- 如何處理非均衡數據?
- xgboost中booster有三個選項,gblinear,gbtree,dart,三者的區別與適用場景?
- 簡述xgboost中提及的近似直方圖演算法。
- 如何為gbdt設計正則項?
- 對於指定的某數據集,在其上建立最優決策樹,複雜度是多少?(仔細想想)
- 假如數據量過大,在分裂特徵的時候不能一次性的載入到內存中,怎麼處理?
- 如何處理預設值,或稀疏數據?
- 怎麼剪枝?
- 假設已經有個已經訓好的gbdt model,此時又設計了一個新的特徵,若不重訓模型,怎樣來做?(實踐中,dump數據和數據準備可能會很麻煩,不想重新model,有什麼trick?)
持續更新ing...
推薦閱讀: