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 自帶的五種:
- Random Forest Classifier
- Extra Trees Classifier
- AdaBoost Classifier
- Gradient Boosting Classifier
- 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