泰坦尼克號
- 前言
- 1 導入包
- 2 加載併合並數據
- 3 查看數據
- 4 處理數據
- 4.1 刪除Cabin => 客艙、Ticket => 船票信息、PassengerId => 乘客ID
- 4.2 處理Age => 年齡的缺失值
- 4.3 接着,我們需要從年齡中提取一個特徵出來,即:孩子。尊老愛幼
- 4.4 處理Embarked => 登船港口的缺失值
- 4.5 填補Fare => 票價 缺失值
- 4.6 Pclass => 乘客等級(1/2/3等艙位)
- 4.7 老規矩,首先看看Sex與Survived的關係:
- 4.8 Name(姓名),Parch(父母/孩子的數量),SibSp(配偶的數量):
- 4.9 對Embarked進行變量轉換
- 4.10 再觀察一下數據,看看還有那些特徵可以用到,整理出三個新特徵:稱謂、家庭大小、姓。
- 5 提取模型需要的數據
- 6 對數據進行標準化、降維等操作
- 7 可視化研究不同特徵的影響
- 8 刪去影響較小的特徵--Q
- 9 網格搜索最優參數
- 10 模型構建
- 11 驗證結果
- 12 實驗報告和源代碼下載地址
前言
泰坦尼克號的沉沒是歷史上最臭名昭著的海難之一。
1912年4月15日,在她的處女航中,被普遍認爲“沉沒”的RMS泰坦尼克號與冰山相撞後沉沒。不幸的是,船上沒有足夠的救生艇供所有人使用,導致2224名乘客和機組人員中的1502人死亡。
儘管倖存有一些運氣,但似乎有些人比其他人更有可能生存。
在這一挑戰中,我們要求您建立一個預測模型來回答以下問題:“什麼樣的人更有可能生存?” 使用乘客數據(即姓名,年齡,性別,社會經濟階層等)
競賽地址:https://www.kaggle.com/c/titanic
文末有源代碼、實驗報告以及該代碼需要的數據(train.csv和test.csv)
作者:東北大學軟件工程1704張志浩
1 導入包
2 加載併合並數據
3 查看數據
我們知道了總的數據一共有1309行,也知道了每個特徵的數據類型,很多數據都出現了缺失,總結一下:
1、Age缺失 263個,不算多,處理數據
2、Survived缺失418個,不用處理,因爲test.csv中的數據本來就是沒有Survived的。
3、Cabin缺失1014個,缺失太多,丟棄這個特徵
4、Fare缺失1個
5、Embarked缺失2個
4 處理數據
在數據中出現缺失或者錯誤的Value是很正常的事,一些預測模型可以很好的處理缺失數據,如神經網絡(neural networks),有些則需要單獨處理他們。但是我們使用的隨機森林(Random Forest)來做預測模型,隨機森林(自身並不能對付缺失數據,所以我們需要對缺失值單獨進行處理。
4.1 刪除Cabin => 客艙、Ticket => 船票信息、PassengerId => 乘客ID
4.2 處理Age => 年齡的缺失值
4.2.1 平均值來填充
Age(年齡)有263個缺失項,就簡單地用平均值來填充,並看看填充前後的直方圖:
4.2.2 隨機選取平均值加減標準差範圍的數來填充
4.3 接着,我們需要從年齡中提取一個特徵出來,即:孩子。尊老愛幼
4.4 處理Embarked => 登船港口的缺失值
4.5 填補Fare => 票價 缺失值
Fare(票價)只有1個缺失項,直接用平均值填充:
可以看出票價集中在10左右,倖存的人的票價平均在48。
4.6 Pclass => 乘客等級(1/2/3等艙位)
可視化
得到Pclass與Survived的關係,可以看出Pclass爲3的生存率很低,我們試試把它的Dummy Variables去掉:
4.7 老規矩,首先看看Sex與Survived的關係:
4.8 Name(姓名),Parch(父母/孩子的數量),SibSp(配偶的數量):
4.9 對Embarked進行變量轉換
4.10 再觀察一下數據,看看還有那些特徵可以用到,整理出三個新特徵:稱謂、家庭大小、姓。
4.10.1 處理姓
4.10.2 處理稱謂
4.10.3 處理家庭大小
5 提取模型需要的數據
6 對數據進行標準化、降維等操作
我只使用了離差標準化,其他的沒有離差標準化準確率高,註釋掉的代碼是我沒有使用的方法
6.1 離差標準化
6.2 標準差標準化數據
6.3 對特徵進行二值化處理
6.4 對定性特徵進行獨熱編碼處理
6.5 PCA降維
7 可視化研究不同特徵的影響
從圖中可以看出Q影響較小,刪去
8 刪去影響較小的特徵–Q
9 網格搜索最優參數
我得到n_estimators=26,max_depth=6,最優
10 模型構建
我試了幾乎所以的模型,但是隻有隨機森林的準確率最高,可能我處理得到的數和這個模型比較匹配
10.1 隨機森林