本文采用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上面,以便下次进行使用。
加载模型的时候就可以从上面加载下来,直接使用了。
以上就是预测泰坦尼克号获救的完整案例,后面会有更加精彩的内容推荐,欢迎关注!