使用 RapidMiner 參加 Kaggle Titanic 競賽
要準備 Data Mining 這門課的期中考,本來決定用之前的 Python 程式碼來準備作業,然後做一個 report 發表。後來在同學的提醒下,為什麼不用 Rapid Miner 來呢。所以就嘗試用 Rapid Miner 了。結果發現用 Rapid Miner 來做的話,十分便利,節省了寫程式碼和資料探索分析的時間。而且從提交的結果上來看,也比 Python 程式碼的結果要好上一點。
沒有使用過 Rapid Miner 軟體的話,可以參考這一篇文章:Rapid Miner 基本使用
資料處理
1. 選擇有用的資料
探索資料集,可以發現數據集中的有些特徵是對預測來說是沒有作用的。比如:
- PassengerId:乘客的 Id 資訊,對於預測模型來說沒有任何作用
- Name:乘客的姓名,其也是無用的資訊,模型不可能根據一個人的姓名特徵來進行預測
- Ticket:船票資訊,上面是一些編號,也是沒用的資訊。
- Cabin:船艙,這一特徵沒準會有點用處,但是它的遺失資料實在太多,且是非數字型的特徵,因此也濾除掉。
- Embarked:乘客登船的港口。 C - 瑟堡,S - 南安普敦,Q - 皇后鎮。其也是沒用的資訊。
在 Rapid Miner 中選擇 “Select Attributes” 操作器,雙擊該操作器,並選擇除上面以外的特徵。如下圖所示:

2. 處理遺失的資料
選擇完有用的資料後,統計可以發現,“Age” 特徵存在遺失資料的情況,如下圖所示:

為了處理遺失的資料,在 Rapid Miner 中選擇 “Replace Missing Value” 操作器,雙擊該操作器,選擇需要執行該操作的特徵 “Age”。

然後,在右側一欄中,選擇 “average”,即使用計算平均值的方法來填補遺失的資料。

3. 處理非數字資料
在統計資料集的時候,可以發現,“Sex” 這項特徵是非數字的。

這時候可以選用 “Norminal to Numerical” 操作器,選擇 “Sex” 特徵,將其轉換成類似 one-hot 向量的資料。結果如下所示:


4. 轉換資料型別
“Survived” 這一特徵是數字型的特徵,在這裡我們需要將其處理成多類別的資料,0 表示死,1 表示生還。如果不這麼處理的話 ,Rapid Miner 執行的結果就是生還的概率,而不是 0 或者 1 這樣的結果。這樣就不符合 Kaggle 提交的要求。此時,選擇 “Numerical to polynominal” 這一操作器,然後選擇 “Survived” ,將其處理成多類別的資料。

5. 設定標籤資料
在 Titanic 的訓練資料集中,“Survived” 這一特徵是標籤(目標,label/target)資料,因此需要將其設定為 label 。這時可以使用 “Set role” 這一操作器。然後將 “Survived” 設定為 “label”。


6. 標準化資料
處理完上面的步驟後,接下來就要進行特徵縮減,這時候可以將資料進行標準化。選擇 “Normalize” 操作器,然後選擇特徵進行處理。

所以,整個訓練集資料的處理過程如下所示:

對測試集資料也進行類似的上述步驟,具體過程如下圖所示:

不過需要注意的是,在選擇特徵的時候,需要把 “PassengerId” 也選擇進去,因為匯出結果的時候會用到。
搭建模型
選擇 “Decision Tree” 操作,然後將訓練資料集處理後的輸出連線到該操作器的輸入口,如下圖所示:

訓練完模型後,要將其應用在測試集上,這時候選擇 “Apply Model” ,將模型訓練後的輸出和測試集處理完後的輸出分別與 “Apply Model” 的兩個輸入口連線,如下圖所示:

匯出結果
按照 Kaggle 的要求,只需要匯出 “PassenerId” 和 “Prediction(Survived)” 這兩列資料。所以先用“Select Attributes” 操作器選擇這兩個特徵,然後用 “Write Excel” 操作器來完成匯出任務,如下圖所示:

完整的搭建過程如下所示:

上傳結果
匯出的結果如下圖所示:

由於還是不符合提交要求,所以還需要進行處理。手工量不是特別大,所以可以直接在 Excel 中直接手動處理,然後匯出為 csv 檔案格式,如下圖所示:

然後將檔案在 Kaggle 上提交,結果能達到 0.77511 的成績,如下圖所示:

比用 Python 的結果 0.72727 的結果(一個星期前寫的程式碼,處理資料的步驟完全一樣)要好。

本篇文章首發於我的簡書 (caoqi95)