1. 程式人生 > >kaggle入門項目:Titanic存亡預測(二)數據處理

kaggle入門項目:Titanic存亡預測(二)數據處理

理解 ima 簡單 標識符 數據處理 let ger 好的 元素

原kaggle比賽地址:https://www.kaggle.com/c/titanic

原kernel地址:A Data Science Framework: To Achieve 99% Accuracy

問題處理之前要知道的事:

數據科學框架(A Data Science Framework)

1.定義問題(Define the Problem):

問題→需求→方法→設計→技術,這是剛開始拿到問題的解決流程,所以在我們用一些fancy的技巧和算法解決問題之前,必須要明確我們需要解決的問題到底是什麽

2.獲取數據:

從dirty data轉換到clean data 的方法。

3.數據處理準備(Prepare Data for Consumption):

不太清楚如何準確的翻譯Prepare Data for Consumption,但是根據此kernel的解釋。就是數據整理,簡單的說就是把“野生”數據轉換成“被馴服”的數據,將數據整理成適合存儲和處理的數據架構,輸的提取、數據清理、處理異常、缺失、離群的數據點。

4:探索性數據分析(Perform Exploratory Analysi):

GIGO,減少無意義的輸入才能提升輸出的質量,所以使用圖表、數據顯示等可視化方法才能發現潛在的問題與feature、feature 之前的關聯度。同樣,數據分類也利於理解選擇合適的數據模型。

5:數據建模(Model Data):

知道如何針對該問題選取合適的工具(tool),差的模型導致差的結論,毋庸置疑。

6:驗證與實現數據模型(Validate and Implement Data Model):

這一步確保沒有過擬合(overfit)——訓練集上性能出眾,測試集上抓瞎。

7:優化與策略(Optimize and Strategize):

通過叠代提升性能。

接下來就通過這七步來逐一分析Titanic號問題。

Step 1:Define the Problem

Titanic號的悲劇發生於1912年4月15日,2224名乘客中死亡1502人,舉世震驚。我們的這次的問題就是通過Titanic的乘客信息來預測該乘客的生還可能。

知識點:二元分類問題,Pyhton或R語言(該kernel使用Pyhton)

Step 2:Gather the Data

https://www.kaggle.com/c/titanic/data (Titanic數據集下載)

Step 3:Prepare Data for Consumption

3.11 Load Data Modelling Libraies

數據清理,所需Python包已包含在kernel中

需要註意的是作者使用的是python3,在之前的學習中我使用的Pyhton2.7,因此我卸載了所有的python環境與老版本的各種包,直接下載了anaconda3.6版本一步到位。在這裏還是推薦大家使用python3進行數據分析,他比python2更規範,更先進。

3.2 Meet and Great Data

通過數據集feature的名字與解釋來了解具體屬性,通過info()和sample()函數獲取feature信息,需要註意的有以下幾點:

1.Survived列是需要輸出的,二元變量,1代表存活,0代表死亡。其他features是為了學習與預測提供的。註意:features多並不一定是好事,選擇合適的features才重要。

2.PassengerID與Ticket列是隨機的唯一標識符,對預測沒有貢獻,直接除去。

3.Pclass是倉位等級,貢獻較大我們將其以1,2,3代替。

4.Name列看上去沒什麽用處,其實我們可以通過名字的title確定性別、家庭規模、及其社會地位。

5.Sex和Embarked可以轉換為dummy variables——虛擬變量,便於模型構造

6.Age和Fare,連續變量。

7.SibSp代指兄弟姐妹同船人數,Parch代指父母同船人數,這兩個屬性可以巧妙的合成家庭大小,對預測很有幫助。

8.Cabin列的缺失實在是太多了,這種情況我們直接刪除之。

技術分享圖片

我們發現數據的缺失並不算多,但是為了模型訓練,我們必須進行缺失數據處理,隨後討論。

3.21 The 4 C‘s of Data Cleaning: Correcting, Completing, Creating, and Converting

數據清理的4C要義:

1.Correcting 準確性:簡單的例子,如果Age裏本應該是80卻錯標成800,這就出現了incorrect。

2.Completing完整性:有些算法沒法處理丟失信息,所以當然要進行丟失數據處理啦。

兩種常用方法:要麽刪除要麽填充,不建議刪除,因為很多feature含有大量信息,簡單刪除後肯定會產生bias。填充的話一邊使用均值、中位數或者均值+隨機化標準偏差。

3.Creating創造性:用現有數據產生新數據集,用我一個師兄的話就是靠腦洞!當然這是比較調侃的說法,有很多creat feature的方法可以參考,作為初學者我也並未深入學習,待到以後有所心得了再來分享。

4.Converting數據轉換:用此kernel 的話說是數據格式化,因為分類的數據並不適合算法計算,因此我們引入dummy variables,於此相關的還有One-hot編碼。

3.22 Clean Data

作者使用了pandas 的fillna()方法對數據集中的空值進行填充:

對於連續變量,例如Age、Fare使用中位數進行填充median(),至於為什麽不使用平均數進行填充是因為有很多離群點會對數據造成幹擾,中位數更能代表大多數數據的中指,這會在後來的數據可視化分析上體現。

對於分類型變量例如Embarked,使用眾數進行填充mode()[0],畢竟當我們不知道某一row屬於何種類別的時候將其歸類為概率較高的類別是合理的。

接著使用

dataset[‘FamilySize‘] = dataset [‘SibSp‘] + dataset[‘Parch‘] + 1

構造了家庭大小數屬性。

添加IsAlone屬性標識是否一人登船。

從Name屬性中提取Title,因為我們發現所有的名字幾乎都含有title,就是Mr、Miss等稱呼

技術分享圖片

因此我們提取(,)與(.)之間的元素,構成Title屬性,該屬性隱藏著性別與社會地位等信息。

我們構建FareBin和AgeBin將船票價格和年齡分成幾個不同的等級,使得連續數據集更好的適應算法。這裏用到了pandas的qcut()和cut()函數。

3.23 Convert Formats

將分類的變量轉換為dummy variables,所謂dummy變量就是用0或1來表示該屬性是否出現,我們可以發現處理後的data1_dummy出現了Embarked_C、Embarked_Q、Embarked_S等等dummy變量,應該很好理解了。

3.24 Da-Double Check Cleaned Data

再次確認數據處理結果,cleaning Done!

技術分享圖片

未完待續~

kaggle入門項目:Titanic存亡預測(二)數據處理