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

浏览: 2548

阅读本文大概需要2分钟

本篇作者:小郑同学

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

1.获取数据

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

image.png

点击Data下载数据集

2.数据预处理

1).获取数据后,接下来就要进行一个预处理,我们先导入数据并查看:

image.png

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

  • PassengerId :乘客ID

  • Pclass :乘客等级(1/2/3等舱位)

  • Name : 乘客姓名

  • Sex : 性别

  • Age : 年龄

  • SibSp : 堂兄弟/妹个数

  • Parch : 父母与小孩个数

  • Ticket : 船票信息

  • Fare =:票价

  • Cabin : 客舱

  • Embarked : 登船港口


更具体的信息可以参考kaggle官网上的解释,这里不再加以说明了

2).看一下数据导入部分的源码

image.png

  • 导入Pandas和sklearn库

  • 导入csv数据(数据的样子就是前面表格上的)

  • 接着我们可以大致了解下数据集的基本情况


image.png

我们可以看出,一共有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语句,只不过决策树是运用了信息论的知识,来决定先分裂哪个节点(即特征),比如说可能是这样决策的:

image.png

结合该题目,决策树模型大概就是这样,都是按照节点(特征)来一个个判断的,实现起来也简单,用sklearn里面的决策树算法就好了

image.png

>>0.820444614686

  • X为性别,年龄和舱位3列数据集,y是最终的幸存的数据

  • 评估的话,用到的是交叉验证法,可以更加客观的评估模型,最后用自带score评分模型来评价你的算法好坏,得分越高说明算法表现越好

这里的得分结果是0.820444614686,当然还有要提高的地方

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

结论:小郑同学


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

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


欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧


历史人气文章

菜鸟学Python入门教程大盘点|7个多月的心血总结

同学,学Python真的不能这样学

全网爬取6500多只基金|看看哪家基金最强

用Python破解微软面试题|24点游戏

2道极好的Python算法题|带你透彻理解装饰器的妙用

一道Google的算法题 |Python巧妙破解

 长按二维码,关注【菜鸟学python】


image.png

推荐 0
本文由 菜鸟学Python 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册