決策樹模型訓練時每次劃分會選擇信息增益最大的特徵進行劃分,所以我理解的是訓練模型前不需要再手動進行特徵選擇。

1) 最近在kaggle上看到一個帖子提到了用K-S檢驗來選擇特徵,來減小交叉驗證集和測試集得分的差別,也就是用模型的過擬合程度來進行特徵選擇。這算是從另一個角度來考慮特徵選擇?

Reducing the gap between CV and LB

2) 除此之外,我還遇到一種情況,我做了很多特徵,但是感覺可能不同的特徵可能包含了重複的信息,這樣是否會影響模型的表現呢?


一切以效果說話吧,你的每一步處理都會同時影響bias和variance,然後在當前數據集下和模型下效果如何,真的無法預測,只能看效果說話。


特徵重複信息的問題,根據我的經驗,重複信息基本不影響最終效果。

比如x1是個有效特徵,特徵重要性佔比很高。現在來了個x7,和x1相關性很大,而且包含更準的信息。那麼在新模型里,x1的特徵重要性就會斷崖式下跌。模型效果有所提升。x7基本取代了之前x1的地位。


先說結論:LightGBM/XGBoost需要進行特徵選擇。

在回答問題之前,先貼出兩個我對機器學習的思考:

1、機器學習學什麼

機器學習,那究竟是學什麼呢?對線性回歸來說,它想學的就是每個特徵的權重,學到了這個才能去判斷。對決策樹來說,它學的是葉子的分割點特徵,學到了從上到下的劃分規則,它才能去劃分新的樣本,賦予標籤。對gbdt來說,它學的也是劃分規則。

那差別來了,都學劃分規則,有什麼不同呢?

2、機器學習怎麼學

學什麼,也就是學習方向定好以後,怎麼學呢?這裡就是對損失函數定義的不同,優化的方向不一樣。對線性回歸,可以是平方,可以是絕對值。對決策樹,增益、增益率、基尼係數,都可以達到分割目的,分割方式不一樣。

Gbdt更是有多種形式。

在你的問題中提到:決策樹模型訓練時每次劃分會選擇信息增益最大的特徵進行劃分,所以我理解的是訓練模型前不需要再手動進行特徵選擇。

演算法都能對特徵做出判斷,不同損失函數不同的判斷,以CART決策樹為例,節點越不純,GINI值越大,在二分類中,如果兩類數量相同,GINI值達到最大,特徵是存在優劣的,有的對標籤影響巨大,有的毫無關係。

舉個例子,西瓜的個頭可能和種子品種、種子大小、陽光、溫度、降雨量、全年晴天的數、土壤、是否施肥等有關係,但有一點可以肯定,西瓜大不大和我有沒有玩遊戲,中國足球有沒贏球、贏了幾個球、沒有一毛錢關係,在建模過程中這些特徵是要被找出刪除的。

另外種子品種和種子大小、陽光和溫度、土壤和是否施肥,雖然特徵名字一樣,當特徵之間是高度相關的,要避免使用相關性高的特徵。

LightGBM/XGBoost也不例外,刪除無關特徵,降低特徵維度,防止過擬合,減少模型訓練的時間。


我的簡單結論是,對於有懲罰項的機器學習演算法,不需要。

特徵選擇更多見到的是邏輯回歸這種有考慮置信區間的演算法,因為要考慮置信區間(達不到95%以上的可信度我就不要了),所以要做特徵取捨,因為要做特徵取捨,所以要考慮多重共線性問題,因為共線性會直接影響特徵的重要性表現。

機器學習不考慮置信區間(有些結構你也沒法考慮),只考慮如何對於現有的數據集用一個f(x)去更好的擬合y,只要加入的特徵沒有造成數據集內的過擬合就都納入進來,通過懲罰項來進行一刀切。

所以說,目的不一樣,機器學習只要求擬合好本數據集,也強大在擬合能力上,泛化的表現取決於數據集的採樣情況,很適合大數據場景下,而數據較少的情況,從泛化角度考慮(看你是為了競賽還是為了實際使用)適合傳統方法。


從個人理解的角度來說,不同於id3 or c4.5會對分類依據feature種類進行選擇, xgboost從更細的粒度直接對特徵的閾值量依據loss function進行了選擇, 這也意味著同一種類的特徵在xgboost中可以出現在同一樹不同層次。

如有錯誤 望討論並指正


對性能可能沒多大影響,但是對訓練時間有影響


推薦閱讀:
相关文章