天天看點

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

上次講了利用Python實作波士頓房價預測的回歸模型,這時小明一臉懵逼,心想回歸模型是什麼鬼??️?

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

(咳咳,敲黑闆~科普一下,在機器學習中,根據目标變量(因變量)是否是連續值可以分為回歸和分類兩種模型)本次就進行一個簡單的二分類模型介紹——泰坦尼克号乘客生存預測。

首先還是先導入接下來要用到的Python包

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

然後導入資料集,因為本次用到的資料集我已預儲存到本地電腦,直接讀取資料進來即可(資料集下載下傳連結https://www.kaggle.com/c/titanic/data),同樣先檢視訓練集資料長什麼樣

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

PassengerId 乘客編号 Survived 是否幸存 Pclass 船票等級 Name 乘客姓名 Sex 乘客性别 Age 乘客年齡 SibSp 兄弟姐妹/配偶數量 Parch 父母/子女數量 Ticket 船票号碼 Fare 船票價格 Cabin 船艙 Embarked 登入港口

因為Titanic這個資料集在下載下傳前已經分好了訓練集與測試集,我們一起來看下資料的整體情況以便後面做相應處理。

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

可以看到這次兩個資料集存在缺失值(腫麼辦,老shi我好方?)不用怕~可以看到訓練集是年齡和船艙兩個特征有缺失值,測試集是年齡、船艙和船票價格三個特征存在缺失值,均無異常值。

我們先把訓練集和測試集合并起來,友善後面一起做資料處理和特征工程

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

資料合并完畢,我們看下目标變量Survived資料分布情況,分析正負樣本平衡性

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

0 表示未獲救,1 表示獲救

可以看到正負樣本不是十分平衡,但在這裡問題也不大。然後我們再看下各特征資料分布情況,這裡隻顯示了數值型變量

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

看各特征相關性,這裡預設采用皮爾遜相關系數,分類變量的相關性這裡也沒顯示出來

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

接下來進行缺失值處理,首先對年齡Age進行缺失值填充,這裡我們暫時用所有乘客的年齡中位數去填充

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

登陸港口Embarked用衆數填充

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

而船票價格Fare一般來說與船票等級和登入港口有關,這裡我們暫時用按這兩者分組後的船票均值來填充

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

最後是船艙,因為前面我們看到這個特征缺失值占比50%以上,不好處理,是以這裡先不填充後面直接剔除處理(老shi你這是不是太簡單粗暴了一點~?是的!)

接下來是特征工程,首先我們簡單分析下各特征發現,SibSp兄弟姐妹/配偶數量與Parch父母/子女數量這兩個特征比較相近,可以合并得到一個新變量,即家庭成員數量,另外在西方一般可以根據姓名稱呼來判斷其社會地位高低,是以我們可以對Name姓名這個特征做一個簡單的分類處理,得到一個新特征替換原來特征,這樣可能對獲救乘客的影響比原來的特征強(老shi,你怎麼這麼機智又逗逼,讓我好嫉妒啊,哈哈~)

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

然後我們把沒有用的特征先剔除再對分類特征數值化後再喂到模型中去

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

到此資料預處理及特征工程已經簡單處理完畢,我們來看下處理後的資料情況

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

可以看到資料中已經沒有缺失值且各特征值均已實作數值化(這裡比個,王祖藍完美蘭花指,腦補?)接下來我們還是按照一開始的方式進行資料劃分,前面891條是訓練集,最後418條是測試集

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

終于到最雞凍的時刻啦?,我們把資料喂到邏輯回歸模型(雖然叫回歸,但其實是個分類模型,挂羊頭賣狗肉懂嗎?!)然後我們一起來看看最後的模型結果。

項目實戰二:利用Python實作Kaggle經典案例之泰坦尼克号乘客生存預測

0.96!可以說這個結果很不錯了!哈哈,有興趣可以一起來試下哦?