冰冷的海水,複雜的路線
生死已成定局,但因果仍成迷思
今天,再現過往

📝 前言

這篇文章記錄了我第一次進行鐵達尼號比賽,以及後來又再度認真的玩這個比賽的過程,會介紹一下我最終的code以及最一開始到最終的心路歷程,分享給大家做參考。

第一次碰到這個題目是在碩士班修了一門人工智慧的課程,一學期的課程能講得不多,老師集中在機器學習這方面做講解,也因為是在職碩士班的課程,同學不見得都有寫程式的經驗,老師就以基本架構,ML的邏輯,然後提供範本code給我們修改的模式上課,那時候對python的各個套件一點概念也沒有,所以也不清楚到底能有什麼功能能改,只敢改改種子碼跟一些超參數還有訓練集比例,過了兩年後,某天突然想到這個作業,才正式的踏入這個領域內。

🧭背景介紹

「Titanic - Machine Learning from Disaster」是一個以鐵達尼號沈船事件為背景的資料預測任務。1912 年,白星航運公司旗下的鐵達尼號首航,卻在途中撞上冰山,加上當時的一連串決策失誤,最終釀成歷史上最知名的海難之一。

所幸當時留下了詳細的乘客紀錄,包括性別、年齡、船艙階級、登船地點與最終是否生還等資訊,雖然不免有部分遺漏與誤差,但這樣的歷史資料,已足以成為機器學習的絕佳練習素材。

這份資料因為已經公開多年,且資料規模不大,其正確答案早已被試驗出來,因此Leaderboard 出現了 100% 準確的分數,不過這仍然是一個很好的練習題目:小而精、容易觀察每一個處理環節的影響。下面,我們就進入這題的過程。

※由於 Titanic 是 Kaggle 的入門練習題,並不是正式競賽,因此它只有公開 leaderboard,並沒有私有分數排名。

📊 資料初探

拿到一份資料,首先要做的事情不是急著跑模型,而是先認識資料本身。包含它有哪些欄位、欄位的資料型態、是否有缺值、這些欄位看起來合理嗎,其實就是整份任務的第一個挑戰。

好在 Python 提供了很多工具可以幫助我們快速檢查資料的樣貌。

1. 載入資料集

from google.colab import drive
drive.mount('/content/drive')
train_path = '/content/drive/My Drive/"你的資料路徑"/train.csv'
test_path = '/content/drive/My Drive/"你的資料路徑"/test.csv'

我這邊使用的是 Google Colab 作為運算環境,所以要先掛載 Google 雲端硬碟,才能讀取存放在雲端的 CSV 資料。如果你是在 Kaggle Notebook 上操作,也會有類似的步驟來讀取比賽的資料集。

2.檢查訓練資料的結構

接著,我們先讀入訓練資料,並使用 .info() 來快速檢查整體欄位資訊:

import pandas as pd
df_train = pd.read_csv(train_path)
df_train.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

我們可以知道我們擁有以下資料欄位: