Python机器学习及实践——实战篇:泰坦尼克号罹难乘客预测


项目背景:

泰坦尼克号是一艘奥林匹克级邮轮,于1912年4月处女航时撞上冰山后沉没。泰坦尼克号由位于爱尔兰岛贝尔法斯特的哈兰德与沃尔夫造船厂兴建,是当时最大的客运轮船。在它的处女航中,泰坦尼克号从英国南安普敦出发,途经法国瑟堡-奥克特维尔以及爱尔兰昆士敦,计划中的目的地为美国纽约。1912年4月14日,船上时间夜里11时40分,泰坦尼克号撞上冰山;4月15日凌晨2时20分,船裂成两半后沉入大西洋。泰坦尼克号海难为和平时期死伤人数最惨重的海难之一。船上1500多人丧生。

提出问题

预测泰坦尼克号乘客的生存情况

数据集

下载test.csv和train.csv。

说明:test.csv是训练数据集;train.csv是测试数据集。

数据理解

先读取数据集。

import pandas as pd# 读取训练集和测试集
train = pd.read_csv('./train.csv')
test = pd.read_csv('./test.csv')
# 输出数据集的基本信息
print(train.info())
print(test.info())

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId    891 non-null int64
Survived       891 non-null int64
Pclass         891 non-null int64
Name           891 non-null object
Sex            891 non-null object
Age            714 non-null float64
SibSp          891 non-null int64
Parch          891 non-null int64
Ticket         891 non-null object
Fare           891 non-null float64
Cabin          204 non-null object
Embarked       889 non-null object
dtypes: float64(2), int64(5), object(5)
memory usage: 83.6+ KB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 418 entries, 0 to 417
Data columns (total 11 columns):
PassengerId    418 non-null int64
Pclass         418 non-null int64
Name           418 non-null object
Sex            418 non-null object
Age            332 non-null float64
SibSp          418 non-null int64
Parch          418 non-null int64
Ticket         418 non-null object
Fare           417 non-null float64
Cabin          91 non-null object
Embarked       418 non-null object
dtypes: float64(2), int64(4), object(5)
memory usage: 36.0+ KB
None

训练数据集有12个字段,891条数据,训练集比测试数据集多一个Survived字段。测试数据集有11个字段,418条数据。

训练数据集的Age,Cabin,Embarked有数据缺失。测试数据集的Age,Fare,Cabin有数据缺失。

字段说明如下表:

数据处理

Fare的缺失值处理

X_test['Fare'].fillna(X_test['Fare'].mean(), inplace=True)

Age的缺失值处理

# 而对于Age这种数据类型的特征,使用求平均值或者中位数来填充缺失值
X_train['Age'].fillna(X_train['Age'].mean(), inplace=True)
X_test['Age'].fillna(X_test['Age'].mean(), inplace=True)

Embarked的缺失值处理

# 对于Embarded这种类型的特征,使用出现频率最高的特征值来填充,这也是相对可以减少引入误差的一种填充方法
X_train['Embarked'].fillna('S', inplace=True)
X_test['Embarked'].fillna('S', inplace=True)

完整代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File  : Titanic.py
@Author: Xinzhe.Pang
@Date  : 2019/7/27 16:02
@Desc  :
"""
import pandas as pd
# 采用DictVectorizer对特征向量化
from sklearn.feature_extraction import DictVectorizer
# 导入RandomForestClassifier
from sklearn.ensemble import RandomForestClassifier
# 从xgboost导入XGBClassifier用于处理分类预测问题
from xgboost import XGBClassifier
# 导入交叉验证包
from sklearn.model_selection import cross_val_score
# 使用并行网格搜索的方式寻找更好的超参数组合,以期待进一步提高XGBClassifier的预测性能
from sklearn.model_selection import GridSearchCV# 读取训练集和测试集
train = pd.read_csv('./train.csv')
test = pd.read_csv('./test.csv')
# 输出数据集的基本信息
print(train.info())
print(test.info())# 人工选取对预测有效的特征
selected_features = ['Pclass', 'Sex', 'Age', 'Embarked', 'SibSp', 'Parch', 'Fare']X_train = train[selected_features]
X_test = test[selected_features]
y_train = train['Survived']# 通过对数据的观察,得知Embarked特征存在缺失值
print(X_train['Embarked'].value_counts())
print(X_test['Embarked'].value_counts())X_test['Fare'].fillna(X_test['Fare'].mean(), inplace=True)
# 对于Embarded这种类型的特征,使用出现频率最高的特征值来填充,这也是相对可以减少引入误差的一种填充方法
X_train['Embarked'].fillna('S', inplace=True)
X_test['Embarked'].fillna('S', inplace=True)# 而对于Age这种数据类型的特征,使用求平均值或者中位数来填充缺失值
X_train['Age'].fillna(X_train['Age'].mean(), inplace=True)
X_test['Age'].fillna(X_test['Age'].mean(), inplace=True)# 重新检查处理后的数据集
print(X_train.info())
print(X_test.info())
if __name__ == '__main__':# 特征向量化dict_vec = DictVectorizer(sparse=False)X_train = dict_vec.fit_transform(X_train.to_dict(orient='record'))print(dict_vec.feature_names_)X_test = dict_vec.transform(X_test.to_dict(orient='record'))# 使用默认配置初始化RandomForestClassifierrfc = RandomForestClassifier()# 使用默认配置初始化XGBClassifier()xgbc = XGBClassifier()# 使用5折交叉验证的方法在训练集上分布对默认配置的RandomForestClassifier以及XGBClassifier进行性能评估,并获得平均分类准确性的得分cross_val_score(rfc, X_train, y_train, cv=5).mean()cross_val_score(xgbc, X_train, y_train, cv=5).mean()# 使用默认配置的RandomForestClassifier进行预测操作rfc.fit(X_train, y_train)rfc_y_pred = rfc.predict(X_test)rfc_submission = pd.DataFrame({'PassengerId': test['PassengerId'], 'Survived': rfc_y_pred})# 将默认配置的RFC对预测数据的预测结果存储到文件rfc_submission.csv中rfc_submission.to_csv("./rfc_submission.csv", index=False)# 使用默认配置的XGBClassifier进行预测操作xgbc.fit(X_train, y_train)xgbc_y_pred = xgbc.predict(X_test)# 将默认配置的XGBClassifier对测试数据的预测结果存储文件xgbc_submission.csv中xgbc_submission = pd.DataFrame({'PassengerId': test['PassengerId'], 'Survived': xgbc_y_pred})xgbc_submission.to_csv('./xgbc_submission.csv', index=False)params = {'max_depth': range(2, 7), 'n_estimators': range(100, 1100, 200),'learning_rate': [0.05, 0.1, 0.25, 0.5, 1.0]}xgbc_best = XGBClassifier()gs = GridSearchCV(xgbc_best, params, n_jobs=-1, cv=5, verbose=1)gs.fit(X_train, y_train)# 查验优化之后的XGBClassifier的超参数配置以及交叉验证的准确性print(gs.best_score_)print(gs.best_params_)# 使用经过优化的超参数配置的XGBClassifier对测试数据的预测结果存储在文件xgbc_best_submission.csv中xgbc_best_y_pred = gs.predict(X_test)xgbc_best_submission = pd.DataFrame({'PassengerId': test['PassengerId'], 'Survived': xgbc_best_y_pred})xgbc_best_submission.to_csv('./xgbc_best_submission.csv', index=False)

【Python机器学习及实践】实战篇:泰坦尼克号罹难乘客预测相关推荐

  1. Python机器学习与实践——简介篇

    周四晚上胡哥给大家简单培训了一下nlp的一些算法,感觉受益匪浅.回去之后反省了一下,有段时间没看机器学习的东西了,nlp要抓,机器学习也要学.开个坑,记录和分享一下学习内容(书籍为<python ...

  2. 《Python机器学习及实践》----良/恶性乳腺癌肿瘤预测

    本片博客是根据<Python机器学习及实践>一书中的实例,所有代码均在本地编译通过.数据为从该书指定的百度网盘上下载的. 代码片段: import pandas as pd import ...

  3. Python机器学习及实践——简介篇3(逻辑回归)

    前面两篇都是介绍性的文字,这篇详细介绍完整的"良/恶性乳腺癌肿瘤预测"问题的Python源代码. 根据前两篇的描述,大家可以确定"良/恶性乳腺癌肿瘤预测"的问题 ...

  4. Python机器学习及实践——基础篇9(SVM回归)

    小贴士:核函数是一项非常有用的特征映射技巧,同时在数学描述上也略为复杂.因此这里不做过度引申.简单一些理解,便是通过某种函数计算,将原有的特征映射到更高维度的空间,从而尽可能达到新的高维度特征线性可分 ...

  5. 【Python机器学习及实践】进阶篇:模型实用技巧(特征提升)

    Python机器学习及实践--进阶篇:模型实用技巧(特征提升) 所谓特征抽取,就是逐条将原始数据转化为特征向量的形式,这个过程同时涉及对数据特征的量化表示:而特征筛选则进一步,在高维度.已量化的特征向 ...

  6. Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...

  7. Python机器学习经典案例实战-韦玮-专题视频课程

    Python机器学习经典案例实战-3710人已学习 课程介绍         Python在机器学习领域应用是非常广泛的,比如,我们可以使用机器学习进行验证码识别,使用机器学习实现计算机视觉项目,或者 ...

  8. python机器学习及实践_Python机器学习及实践

    Python机器学习及实践/Chapter_1/.ipynb_checkpoints/Chapter_1.1-checkpoint.ipynb Python机器学习及实践/Chapter_1/.ipy ...

  9. Python和Java结合的项目实战_[项目实战] Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 [...

    资源介绍 课程简介:xa0xa0 Python高级教程项目实战篇 Python和Java结合的项目实战 视频教程 教学视频 ----------------------课程目录 Python项目实战篇 ...

  10. python机器学习及实践_机器学习入门之《Python机器学习及实践:从零开始通往Kaggle竞赛之路》...

    本文主要向大家介绍了机器学习入门之<Python机器学习及实践:从零开始通往Kaggle竞赛之路>,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. <Python 机 ...

最新文章

  1. ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler)
  2. linux centos7清除系统日志、历史记录、登录信息
  3. 【问题收集·知识储备】Xcode只能选择My Mac,不能选择模拟器如何解决?
  4. netbean java_netbean 生成 Java 桌面数据库应用程序
  5. 企业微信消息推送脚本
  6. 使用 Love2D 开发游戏
  7. 流控大师 panabit
  8. 在vscode中配置LeetCode插件,从此愉快地刷题
  9. 【驻油点】一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升。显然卡车一次是过不了沙漠的。因此司机必须设法在沿途建立几个贮油点,使卡车能顺利穿越沙漠,试问司机如何建
  10. 为chrome浏览器单独设置代理服务器
  11. HashMap底层扩容机制是2倍的原理
  12. Spark程序使用Scala进行单元测试
  13. [PATCH] ARM: add dtbImage.dt and dtbuImage.dt rules
  14. Mendix for Manufacturing Industries指南
  15. pes2020服务器维护中,【重磅】PES2021删卡时刻/传奇及国际服补偿一览
  16. ABAP:增强篇-CJ20N屏幕增强
  17. LeetCode买卖股票之一:基本套路(122)
  18. 为什么visio输出图片俩边有留白_解决LaTex中插入Visio画图有多余边框的问题
  19. 智慧职教云Java题库_智慧职教云课堂APPJava程序设计试题及答案
  20. 口腔APP开发具有什么好处

热门文章

  1. 我再copy回来。中海真是有心人。只是,你们在哪里?
  2. mysql释放所有_mysql表空间释放情况汇总
  3. list去重和list倒叙
  4. oracle导入blob出错,oracle导出blob,clob出错的问题
  5. 【帧率倍频】基于FPGA的视频帧率倍频系统verilog开发实现
  6. 输入今天日期输出明天日期
  7. 家用千兆路由器排行榜前十名_家用路由器排名前十名
  8. 不谋一时不足以谋一域_不谋万世者不足谋一时,不谋全局者不足谋一域是什么意思...
  9. mysql的分页——limit、offset
  10. el-form的model、prop属性和表单校验等详解