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

原创
2017/11/07 10:27
阅读数 323

本文采用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上面,以便下次进行使用。

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

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

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部