泰坦尼克號生存預測(python)
阿新 • • 發佈:2018-08-31
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)