因為決策樹分裂時會考慮所有特徵重要性,那麼用以上演算法有必要做特徵選擇嗎?比如用遺傳演算法模擬退火等進行特徵選擇能夠提高性能嗎?如果可以的話應該怎麼解釋呢?


樹模型學習的過程本身就有特徵選擇,但做比較細的特徵還可以加速模型收斂。可以看我之前一篇文章

Python特徵選擇(全)機器學習中,特徵選擇是一個重要步驟,用以篩選出顯著特徵、摒棄非顯著特徵。 1 特徵選擇的目的減少特徵(避免維度災難),提高訓練速度,降低運算開銷;減少干擾雜訊,降低過擬合風險,提升模型效果;更少的特徵,模型可解釋性更好;2 特徵選擇方法特徵選…10 贊同 · 0 評論查看完整文章


有必要,變數過多會讓演算法複雜度變高。同時遵循奧卡姆剃刀原理,簡單有效原理。雖然樹類型的model可以自動進行特徵選擇,但是手動剃掉一些不必要的特徵會提升整體模型的魯棒性。


要的,很多特徵都是無效特徵,留著對結果有害無益,不如扔了,扔了過後你再用這些演算法就會發現在測試集表現更好了。


集成樹演算法需要特徵篩選。雖然變數相關性對集成樹演算法影響小,但變數過多會增加演算法複雜度,增加模型訓練和預測時間,增加模型部署風險,增加企業維護變數和存儲變數成本。系統來看,集成樹演算法還是需要變數篩選,保持合適緯度,剔除無效變數,噪音變數。歡迎學習更多建模知識

https://ke.qq.com/course/package/31250?tuin=dcbf0ba


當你的特徵特別多的情況下,是需要的。因為特徵太多,訓練耗時,你演算法可能需要對列抽樣。這時候做了特徵選擇能節省不少的功夫。

其次,實際應用中,可能會對模型的性能有要求,比如穩定性之類的。你做特徵選擇可以排除不穩定的特徵,模型會更穩健。


需要的,特徵太多或特徵部門相關性都會有問題


確實並不需要,或者說做特徵選擇的效果其實並不如造出一個比較有用的特徵。

演算法的原理已經是避免了無效特徵了,刪除一些無效特徵是可以顯著提升性能。

一個特別經典的例子是,Kaggle有一場比賽:Santander Customer Transaction Prediction

200維特徵經過高度處理,如果只用原始的200維特徵,無論你怎麼做特徵篩選也不頂用,因為真正的特徵需要被「Engineer」出來,做出有用的特徵之後,即使不做特徵選擇,效果也非常好。


從緩解過擬合的角度來講,去掉無關特徵可以提高泛化性能。


一般情況下是需要的。良好的特徵選擇可以提升xgboost的分類或回歸效果,比如準確率。而且可以加速模型訓練。

可以考慮一個極端情況,如果過多冗餘信息加入到特徵里,至少一件事情可以想像就是模型訓練時間會大大增加。雖然xgboost本身具備一定的特徵選擇能力,但是有局限的,而且需要時間的。

再強大的模型加上欠佳的數據,都未必比得過一個簡單的模型加上接近完美的數據,而數據富含的是特徵結構。因此廣義上說,對於任何問題任何模型,特徵選擇都是一門學問,都是有必要的。


我遇到過類似的情景,當時我是先用粗糙集過濾了很多冗餘的條件屬性,再進行Adaboost或者決策樹去處理,效果很好。


推薦閱讀:
相关文章