本文以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=1
,fare
較大)倖存比例較大,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 ...