泰坦尼克号生还者预测
1912年4月15日,在首次航行期间,泰坦尼克号撞上冰山后沉没,2224名乘客和机组人员中有1502人遇难。这场悲剧轰动了国际社会。沉船导致遇难的原因之一是没有足够的救生艇给乘客和船员。虽然在这场灾难中幸存下来有一些运气在里面,但一些人比其他人更有可能幸存,比如妇女,儿童和上层阶级。
1.数据描述
survival - 是否幸存(0=幸存,1=遇难)
pclass - 船票类型(1=一等票,2=二等票,3=三等票)
sex - 性别
age - 年龄
sibsp - 泰坦尼克号上该人员兄弟姐妹的数量
parch - 泰坦尼克好上该人员父母或者子女的数量
ticket - 船票编号
fare - 乘客票价
cabin - 客舱号码
embarked - 起航运港(C = Cherbourg, Q = Queenstown, S = Southampton)
boat - 救生艇的编号(如果幸存)
body - 人体编号(如果遇难并且尸体被找到)
home.dest - 出发地到目的地
2.数据分析
2.1 幸存率分析
计算显示只有38%左右的乘客幸存下来,这次惨剧发生的原因是泰坦尼克号上并未携带足够的救生艇,只有20艘,这对于1317名乘客和885名机组人员来说还远远不够。
2.1 阶级地位分析
我们可以看出来头等舱对乘客有62%的生还几率,相比之下三等舱对乘客只有25.5%的生还概率,此外客舱越豪华,乘客的年纪也就越大,同时一等票票价明显高于二三等票。
2.2 阶级和性别分析
从上面的分析中可以看出来,在惨剧发生的时候大家倾向于首先疏散妇女和儿童。在所有的阶层中,女性比男性更有可能生存下来。
由上图分析可以看出来,在惨剧发生的时候儿童存活的可能性相对来说还是极高的。
3.数据处理
在构建机器学习模型前我们需要删除填充缺失值并且将数据集分为训练集和测试集。
3.1 缺失值处理
3.1.1 按列删除缺失数据
由于boat、cabin、body缺失比较严重,且对后续分析不能提供足够信息,所以删除掉boat、cabin、body这三个字段
3.1.2 按行删除缺失数据
因为年龄对于乘客能不能生还会产生较大的影响,所以我们选择删除年龄字段缺失的那部分数据。
3.2 编码转换
sex和embarked都是与类别(比如sex有两种值,male和female)对应的字符串值,因此通过LabelEncoder我们可以将类别字符串分别转换数值数据,比如将“male”和“female”转换成0和1。name、ticket、home.dest字段无法做编码转换成数值数据,所以我们从数据集中删除掉它们。
4 机器学习
4.1 机器学习简单预测
4.2 K折交叉验证
数据集选择的不同也会导致预测结果的不同。上述的决策树模型的平均预测准确率为79.61%,根据数据的不同可以有2%左右的浮动变化。
4.3 特征选择
我们还可以使用随机森林算法来获取各个不同特征在最终结果预测中的权重
4.4 多模型效果比较
由上图比较,我们可以看出随机森林算法在当前数据预测中表现良好,最优值能达到86%以上
5 案例数据
5.1 案例数据集
链接:https://pan.baidu.com/s/1f4AIFes0yTW1ndQOyi-crg
提取码:1uey
5.2 完整代码
#!/usr/bin/env python
# coding: utf-8
# 导入python三方库函数import os
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')import random
import numpy as np
import pandas as pd
from sklearn import preprocessingdata_path='案例数据'
titanic_df = pd.read_excel(os.path.join(data_path,'titanic3.xls'),'titanic3',index_col=None,na_values=['NA'])
titanic_df.head()
titanic_df['survived'].mean()
titanic_df.groupby('pclass').mean()
class_sex_grouping = titanic_df.groupby(['pclass','sex']).mean()
class_sex_groupingclass_sex_grouping['survived'].plot.bar(figsize=(12,7),fontsize=12)
plt.xticks(rotation=45)group_by_age = pd.cut(titanic_df['age'],np.arange(0,90,10))
age_grouping = titanic_df.groupby(group_by_age).mean()
age_grouping['survived'].plot.bar(figsize=(12, 7),colors=['r','y','b'],fontsize=12)
plt.xticks(rotation=45)titanic_df.info()# axis = 1 按列删除
titanic_df = titanic_df.drop(['body','boat','cabin'],axis=1)
titanic_df['home.dest'] = titanic_df['home.dest'].fillna('NA')
titanic_df.head()
titanic_df = titanic_df.dropna()
titanic_df.info()def preprocess_titanic_df(df):preprocess_df = df.copy()le = preprocessing.LabelEncoder()preprocess_df.sex = le.fit_transform(preprocess_df.sex)preprocess_df.embarked = le.fit_transform(preprocess_df.embarked)preprocess_df = preprocess_df.drop(['name','ticket','home.dest'],axis=1)return preprocess_df
preprocess_df = preprocess_titanic_df(titanic_df)preprocess_df.head()# 机器学习简单预测
x = preprocess_df.drop(['survived'],axis=1).values
y = preprocess_df['survived'].values
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(x,y,test_size=0.2)np.random.seed(42)
# 决策树分类器
from sklearn.tree import DecisionTreeClassifier
clf_dt = DecisionTreeClassifier(max_depth = 5)
clf_dt.fit(X_train,y_train)
clf_dt.score(X_test,y_test)# 交叉验证衡量模型的表现能力from sklearn.model_selection import ShuffleSplit,cross_val_score
# 随机拆分数据
shuff_split = ShuffleSplit(n_splits=20,test_size=0.2,random_state=0)
def test_classifier_suf(clf): scores = cross_val_score(clf,x,y,cv=shuff_split)print ("Accuracy: %0.4f (+/- %0.2f)" % (scores.mean(), scores.std()))return scores
clf_dt_scores = test_classifier_suf(clf_dt)# 随机森林
# from sklearn.feature_selection import SelectFromModel
np.random.seed(42)
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier(n_estimators=50)
clf_rf_scores = test_classifier_suf(clf)np.random.seed(42)
from sklearn.ensemble import GradientBoostingClassifier
# from sklearn.feature_selection import SelectFromModel
clf = GradientBoostingClassifier(n_estimators=50)
clf_grad_scores = test_classifier_suf(clf)# 随机森林
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
np.random.seed(42)
clf = RandomForestClassifier(n_estimators=50)
clf = clf.fit(X_train,y_train)
test_classifier_suf(clf)features = pd.DataFrame()
features["feature"] = ["pclass","sex","age","sibsp","parch","fare","embarked"]
features["importance"] = clf.feature_importances_
features.sort_values(by=["importance"],ascending=True,inplace=True)
features.set_index('feature',inplace=True)
features.plot(kind="barh",figsize=(12,7),fontsize=12)
plt.show()x = np.linspace(0,1,20)
plt.figure(figsize=(12,7)) #类似于先声明一张图片,这个figure后面所有的设置都是在这张图片上操作的
plt.plot(x,clf_dt_scores,label="DecisionTreeClassifier") #制图
plt.plot(x,clf_grad_scores,color='r',linestyle='--',label="GradientBoostingClassifier") #设置函数线的颜色和线的样式
plt.plot(x,clf_rf_scores,color='y',linestyle='--',label="RandomForestClassifier") #设置函数线的颜色和线的样式
plt.legend(loc="upper right")
plt.grid()
plt.show()
泰坦尼克号生还者预测相关推荐
- 【数据分析师-数据分析项目案例二】泰坦尼克号生还者预测案例
泰坦尼克号生还者预测案例 1 数据 1.1 数据下载 1.2 数据字段介绍 2 数据加载和基本的ETL 2.1 模块导入和数据加载 2.2 数据清洗 2.2.1 缺失值处理 2.2.2 分类数据独热编 ...
- 泰坦尼克号生还者预测机器学习二分类算法+LSTM+GRU ()
源数据包 链接:https://pan.baidu.com/s/1jVqX-WUkwSWZA0J3b-DnFg 提取码:1111 复制这段内容后打开百度网盘手机App,操作更方便哦 import ...
- 案例:使用seaborn分析泰坦尼克号生还者数据
目录 一.数据来源(数据的导入) 二.主要分析的内容(定义问题) 泰坦尼克号乘客基本信息分布情况?? 乘客的信息与生还数据是否有关联?? 三.数据清洗 3.1 查看是否有缺失值 3.2 查看数据基本信 ...
- Kaggle经典数据分析项目:泰坦尼克号生存预测!
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:陈锴,中山大学,Datawhale成员 最近有很多读者留言,希望能 ...
- 泰坦尼克号数据集_机器学习入门—泰坦尼克号生存率预测
项目名称:泰坦尼克号生存率预测1.导入数据 这里使用kaggle kernel编写代码 数据下载地址为:https://www.kaggle.com/c/titanic 2.数据统计分析 通过desc ...
- python泰坦尼克号数据预测_机器学习入门之Python机器学习:泰坦尼克号获救预测一...
本文主要向大家介绍了机器学习入门之Python机器学习:泰坦尼克号获救预测一,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. 一.项目概要 1.应用 模式识别.数据挖掘(核心).统计学 ...
- 决策树概述+模块介绍+重要参数(criterion+random_statesplitter+减枝参数+目标权重参数)+回归树(参数+实例+拟合正弦曲线)+泰坦尼克号生存者预测实例
文章目录 什么是sklearn 一.决策树概述 (一)概述 (二)基础概念 (三)决策树算法的核心是要解决两个问题: 二.模块sklearn.tree的使用 (一) 模块介绍 (二)使用介绍 三.重要 ...
- 决策树入门案例:泰坦尼克号幸存者预测
决策树 1 概述 1.1 决策树是如何工作的 1.2 分类树 DecisionTreeClassifier 1.3 回归树 DecisionTreeRegressor 1.4 案例练习 1. 用回归树 ...
- 机器学习-泰坦尼克号幸存者预测
机器学习-泰坦尼克号幸存者预测 泰坦尼克灾难数据描述 PassengerId:乘客的ID号,这个是顺序编号,用来唯一标识一名乘客.这个特征和幸存与否无关,我们不使用这个特征. Survived:1表示 ...
- 特征工程实践:泰坦尼克号幸存者预测
文章目录 泰坦尼克号幸存者预测 泰坦尼克号幸存者预测 数据集下载地址:https://www.kaggle.com/c/titanic/data . 本案例主要展示特征工程对数据集的处理方法,模型只选 ...
最新文章
- R语言可视化包ggplot2改变图例(legend)元素的大小实战:包含图例中标题字体、文本字体、标识模块(key)的大小
- 浅谈管理软件开发类项目是怎么来的,怎么接到项目的,欢迎大家补充
- 小米手机60帧录屏_专业录屏工具,你们一定要收下
- Vagrant挂载目录失败mount: unknown filesystem type ‘vboxsf’
- 多线程 流水线 java_Java Lock锁多线程中实现流水线任务
- 力扣645.错误的集合
- DB2查询主键、索引、表约束
- CSS如何让图片垂直并水平居中等比缩放?
- 【一分钟知识】梯度下降与牛顿法对比
- sqlserver数据库修复
- 规则引擎drools教程一
- Android模仿通讯录
- 双向链表的插入及删除图解
- WordPress丸子小程序从零到一搭建小程序[小程序配置]
- Required Remainder
- 百度AICA迎来毕业季,55位新晋“首席AI架构师”推进产业智能化
- 谷歌浏览器Chrome错误代码:ERR_CONNECTION_ABORTED
- 闲鱼转转系统源码+支持跳转APP
- 极其简单的Python爬虫音乐
- 基于pytorch的MNIST数据集的四层CNN,测试准确率99.77%
热门文章
- 解决最新小马激活工具导致主页劫持问题
- python贪吃蛇游戏设计_利用python实现简易版的贪吃蛇游戏(面向python小白)
- linux--磁盘配额
- Oracle官网 账号及密码
- h5广告与html5,什么是H5广告?
- 0基础自学鸿蒙-Day_002 HelloWorld
- 富贵电玩 富贵旺旺 富贵精华版 富贵3 后门 格机问题研究
- 基于android的手机订票系统设计,基于Android的火车票预订系统的设计与实现.doc
- 新书《编程之道》介绍
- H5 HTML 移动端触摸拖拽drag drop 自定义拖拽样式 使用PointerEvent模拟的拖拽方案