一、大背景
泰坦尼克号沉没是历史上最著名的沉船事故之一。1912年4月15日,泰坦尼克号在与冰山相撞后沉没,造成在2224名乘客和机组人员中造成1502人死亡。这场耸人听闻的悲剧震惊了国际社会,并为船舶制定了更好的安全规定。造成海难失事的原因之一是乘客和机组人员没有足够的救生艇。尽管幸存下沉有一些运气因素,但有些人比其他人更容易生存,例如妇女,儿童和上流社会。在这个案例中我们将运用机器学习来预测哪些乘客可以幸免于悲剧。从Kaggle泰坦尼克号项目页面下载数据:https://www.kaggle.com/c/titanic
二、提出问题
什么样的人在泰坦尼克号中更容易存活?
三、分析问题
了解数据特征:
登船港口(Embarked):
出发地点:S=英国南安普顿Southampton
途径地点1:C=法国 瑟堡市Cherbourg
途径地点2:Q=爱尔兰 昆士敦Queenstown
基于我手里的这批数据,做个分类任务,预测人能否被获救。
四、数据初步了解
分析:我们发现合并数据集后,数据总共有1309行。
1)年龄(Age)里面数据总数是1046条,缺失了1309-1046=263,缺失率263/1309=20%
2)船票价格(Fare)里面数据总数是1308条,缺失了1条数据
字符串列:
1)登船港口(Embarked)里面数据总数是1307,只缺失了2条数据,缺失比较少
2)船舱号(Cabin)里面数据总数是295,缺失了1309-295=1014,缺失率=1014/1309=77.5%,缺失比较大
这为我们下一步数据清洗指明了方向,只有知道哪些数据缺失数据,我们才能有针对性的处理。
对策:很多机器学习算法为了训练模型,要求所传入的特征中不能有空值,否则不好在建模时构造矩阵。数据出现缺失时,如果这个特征不确定是否对结果有影响(即不能直接舍弃这个特征时),有如下三种方法:
1、如果是数值类型,用平均值取代
2、如果是分类数据,用最常见的类别取代
3、使用模型预测缺失值,例如:K-NN
五、数据处理
5.1 数据预处理
5.2 特征提取
5.2.1数据分类
数据类型主要分为3种:
- 数值类型:
乘客编号(PassengerId),年龄(Age),船票价格(Fare),同代直系亲属人数(SibSp),不同代直系亲属人数(Parch) - 时间序列:无
- 分类数据:
1)有直接类别的
乘客性别(Sex):男性male,女性female
登船港口(Embarked):出发地点S=英国南安普顿Southampton,途径地点1:C=法国 瑟堡市Cherbourg,出发地点2:Q=爱尔兰 昆士敦Queenstown
客舱等级(Pclass):1=1等舱,2=2等舱,3=3等舱
2)字符串类型:可能从这里面提取出特征来,也归到分类数据中
乘客姓名(Name)
客舱号(Cabin)
船票编号(Ticket)
5.2.2特征提取
机器学习算法一般来说解决不了对字符的分类。对类别Category进行编码(转化为数值)。
离散特征的编码分为两种情况:
- 离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one-hot编码
- 离散特征的取值有大小的意义,比如size:[X,XL,XXL],那么就使用数值的map映射{X:1,XL:2,XXL:3}
使用pandas的get_dummies方法可以很方便的对离散型特征进行one-hot编码
1、乘客性别(Sex)
2、登船港口(Embarked)