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

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

1.數據探索dom

經常使用圖表:性能

查看目標變量的分佈。當分佈不平衡時,根據評分標準和具體模型的使用不一樣,可能會嚴重影響性能。學習

對 Numerical Variable,能夠用 Box Plot 來直觀地查看它的分佈。測試

對於座標類數據,能夠用 Scatter Plot 來查看它們的分佈趨勢和是否有離羣點的存在。編碼

對於分類問題,將數據根據 Label 的不一樣着不一樣的顏色繪製出來,這對 Feature 的構造頗有幫助。rest

繪製變量之間兩兩的分佈和相關度圖表。blog

2.特徵選擇get

  Feature Selection 最實用的方法也就是看 Random Forest 訓練完之後獲得的 Feature Importance 了。其餘有一些更復雜的算法在理論上更加 Robust,可是缺少實用高效的實現,好比這個。從原理上來說,增長 Random Forest 中樹的數量能夠在必定程度上增強其對於 Noisy Data 的 Robustness。it

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 已經足夠了。

相關文章
相關標籤/搜索