數據探索、特征選擇、模型選擇、交叉驗證、模型融合


原文:https://www.toutiao.com/i6591745523139478030/?group_id=6591745523139478030

1.數據探索

常用圖表:

查看目標變量的分布。當分布不平衡時,根據評分標准和具體模型的使用不同,可能會嚴重影響性能。

對 Numerical Variable,可以用 Box Plot 來直觀地查看它的分布。

對於坐標類數據,可以用 Scatter Plot 來查看它們的分布趨勢和是否有離群點的存在。

對於分類問題,將數據根據 Label 的不同着不同的顏色繪制出來,這對 Feature 的構造很有幫助。

繪制變量之間兩兩的分布和相關度圖表。

2.特征選擇

  Feature Selection 最實用的方法也就是看 Random Forest 訓練完以后得到的 Feature Importance 了。其他有一些更復雜的算法在理論上更加 Robust,但是缺乏實用高效的實現,比如這個。從原理上來講,增加 Random Forest 中樹的數量可以在一定程度上加強其對於 Noisy Data 的 Robustness。

3.特征編碼

  這里用一個例子來說明在一些情況下 Raw Feature 可能需要經過一些轉換才能起到比較好的效果。假設有一個 Categorical Variable 一共有幾萬個取值可能,那么創建 Dummy Variables 的方法就不可行了。這時一個比較好的方法是根據 Feature Importance 或是這些取值本身在數據中的出現頻率,為最重要(比如說前 95% 的 Importance)那些取值(有很大可能只有幾個或是十幾個)創建 Dummy Variables,而所有其他取值都歸到一個“其他”類里面。

4.模型選擇

  Kaggle 上最常用的模型基本都是基於樹的模型:  

  Gradient Boosting

  Random Forest

  Extra Randomized Trees

  以下模型往往在性能上稍遜一籌,但是很適合作為 Ensemble 的 Base Model:

  SVM

  Linear Regression

  Logistic Regression

  Neural Networks

5.交叉驗證  

  Cross Validation 是非常重要的一個環節。它讓你知道你的 Model 有沒有 Overfit,是不是真的能夠 Generalize 到測試集上。在很多比賽中 Public LB 都會因為這樣那樣的原因而不可靠。當你改進了 Feature 或是 Model 得到了一個更高的 CV 結果,提交之后得到的 LB 結果卻變差了,一般認為這時應該相信 CV 的結果。當然,最理想的情況是多種不同的 CV 方法得到的結果和 LB 同時提高,但這樣的比賽並不是太多。在數據的分布比較隨機均衡的情況下,5-Fold CV 一般就足夠了。如果不放心,可以提到 10-Fold。但是 Fold 越多訓練也就會越慢,需要根據實際情況進行取舍。很多時候簡單的 CV 得到的分數會不大靠譜,Kaggle 上也有很多關於如何做 CV 的討論。比如這個。但總的來說,靠譜的 CV 方法是 Case By Case 的,需要在實際比賽中進行嘗試和學習,這里就不再(也不能)敘述了。

6.模型融合

  Ensemble Learning 是指將多個不同的 Base Model 組合成一個 Ensemble Model 的方法。它可以同時降低最終模型的 Bias 和 Variance(證明可以參考這篇論文,我最近在研究類似的理論,可能之后會寫新文章詳述),從而在提高分數的同時又降低 Overfitting 的風險。常見的 Ensemble 方法有這么幾種:

  Bagging:使用訓練數據的不同隨機子集來訓練每個 Base Model,最后進行每個 Base Model 權重相同的 Vote。也即 Random Forest 的原理。

  Boosting:迭代地訓練 Base Model,每次根據上一個迭代中預測錯誤的情況修改訓練樣本的權重。也即 Gradient Boosting 的原理。比 Bagging 效果好,但更容易 Overfit。

  Blending:用不相交的數據訓練不同的 Base Model,將它們的輸出取(加權)平均。實現簡單,但對訓練數據利用少了。

  Stacking:接下來會詳細介紹。  

  從理論上講,Ensemble 要成功,有兩個要素:

  Base Model 之間的相關性要盡可能的小。這就是為什么非 Tree-based Model 往往表現不是最好但還是要將它們包括在 Ensemble 里面的原因。Ensemble 的 Diversity 越大,最終 Model 的 Bias 就越低。Base Model 之間的性能表現不能差距太大。這其實是一個 Trade-off,在實際中很有可能表現相近的 Model 只有寥寥幾個而且它們之間相關性還不低。但是實踐告訴我們即使在這種情況下 Ensemble 還是能大幅提高成績。

  Stacking模型:

  相比 Blending,Stacking 能更好地利用訓練數據。以 5-Fold Stacking 為例,它的基本原理如圖所示:

  

  整個過程很像 Cross Validation。首先將訓練數據分為 5 份,接下來一共 5 個迭代,每次迭代時,將 4 份數據作為 Training Set 對每個 Base Model 進行訓練,然后在剩下一份 Hold-out Set 上進行預測。同時也要將其在測試數據上的預測保存下來。這樣,每個 Base Model 在每次迭代時會對訓練數據的其中 1 份做出預測,對測試數據的全部做出預測。5 個迭代都完成以后我們就獲得了一個 #訓練數據行數 x #Base Model 數量 的矩陣,這個矩陣接下來就作為第二層的 Model 的訓練數據。當第二層的 Model 訓練完以后,將之前保存的 Base Model 對測試數據的預測(因為每個 Base Model 被訓練了 5 次,對測試數據的全體做了 5 次預測,所以對這 5 次求一個平均值,從而得到一個形狀與第二層訓練數據相同的矩陣)拿出來讓它進行預測,就得到最后的輸出。

  獲獎選手往往會使用比這復雜得多的 Ensemble,會出現三層、四層甚至五層,不同的層數之間有各種交互,還有將經過不同的 Preprocessing 和不同的 Feature Engineering 的數據用 Ensemble 組合起來的做法。但對於新手來說,穩穩當當地實現一個正確的 5-Fold Stacking 已經足夠了。

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM