1. 程式人生 > >泰坦尼克號生存預測(python)

泰坦尼克號生存預測(python)

scores k近鄰 ace gbdt dom png 記錄 inline sse

1 數據探索

對數據進行一個整體的理解

1.1 查看數據都有一些什麽特征

import pandas as pd
import seaborn as sns
%matplotlib inline
titanic = pd.read_csv(G:\\titanic\\train.csv)
titanic.sample(10)

技術分享圖片

獲取數據的10行記錄進行觀察,初步了解數據的組成,可以看到Age、Cabin裏面是存在缺失值的,在進一步理解數據的統計量後再進行數據處理,觀察各特征的最大最小值等,可以發現這些數據比較合理,不存在特別的異常值。

print(titanic.describe())
#查看常用的統計量

技術分享圖片

2 數據分析\處理

Name和Ticket依據基本認知來看,與乘客是否有機會存活相關不大,因此暫時不理會這兩個特征。由於Cabin這一個特征缺失值比較多,參考價值低,因此同樣暫時擱置。

2.1 Sex特征處理

Sex分為female和male,但是一些算法模型只能識別數字,所以將他們分別用0和1表示

titanic.Sex = titanic.Sex.replace("male",1)
titanic.Sex = titanic.Sex.replace("female",0)

2.2 Age特征處理

Age這裏存在缺失值,有年紀記錄的有714行,這裏使用age的平均數來進行填充缺失值

titanic.Age = titanic["Age"].fillna(titanic.Age.mean())

2.3 Embarked特征處理

將Embarked的S C Q分別替換為0 1 2

titanic.Embarked = titanic.Embarked.replace("S",0)
titanic.Embarked = titanic.Embarked.replace("C",1)
titanic.Embarked = titanic.Embarked.replace("Q",2)

查看Embarked特征統計量發現,他存在缺失值,這裏用眾數進行替換缺失值

titanic.Embarked = titanic["
Embarked"].fillna(0)

3 特征工程

通過熱力圖觀察各特征與Survived之間的相關性

info = ["Survived","PassengerId","Pclass","Sex","Age","SibSp","Parch","Fare","Embarked"]
sns.heatmap(titanic[info].corr(),annot =True,vmin = 0, vmax = 1)

技術分享圖片

根據熱力圖可以看出Pclass、Sex、Fare、Embarked與Survived相關性比較強,所以將這些特征代入機器學習模型中進行學習

4 模型學習/評估

import numpy as np
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
x = titanic[["Pclass","Sex","Age","Fare","Embarked"]]
y = titanic["Survived"]

這裏采用交叉檢驗的方法,最後取平均值來對模型進行評估

4.1 邏輯回歸

lm = linear_model.LogisticRegression()
scores = cross_val_score(lm,x,y,cv = 5,scoring = "accuracy")
print(np.mean(scores))

技術分享圖片

4.2 k近鄰

from sklearn import neighbors
knn = neighbors.KNeighborsClassifier(10,weights = "uniform")
scores = cross_val_score(knn,x,y,cv = 5,scoring = "accuracy")
print(np.mean(score)

技術分享圖片

4.3 決策樹

from sklearn import tree
dt = tree.DecisionTreeClassifier()
scores = cross_val_score(dt,x,y,cv = 5,scoring = "accuracy")
print(np.mean(scores))

技術分享圖片

4.4 隨機森林

from sklearn import ensemble
rf = ensemble.RandomForestClassifier(50)
scores = cross_val_score(rf,x,y,cv = 5,scoring = "accuracy")
print(np.mean(scores))

技術分享圖片

4.5 GBDT

gbdt = ensemble.GradientBoostingClassifier()
scores = cross_val_score(gbdt,x,y,cv = 5,scoring = "accuracy")
print(np.mean(scores))

技術分享圖片

5 總結

經過數據探索、數據處理、常用機器學習模型比較,最後可以發現GBDT在泰坦尼克號生存預測上面表現最好,準確率能達到82%以上。

泰坦尼克號生存預測(python)