冰冷的海水,複雜的路線
生死已成定局,但因果仍成迷思
今天,再現過往
這篇文章記錄了我第一次進行鐵達尼號比賽,以及後來又再度認真的玩這個比賽的過程,會介紹一下我最終的code以及最一開始到最終的心路歷程,分享給大家做參考。
第一次碰到這個題目是在碩士班修了一門人工智慧的課程,一學期的課程能講得不多,老師集中在機器學習這方面做講解,也因為是在職碩士班的課程,同學不見得都有寫程式的經驗,老師就以基本架構,ML的邏輯,然後提供範本code給我們修改的模式上課,那時候對python的各個套件一點概念也沒有,所以也不清楚到底能有什麼功能能改,只敢改改種子碼跟一些超參數還有訓練集比例,過了兩年後,某天突然想到這個作業,才正式的踏入這個領域內。
「Titanic - Machine Learning from Disaster」是一個以鐵達尼號沈船事件為背景的資料預測任務。1912 年,白星航運公司旗下的鐵達尼號首航,卻在途中撞上冰山,加上當時的一連串決策失誤,最終釀成歷史上最知名的海難之一。
所幸當時留下了詳細的乘客紀錄,包括性別、年齡、船艙階級、登船地點與最終是否生還等資訊,雖然不免有部分遺漏與誤差,但這樣的歷史資料,已足以成為機器學習的絕佳練習素材。
這份資料因為已經公開多年,且資料規模不大,其正確答案早已被試驗出來,因此Leaderboard 出現了 100% 準確的分數,不過這仍然是一個很好的練習題目:小而精、容易觀察每一個處理環節的影響。下面,我們就進入這題的過程。
※由於 Titanic 是 Kaggle 的入門練習題,並不是正式競賽,因此它只有公開 leaderboard,並沒有私有分數排名。
拿到一份資料,首先要做的事情不是急著跑模型,而是先認識資料本身。包含它有哪些欄位、欄位的資料型態、是否有缺值、這些欄位看起來合理嗎,其實就是整份任務的第一個挑戰。
好在 Python 提供了很多工具可以幫助我們快速檢查資料的樣貌。
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 上操作,也會有類似的步驟來讀取比賽的資料集。
接著,我們先讀入訓練資料,並使用 .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
我們可以知道我們擁有以下資料欄位: