Kaggle 入門 1.2——Introduction to Ensembling/Stacking in Python (Titanic)

介紹 Kaggle Titanic 比賽排名第二的 Kernel,原代碼地址如下:

Introduction to Ensembling/Stacking in Python

我個人整理後的 Jupyter Notebook 地址如下:

tommyjiang/data-new-energy

對該 Notebook 簡要梳理如下。

# 準備工作

需要的 package:

  • numpy
  • pandas
  • matplotlib
  • seaborn
  • sklearn
  • plotly
  • re
  • xgboost

前5個package在 Kaggle 入門 1.1——A Journey through Titanic 中都用到了,plotly 和 matplotlib/seaborn 一樣也是用於作圖,re 是正則表達式,xgboost 的介紹可以參考 機器學習演算法中GBDT和XGBOOST的區別有哪些?

# 數據預處理

1. PassengerId

直接去掉。

2. PClass

保留。

3. Name

統計 Name 長度,存為 Name_length 列。

統計 Name 中的頭銜並分類,包括:Mr,Miss,Mrs,Master 和 Rare,分別賦為1、2、3、4和5。

4. Sex

Male 是1,Female 是0。

5. Age

先填充缺失值,在[平均值-標準差, 平均值+標準差]之間生成隨機數進行填充,之後分為5段。

16,16-32,32-48,48-60和60以上。

6. SibSp

與 Parch 統一處理,二者之和再加1存為 Family Size 列。

同時對自己一個人在船上進行判斷,Family Size =1即一個人,存為 IsAlone 列。

7. Parch

已和 SibSp 一起處理。

8. Ticket

直接去掉。

9. Fare

用中位數填充缺失值,再分為4組,<7.91,7.91-14.454,14.454-31,>31。

10. Cabin

利用 Cabin 是否為空存 Has_Cabin 列,有 Cabin 信息的為1,其餘為0。

11. Embarked

缺失值用 S 填充,全轉為數值變數。

## 模型融合——基學習器

在本專欄之前的文章中介紹了 Stacking 這種集成學習方法,可以參考 他山之石(一)——集成學習介紹

Stacking 方法需要先訓練基學習器,本 Kernel 中採用 sklearn 自帶的五種:

  1. Random Forest Classifier
  2. Extra Trees Classifier
  3. AdaBoost Classifier
  4. Gradient Boosting Classifier
  5. Support Vector Machine

首先訓練以上5種基學習器,獲得除SVC之外的學習器的 feature importance:

由以上四張圖可以看出,不同模型的 feature importances 有顯著區別。其中 Bagging 方法對應的 Random Forest 和 Extra Trees 中,PClass、Sex 和 Title 值較高,而 Boosting 方法對應的 AdaBoost 和 Gradient Boosting 中,Name_length 值很高。

將四個模型 feature importances 的平均值作出:

值較高的有:PClass、Sex、Title 和 Name_length。

## 模型融合——次級學習器

將初級學習器的預測結果作為次級學習器的輸入,初級學習器的預測結果如下:

作出四種基學習器預測的相關圖:

Bagging 演算法的基本要求是各基學習器必須「好而不同」,可以看到以上四個學習器預測最低相關性為0.7。

利用 XGBoost 對五種基學習器進行學習,生成二級學習器,生成最終的預測結果。XGBoost 參數眾多,本文不再詳細介紹,後續將單獨介紹。

最終本 Kernel 預測結果得分為:0.79426。


推薦閱讀:

記 XGBoost 的一個坑
數據分析及機器學習環境配置(docker極簡入門指南)
再看Boosting和GBM
如何畫XGBoost裡面的決策樹(decision tree)
快的不要不要的lightGBM

TAG:Kaggle | 集成学习 | xgboost |