Kaggle滑水 泰坦尼克之災(決策樹)

2021-08-19 09:25:55 字數 2939 閱讀 8271

本文以kaggle新手習題——titanic: machine learning from disaster為場景開展實驗,以此熟悉kaggle平台。

本文的原始碼託管於我的github:practice-of-machine-learning/code/kaggle_titanic/,歡迎檢視交流。

titanic: machine learning from disaster(泰坦尼克之災)是kaggle的入門練習題之一。本題要求在所給出的人員相關資訊資料基礎上,判斷其是否在沉船事故中倖存。這是乙個典型的二分類問題,這裡通過構建決策樹分類器實現。本文任務安排如下:

資料初探:檢視並理解原始特徵含義,進行簡要的視覺化分析以形成初步的資料洞察;

特徵工程:針對決策樹分類器模型,基於對資料的理解,對原始資料進行預處理,構建用於模型訓練的特徵資料集;

決策樹分類:訓練決策樹分類器,得出**結果,採用**準確度評價結果好壞並進行改進分析;

賽題主頁介紹了所提供的原始資料集,包括訓練集與測試集,均以.csv檔案形式給出,包括了乘客id、年齡、性別、票價等等資料,同時訓練集還給出了倖存與否的標籤。原始資料的概略資訊如下所示:

資料樣本數:#train=891,#test=418,基本特徵如下表:

原始特徵名

資料型別

存在缺失值?

取值解釋

passengerid

int乘客id,0,1,2…

pclass

int船艙等級,

name

object

(稱謂+)姓名,string

***object

性別,age

float

有年齡,

sibsp

int兄弟姐妹同船人數,0,1,2…

parch

int父母孩子同船人數,0,1,2…

ticket

object

船票編號(字母數字符號組合,如)

fare

float有票價

cabin

object

有房號,字母+數字

embarked

object

登船地,

結合鐵達尼號事件背景,我們可以先對特徵與結果的關聯性進行猜測,如:上層乘客易倖存(如pclass=1,房號位於甲板上層,fare較大等),女性和孩子易倖存(如***=』female』,age較小等)。下圖展示了部分特徵與結果的關聯性:

從上圖可以驗證我們的猜想,如富人(pclass=1fare較大)倖存比例較大,women and children first原則在緊急時刻依然得到了很好的遵循。此外,還可以發現:於c地(法國-瑟堡)登船的乘客倖存比例較高,有親人同行更容易倖存(許是互幫互助)等等。

對資料初探的基礎上,我們很自然的想到採用決策樹模型來進行分類**,為了使資料能夠滿足樹模型規約化要求,這裡對特徵進行簡單地轉換與重構,生成初步用於訓練及測試的特徵集,列表如下:

新特徵名

解釋pclass

船艙等級,val∈

***性別,val∈,0~男性,1~女性

age年齡,val∈,-1~未知,0-4~年齡分級

fare

票價,val∈,-1~未知,0-3~票價分級

embarked

登船地,val∈,-1~未知,0~s,1~c,2~q

isalone

獨行?val∈,0~有親人做伴,1~獨行

採用此生成特徵資料集(訓練集+測試集),均為int型數值,如下圖所示(訓練集):

passengerid  survived  pclass  ***  age  fare  embarked  isalone

1 0 3 1 1 0 0 0

2 1 1 0 2 2 1 0

3 1 3 0 1 0 0 1

4 1 1 0 2 2 0 0

5 0 3 1 2 0 0 1

接下來,進行決策樹分類實驗,包括模型的構建、訓練與調優、測試三步驟。為防止決策樹過擬合,這裡我們以樹深max_depth超引數為例,採用交叉驗證進行最佳模型的選取。

設定max_depth引數的取值範圍,採用10-folds交叉驗證獲取每個max_depth取值下的決策樹模型驗證準確度(accuracy),得出準確度隨max_depth取值變化如下圖示(得出max_depth最優取3):

構建最佳max_depth對應的決策樹模型(基於基尼純度),在測試集上進行**,得出提交檔案上傳至kaggle,得出accuracy評分score=0.77990(並非很理想的結果^-^)。

本文簡述了採用決策樹分類器完成kaggle入門賽題titanic的過程,取得了一定的結果,進一步分析可以看出,訓練集得分score_train≈0.8,而測試集結果得分score_test≈0.78,這說明,當前決策樹模型在平衡泛化能力時(max_depth=3),面臨著擬合不足的缺陷,這也是單個樹模型所易出現的問題。為提高精度,一方面,做細特徵工程,如構建更加豐富的衍生特徵或高維組合特徵。另一方面,採用學習能力更強的模型,如隨機森林,gbdt等來處理當前任務。

kaggle泰坦尼克比賽總結

泰坦尼克資料探勘比賽是kaggle上的新手入門賽,作為乙個基礎還沒打好的菜雞強行敲了一波 但是大部分還是跟著別人的思路,看著別人的 寫的。因此 就不放了,放了跟搬運沒啥區別。單純總結一下學習感悟吧。做資料探勘的第一步就是讀取資料之後進行分析和預處理。所要用到的python 庫有pandas,nump...

經典案例 鐵達尼號

import pandas as pd import graphviz 1.讀取資料,獲取特徵值 data pd.read excel r tietan.xls print data 2.pclass,age,feature data.loc pclass age print feature.inf...

貝葉斯網路分析kaggle鐵達尼號資料

主要是讓參賽選手根據訓練集中的乘客資料和存活情況進行建模,進而使用模型 測試集中的乘客是否會存活。乘客特徵總共有11個,以下列出。當然也可以根據情況自己生成新特徵,這就是特徵工程 feature engineering 要做的事情了。passengerid 乘客id pclass 客艙等級 1 2 ...