Kaggle 入門 1.1——A Journey through Titanic

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

A Journey through Titanic

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

tommyjiang/data-new-energy

對該 Notebook 簡要梳理如下。

# 準備工作

需要的 package:

  • numpy
  • pandas
  • matplotlib
  • seaborn
  • sklearn

# 數據統計

訓練集數據:891行,12。

具體信息如下:

  • 整數型
    • PassengerId 乘客序號
    • Pclass 艙位
    • SibSp 船上兄弟姐妹個數
    • ParCh 船上父母孩子個數
    • Survived 存活
  • 浮點型
    • Age 年齡
    • Fare 船票費用
  • 字元型
    • Name 姓名
    • Sex 性別
    • Ticket 票信息
    • Cabin 艙位
    • Embarked 登船港口

其中缺失數據的列包括:

  • Age:714,缺少177(19.86%)
  • Cabin:204,缺少687(77.10%)
  • Embarked:889,缺少2(0.22%)

測試集數據:418行,11列,與訓練集相差的一列即需要我們預測的 Survived 列。

其中缺失數據的列包括:

  • Age:332,缺少86(20.57%)
  • Cabin:91,缺少687(78.23%)
  • Fare:417,缺少1(0.24%)

# 特徵選擇

這部分主要考慮選擇11列中的哪些列作為分類器的輸入 feature。

## PassengerId

該列主要用於排序,去掉。

## Ticket

看不出明顯的信息,去掉。

## Embarked

不同 Embarked 的存活率對比如下圖:

由上圖可看出,不同 Embarked 變數對應的存活率有比較明顯的區別,因此本 Kernel 的作者選擇與 Embarked 相關的 dummy variable,但考慮到 S 港口的存活率較低,因此去掉該列,僅保留 C 和 Q 列,即認為在 C 和 Q 登船對存活率會有提升。

## Fare

由於 Fare 數據有缺失,因此先處理缺失值,利用中位數補充。

做出存活和非存活者的 Fare 的平均值:

可以看到存活者 Fare 的平均值明顯高於非存活者,故保留該列。

## Age

災難面前讓老人和孩子先逃生,所以 Age 變數非常重要。但問題是訓練集和測試集的 Age 數據均缺少約20%,因此核心是如何處理這些缺失值。

本 Kernel 中採用的是統計 Age 的均值和標準差,然後在[均值-標準差, 均值+標準差]之間生成隨機數,填充缺失值。

填充前後的 Age 變數的對比,可以看到集中填充的是中間部分:

## Cabin

缺失值太多,將近80%,去掉。

## SibSp 和 ParCh

將 SibSp 和 Parch 統一考慮,相加大於0說明該乘客在船上有親屬,Family 變數設為1,否則設為0。

對比有無親屬乘客的存活率:

可以看到有親屬的乘客存活率明顯較高,因此保留。

## Sex

Sex 部分對小於16歲的兒童單獨處理,只考慮16歲以上的成人,分為 Male, Femail 和 Child,各組的存活率如下圖:

可以看到 Female 和 Child 的存活率明顯高於 Male。處理方法與 Embarked 相同,保留 Female 和 Child,去掉 Male。

## PClass

不同 PClass 存活率對比:

處理方法與 Embarked 相同,保留 1 和 2,去掉 3。

## 特徵選擇總結

特徵選擇後,訓練集信息如下:

處理過程前面已經分別敘述。

# 分類模型

特徵選擇完成後,即可將其用於分類模型,本 Kernel 共考慮五種模型:

  • 邏輯斯諦回歸(Logistic Regression)
  • 支持向量機(Support Vector Machine)
  • 隨機森林(Random Forest)
  • k 近鄰(K Nearest Neighbors)
  • 高斯樸素貝葉斯(Gaussian Naive Bayes)

直接利用全部訓練集訓練模型,模型基本採用的均為默認參數,沒有進行參數調優。

各模型在訓練集和測試集的得分如下:

可以看到默認參數的模型在訓練集上表現都還可以,但在測試集上的表現就比較慘了。後面我們會繼續討論如何調整模型參數獲得更好的預測效果。


推薦閱讀:

【持續更新】機器學習特徵工程實用技巧大全
深度學習入門:Tensorflow實戰Digit Recognizer(一)
kaggle小黃車競賽 得分:0.41038
Kaggle—So Easy!百行代碼實現排名Top 5%的圖像分類比賽
Zillow簡介(二)如何重構經紀行業的產業鏈?

TAG:Kaggle | 机器学习 | 数据挖掘 |