文档章节

用SPK技术分析,泰坦尼克号沉船之后哪些人活下来了

openfea
 openfea
发布于 2017/11/07 10:27
字数 1334
阅读 50
收藏 0

本文采用Kaggle中比较知名的数据集Titanic Machine Learning from Disaster作为分析数据源,该数据集被评为五大最适合数据分析练手项目之一。

分析目的是根据训练集预测部分乘客在沉船事件中是否会存活?

数据分析的整个流程如下:
    (1)数据清洗
    (2)特征工程
    (3)缺失值
    (4)模型设计与预测

1. 数据的下载和字段的描述

数据的下载地址为https://www.kaggle.com/c/titanic/data 

目前,我们已经对变量,变量类型及其前几个取值情况有了初步的了解。

我们知道: 我们的目标是要预测生存情况(Survived)——因变量可供使用的自变量11个。

2. 使用的分析工具介绍

我们使用的工具是FEA-spk技术,它的底层基于最流行的大数据开发框架spark,对各种算子的操作都是基于DataFrame的。使用FEA-spk来做交互分析,不但非常简单易懂而且几乎和spark的功能一样强大,更重要的一点,它可以实现可视化,处理的数据规模更大,可以进行分布式的机器学习等,下面我们就来实现这个案例。

3. 案例的具体实现原语如下

(1) 加载数据

训练集的数据格式如上图所示

(2)清洗数据

 a. 观察姓名变量

首先,我注意到在乘客名字(Name)中,有一个非常显著的特点:乘客头衔每个名字当中都包含了具体的称谓或者说是头衔,比如Mrs,Mr等。将这部分信息提取出来后可以作为非常有用一个新变量,可以帮助我们预测。

下面我们统计一下Title各个类别的个数。

下面我们将字符串映射为对应索引。

b.家庭情况是否会影响生存结果?

目前为止,我们已经处理完乘客姓名这一变量,并从其中提取了一些新的变量。 下一步考虑衍生一些家庭相关的变量。首先,生成家庭人数family_size这一变量。可以基于已有变量SubSp和Parch(具体含义参照上面)。

family_size=SubSp+Parch+1(包括自己)。

缺失值

————————————————————————————————————————————

现在我们开始对原始数据当中的缺失值进行处理(填补)。具体做法有很多种,考虑到数据集本身较小,样本数也不多,因而不能直接整行或者整列删除缺失值样本。那么只能通过现有数据和变量对缺失值进行预估填补。例如:可以用均值中位数模型填补缺失值,这里使用后面两种方式进行。

首先查看一下哪些字段有缺失值。

可以看到Age字段,Embarked字段有缺失值, Cabin字段虽然有缺失值,但是缺失值太多了,所以这个变量不考虑。Age字段为数值型,可以使用平均值进行填充,Embarked字段为字符型,选择频率最大的字符进行填充。

可以看到出现次数最多的字符是S。

可以看到没有缺失值了。

特征工程

—————————————————————————————————————————————

由于机器学习只支持数字类型,所以我们要将字符型的数据转化为数字类型的。

首先对于Sex字段,只有male,female两种类型,要将它转化为数字类型。

Embarked字段,同样要将字符型的数据转化为数字类型的,然后将其映射为独热编码。

然后删除不需要的列。

 

由于Spark机器学习需要的数据类型为double类型,所以我们将字符类型的转化为double类型。

模型设定与预测

———————————————————————————————————————————

在完成上面的工作之后,我们进入到最后一步:预测泰坦尼克号上乘客的生存状况。 在这里我们使用逻辑回归算法。我们前期那么多工作都是为了这一步服务的。首先我们要将所有的特征值聚合为向量。

我们发现数据格式不一致,所以我们要进行归一化处理。

下面就是建立逻辑回归模型了。

此刻的模型已经建立好了,下面我们来评价模型的好坏

可以看到准确率达到了86%,如果想提高精确度,可以进行参数的调节

下面开始预测是否他们存活下来,这个时候就要用到测试集了,对测试集进行同样的变换,这里不再叙述了,变换后的df表如下所示

下面开始使用训练好的模型进行预测。

其中prediction列就是预测的结果,1代表活下来了,0代表没有获救。

最后我们还可以把模型保存在hdfs上面,以便下次进行使用。

加载模型的时候就可以从上面加载下来,直接使用了。

以上就是预测泰坦尼克号获救的完整案例,后面会有更加精彩的内容推荐,欢迎关注!

© 著作权归作者所有

openfea
粉丝 19
博文 88
码字总数 98530
作品 1
杭州
其他
私信 提问
IT人告诉你【泰坦尼克号】上哪类人更易活下来?

《泰坦尼克号》都知道,杰克和露丝的爱情,既美好又悲伤,在看电影的时候,不知你是否想过这样一个问题:在【泰坦尼克号】沉船事故中,什么样的人更容易生存下来呢? 作为一名程序员,我们可...

实验楼
2018/01/09
0
0
第一次接触 Kaggle 入门经典项目泰坦尼克号就斩获前 1%,他做了哪些事情?

你不需要重新发明轮子,你需要知道如何使用现有的轮子更好地完成你想做的事情。 由 Kaggle 主办的泰坦尼克号挑战赛是一场比赛,其目标是根据一组描述某位乘客的变量(如年龄、性别或船上乘客...

skura
10/12
0
0
Spark2.x与ElasticSearch的完美结合

ElasticSearch(简称ES)是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RestFul web接口。ElasticSearch是用Java开发的,并作为Apache许可条款下的开放源...

openfea
2017/10/19
302
0
【Kaggle实例分析】Titanic Machine Learning from Disaster

你是不是也学了很久R语言的却还没有完完整整的把数据分析的整个流程走一遍。 跟着本文操作练习也许会是个不错的开始。 看完本文你将了解到: 1. 如何用R语言进行数据分析 2. 数据分析师的主要...

KevinMeng
2017/02/11
0
0
教程 | 理解XGBoost机器学习模型的决策过程

  选自Ancestry   作者:Tyler Folkman   机器之心编译   参与:刘晓坤、李泽南      使用 XGBoost 的算法在 Kaggle 和其它数据科学竞赛中经常可以获得好成绩,因此受到了人们的...

机器之心
2017/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
13分钟前
1
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部