【Kaggle入门】|泰坦尼克问题分析

原创 2017-09-25 小郑同学
阅读本文大概需要2分钟
本篇作者:小郑同学

当你学习了一定时间的机器学习后,你可能会想找个地方“大显身手”,体会一下实战的感觉,那么kaggle绝对是不二之选. 上面有很多的竞赛题目,也有适合初学者的入门题目: 如“泰坦尼克”,“手写数字识别”,“房价预测”等,非常有趣好玩. 今天就和大家一起学习如何完成“泰坦尼克”入门题目~~

1.获取数据

数据源自大名鼎鼎的Kaggle官网上,大家很容易就可以下载(不过要提前注册一下),网址为https://www.kaggle.com/c/titanic,进去后是这样的:

【Kaggle入门】|泰坦尼克问题分析_第1张图片

点击Data下载数据集

2.数据预处理

1).获取数据后,接下来就要进行一个预处理,我们先导入数据并查看:
【Kaggle入门】|泰坦尼克问题分析_第2张图片

可以清楚的看到,一共有12个字段(特征),除了Survived(表示是否获救)外,其他是乘客的信息:

  • PassengerId :乘客ID
  • Pclass :乘客等级(1/2/3等舱位)
  • Name : 乘客姓名
  • Sex : 性别
  • Age : 年龄
  • SibSp : 堂兄弟/妹个数
  • Parch : 父母与小孩个数
  • Ticket : 船票信息
  • Fare =:票价
  • Cabin : 客舱
  • Embarked : 登船港口
    更具体的信息可以参考kaggle官网上的解释,这里不再加以说明了
2).看一下数据导入部分的源码
【Kaggle入门】|泰坦尼克问题分析_第3张图片
  • 导入Pandas和sklearn库
  • 导入csv数据(数据的样子就是前面表格上的)
  • 接着我们可以大致了解下数据集的基本情况
    【Kaggle入门】|泰坦尼克问题分析_第4张图片

    我们可以看出,一共有891条记录,其中Age,Cabin和有缺失值,其中Cabin只有204条记录,缺失值占样本数量太高了,缺失情况太严重了,因此我们可以考虑不要这个特征值,而Age还能用。那如何填充Age字段的缺失值呢,这里用平均值来替代:
    data.Age.fillna(data.Age.mean(),inplace=True)

3.特征选择

  • 处理完缺失值之后,就是选择我们的特征值了,在kaggle比赛里,特征起到举足轻重给你的作用
  • 好的特征会给你的机器系统提升一个档次,在数据挖掘中,有这样一句话:“特征决定系统的上限,算法只是逼近这个上限”,所以这一步其实是最重要的!
  • 在这个问题里,假如你是泰坦尼克号的负责人,你会如何安排哪些人应该先获救?可以考虑到以下因素:是不是儿童和妇女,社会等级较高的人(因为可能是重要人物)
  • 当然可能还会有很多不同的方案(比如离登录岸口近的乘客拥有获救的优先权,或者把全部特征都拿进来也是可以的)
    但这里就以这个为依据,我们选择了Age,Sex和Pclass三个特征

4.特征工程

这一步大家可以理解为对选择的特征做进一步的处理变换。刚刚的Age已经处理好了,我们再来看下其他两个特征:

1).性别

data['Sex_type']=data.Sex.map({'male':0,'female':1})
print(data.Sex.value_counts())

male 577
female 314
Name: Sex, dtype: int64

这里我们使用kaggle里常用的方法one-hot进行编码,之所以用这个方法,一个是更加贴近计算机计算方式(因为转为0和1),一个是算法识别不了字符串

2).舱位

print(data.Pclass.value_counts())

3 491
1 216
2 184
Name: Pclass, dtype: int64

这个特征已经是分为1,2,3的数值类型了,也没有缺失值,我们就不用去修改了,直接拿来用.

5.模型的选择和评估

在这里,我选择决策树算法来训练并预测. 因为决策树算法我觉得还是容易理解的,就是一系列的条件选择,很像if else语句,只不过决策树是运用了信息论的知识,来决定先分裂哪个节点(即特征),比如说可能是这样决策的:

【Kaggle入门】|泰坦尼克问题分析_第5张图片

结合该题目,决策树模型大概就是这样,都是按照节点(特征)来一个个判断的,实现起来也简单,用sklearn里面的决策树算法就好了
【Kaggle入门】|泰坦尼克问题分析_第6张图片

0.820444614686

  • X为性别,年龄和舱位3列数据集,y是最终的幸存的数据
  • 评估的话,用到的是交叉验证法,可以更加客观的评估模型,最后用自带score评分模型来评价你的算法好坏,得分越高说明算法表现越好
    这里的得分结果是0.820444614686,当然还有要提高的地方

到此,我们已经实现了一个算法,算是初步解决了一个kaggle入门问题,想要追求更高得分的小伙伴,我建议是从特征选择入手,尝试不同的组合往往也会有不同的效果

结论:小郑同学

在我看来,解决机器学习问题的方法是灵活的,一个问题的方法和思路不止一种 ,其实没有所谓的机器学习算法优劣,也没有绝对高性能的机器学习算法.只有更合适的机器学习算法。当然,这篇文章里面的解法还是有缺陷,并不能十分正确的预测所有乘客的获救情况,但基本覆盖了解决问题的流程,希望能给大家或多或少带来帮助,也希望大家不吝赐教!

另外:需要源码的同学,请留言

你可能感兴趣的:(【Kaggle入门】|泰坦尼克问题分析)