Titanic说明文档

本文档详细介绍了使用机器学习预测泰坦尼克号乘客生存情况的实验,涉及数据观察、分析、预处理、特征工程和模型训练。通过特征如性别、社会等级、年龄等预测生存率,结果显示预测准确率为0.79904。
摘要由CSDN通过智能技术生成

Titanic: Machine Learning from Disaster说明文档

一、实验简介

1)概述:泰坦尼克号的沉没是历史上最为人熟知的海难事件之一。 1912 年 4 月 15 日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会,从而促进了船舶安全规定的完善。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管在沉船事件中幸存下有一些运气因素,但有些人比其他人更容易存活下来,比如女人,孩子和上流社会。在这个挑战中,要求完成哪些人可能存活下来的分析。特别的,要求运用机器学习工具来预测哪些乘客能够幸免于悲剧。

2)数据:训练集、测试集,均可从kaggle官网下载。

3)目标:利用训练集,筛选数据,选择适当模型,对测试集的数据进行预测,得到记录测试集中乘客的预测生存结果的相关文档。

二、观察数据

数据集包含train.csv及test.csv文件,其中train.csv钟包含891行,12列,共十个特征值。test.csv与train.csv类似,仅缺少目标列(Survived列)。train.scv数据集预览如图:在这里插入图片描述

三、数据分析

1、PassengerId:每个用户的、对应唯一身份的Id号。

2、Survived:代表其是否存活,作为数据的目标列,其值为0/1。

3、Pclass:共有三类值,分别代表旅客三种不同的社会等级,其值为1,2,3。

4、Name:提取出数据中出现的称谓并分类,将分类结果做数值化处理。

5、Sex:将其离散化(即数值化),女性标记为1,男性标记为0.

6、Age:年龄中含有部分缺失值,且数据非离散性。根据其年龄的分层分布,将其分为4个层次。0-12岁为0层,12-18岁为1层,18-65岁为2层,大于65岁为4层.

7、SibSp、Parch:代表着直系亲属与旁系亲属。处理数据时将两类亲属的人数合并,产生新列:family,其人数是预测生存率的指标之一。

8、Ticke:船票编号。

9、Fare:船票费包含一个缺失值,取数据集中有相同Pclass的票价平均数作为该缺失值的取值。由分析可知,船票费与生活率存在较大联系。

10、Cabin:含有大量缺失值。由于在该变量中,缺失值也可作为一个隐含的标记,故本次预测中无使用本列数据。

11、Embarked:上船地点,包含部分缺失值。采用的填补缺失值的方法是将缺失值定义为该列数据的众数。

四、关联数据

1、各个数据之间关系:

  • Pclass与性别分组中的生存率关系图:在这里插入图片描述

由图像分析可知,女性普遍比男性生存率高,且社会地位越高,生存率越高。

  • Embarked与生存率关系图:

[外链图片转存失败(img-GlbEbRZA-1565181223809)(C:\Users\hzt123\Desktop\暑假QG\Kaggle Titanic crew forecast\Embarked.png)]

由图像可知,在C(瑟堡)上船的人生存率更高。

  • SibSp、Parch与生存率关系图:

在这里插入图片描述
在这里插入图片描述

  • 性别与生存率的关系图:
    在这里插入图片描述
    由图可知,女性比男性的生存率更高。

  • Pclass、Sex分别与Age的关系关系图:

在这里插入图片描述

  • 不同年龄下生存率的关系图:

在这里插入图片描述

该图可知,年龄可细分成六各层次,但虽30-60岁年龄段的关系图有波动,但是波动幅度不大,故可将年龄大致划分成四个层次(详细划分见下文)。

  • 平均票价与生存率关系图:

在这里插入图片描述

分析可知,平均票价越高,生存率越高。

五、数据预处理

提取每个特征的价值,由于部分特征缺失值严重/对生存率影响不大,未被采用。经数次测试后,暂定以下特征作为训练集组成元素:

1、性别Sex:女性设为1,男性设为1。

# 将性别数值化,女性为1,男性为0
train_dt['Sex'] = train_dt['Sex'].map({
   'female': 1, 'male': 0}).astype(int)

2、社会等级Pclass:由于数据集中已将其值设置为1/2/3,已满足随机分类森林所需的离散型数据要求,故无需改动。

3、年龄Age:年龄变量中存在少量缺失值,数据类型为连续型。我的解决方法是以年龄变量有无缺失值为划分标准,分为以年龄为目标的训练集和测试集。在训练集中对年龄进行分层,分为儿童(0,12]、少年(12,18]、成年(18,65]和老年(65,inf)四个层次。再利用训练集,调用随机分类森林对测试集进行分类。实现如下

# 年龄的缺失值处理:分类
def deal_age(train,flag):
    # 儿童、少年、成年和老年
    train['Age'][(train.Age <= 12) & (train.Age.notnull())] = 0
    train['Age'][(train.Age <= 18) & (train.Age > 12) & (train.Age.notnull())] = 1
    train['Age'][(train.Age > 18) & (train.Age <= 65) & (train.Age.notnull())] = 2
    train['Age'][(train.Age > 65) & (train.Age.notnull())] = 3

    # 训练,以及测试。
    y = train[train.Age.notnull()].as_matrix()
    x_test = train[train.Age.isnull()].drop(['Age','Survived'], axis=1).as_matrix()
    if flag == 'T':
        rfc = RandomForestClassifier(random_state=
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值