Kaggle: Titanic — Machine Learning from Disaster(Top 2%)
本篇介紹我在Kaggle參與競賽的心得,以透過資料實戰,進行ML/DL技能的活化。
遙望大神 Giba,取得數面金牌獎,實在欽佩,
希望有天也能成為強者。
這一次的學習內容幾乎是Kaggle比賽當中的Hello World,也就是Titanic的題目,透過乘客的相關資訊(X),來預測是否能在Titanic事件中存活(Y),為一個經典的分類預測(Classification),且結果Y=存/沒。
Start here! Predict survival on the Titanic and get familiar with ML basics.
https://www.kaggle.com/c/titanic/overview
從這裡開始,在數次嘗試後,總算取得前2%的成績。
鐵達尼號有哪些資訊?
- Id: 識別資料序用,沒有其他用意。
- Survived: 就是要預測的Y,1為存活/0為逝去。
- Pclass: 階級,可以讀出階級越高(1),存活率越大。(range: 1–3)
- Name: 名字,可以用來識別是否已婚、階級、是否可能同一家族。
- Sex: 男/女。
- Age: 年紀,在train, test set都有許多缺失值,是比賽學習補值重點。
- SibSp: 該名乘客旁系血親總數(含配偶)。例如兄弟姊妹。
- Parch: 該名乘客直系血親總數。例如父母、子女。
- Ticket: 票號。
- Fare: 票價。
- Cabin: 倉號,最多缺失值的一欄,補值相當困難。
- Embarked: 登船港口代碼
(C=Cherbourg, Q=Queenstown, S=Southampton)
訓練資料集(training set)共 891 筆資料,
測試資料集(testing set)共418筆資料。
特徵工程 Feature Engineering
- 新增乘客親友總數=加總SibSp與Parch。
- 透過姓名稱號做group by來補缺失的Age欄位。
- 以眾數(mode)補上Embarked缺失值,以平均(mean)補上Fare缺失值。
- 以"others"補上Cabin缺失值,擷取Cabin開頭英文字母,並轉為類別參數。
- 建立one-hot encoding: Pclass, Sex, Embarked, Cabin。
機器學習模型建立 Model Building
本次模型採用 LogisticRegression(86%)、KNN(76%)、RandomForest(89%)、SVM(79%)、XGBoot(88%)。
以準確度(accuracy_score)衡量模型表現。
並透過cross validation方式,最終以 3 fold代入。
最終挑選LogisticRegression, RandomForest, XGBoot進行ensemble learning,並提交預測成果。
小小感想:
這是在Kaggle第一個比賽,當然過程中也查了很多其他人的做法,譬如有人補Age做法也有透過Pclass來補,看起來也不錯,針對Fare只缺一筆,也有細緻化的補法(先看該人Pclass, Name來判斷婚姻狀態來group by再補平均)
在Cabin的處理上,甚至有大神船體結構圖像化,真的是很厲害。
也是因為看到這篇,原本想捨棄Cabin這個缺失太多的參數,最終還是留下來了。
同時驗證了KNN抓越多K時,模型表現確實會越差。
很多細節很難文字化敘述,這個比賽也有一堆人準確度100%,覺得有點誇張得結果,而由於沒有版上大神強大的EDA技術,圖片的部份就多參考Dicussion大神們的筆記吧!