知行编程网知行编程网  2022-03-08 06:00 知行编程网 隐藏边栏 |   抢沙发  14 
文章评分 0 次,平均分 0.0

这是菜鸟学Python的粉丝第9篇原创投稿

阅读本文大概需要2分钟

本篇作者:小郑同学


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



1.获取数据

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


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


点击Data下载数据集


2.数据预处理

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

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

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

  • PassengerId :乘客ID

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

  • Name : 乘客姓名

  • Sex : 性别

  • Age : 年龄

  • SibSp : 堂兄弟/妹个数

  • Parch : 父母与小孩个数

  • Ticket : 船票信息

  • Fare =:票价

  • Cabin : 客舱

  • Embarked : 登船港口


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


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

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

  • 导入Pandas和sklearn库

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

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


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


我们可以看出,一共有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入门】|泰坦尼克问题分析


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

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

>>0.820444614686


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

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

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


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


结论:小郑同学


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


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




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



历史人气文章

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

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

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

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

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

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


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


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



本篇文章来源于: 菜鸟学Python

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享