这是菜鸟学Python的粉丝第9篇原创投稿
阅读本文大概需要2分钟
本篇作者:小郑同学
当你学习了一定时间的机器学习后,你可能会想找个地方“大显身手”,体会一下实战的感觉,那么kaggle绝对是不二之选. 上面有很多的竞赛题目,也有适合初学者的入门题目: 如“泰坦尼克”,“手写数字识别”,“房价预测”等,非常有趣好玩. 今天就和大家一起学习如何完成“泰坦尼克”入门题目~~
数据源自大名鼎鼎的Kaggle官网上,大家很容易就可以下载(不过要提前注册一下),网址为https://www.kaggle.com/c/titanic,进去后是这样的:
点击Data下载数据集
1).获取数据后,接下来就要进行一个预处理,我们先导入数据并查看:
可以清楚的看到,一共有12个字段(特征),除了Survived(表示是否获救)外,其他是乘客的信息:
-
PassengerId :乘客ID
-
Pclass :乘客等级(1/2/3等舱位)
-
Name : 乘客姓名
-
Sex : 性别
-
Age : 年龄
-
SibSp : 堂兄弟/妹个数
-
Parch : 父母与小孩个数
-
Ticket : 船票信息
-
Fare =:票价
-
Cabin : 客舱
-
Embarked : 登船港口
更具体的信息可以参考kaggle官网上的解释,这里不再加以说明了
2).看一下数据导入部分的源码
-
导入Pandas和sklearn库
-
导入csv数据(数据的样子就是前面表格上的)
-
接着我们可以大致了解下数据集的基本情况
我们可以看出,一共有891条记录,其中Age,Cabin和有缺失值,其中Cabin只有204条记录,缺失值占样本数量太高了,缺失情况太严重了,因此我们可以考虑不要这个特征值,而Age还能用。那如何填充Age字段的缺失值呢,这里用平均值来替代:
data.Age.fillna(data.Age.mean(),inplace=True)
-
处理完缺失值之后,就是选择我们的特征值了,在kaggle比赛里,特征起到举足轻重给你的作用
-
好的特征会给你的机器系统提升一个档次,在数据挖掘中,有这样一句话:“特征决定系统的上限,算法只是逼近这个上限”,所以这一步其实是最重要的!
-
在这个问题里,假如你是泰坦尼克号的负责人,你会如何安排哪些人应该先获救?可以考虑到以下因素:是不是儿童和妇女,社会等级较高的人(因为可能是重要人物)
-
当然可能还会有很多不同的方案(比如离登录岸口近的乘客拥有获救的优先权,或者把全部特征都拿进来也是可以的)
但这里就以这个为依据,我们选择了Age,Sex和Pclass三个特征
这一步大家可以理解为对选择的特征做进一步的处理变换。刚刚的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的数值类型了,也没有缺失值,我们就不用去修改了,直接拿来用.
在这里,我选择决策树算法来训练并预测. 因为决策树算法我觉得还是容易理解的,就是一系列的条件选择,很像if else语句,只不过决策树是运用了信息论的知识,来决定先分裂哪个节点(即特征),比如说可能是这样决策的:
结合该题目,决策树模型大概就是这样,都是按照节点(特征)来一个个判断的,实现起来也简单,用sklearn里面的决策树算法就好了
>>0.820444614686
-
X为性别,年龄和舱位3列数据集,y是最终的幸存的数据
-
评估的话,用到的是交叉验证法,可以更加客观的评估模型,最后用自带score评分模型来评价你的算法好坏,得分越高说明算法表现越好
这里的得分结果是0.820444614686,当然还有要提高的地方
到此,我们已经实现了一个算法,算是初步解决了一个kaggle入门问题,想要追求更高得分的小伙伴,我建议是从特征选择入手,尝试不同的组合往往也会有不同的效果
结论:小郑同学
在我看来,解决机器学习问题的方法是灵活的,一个问题的方法和思路不止一种 ,其实没有所谓的机器学习算法优劣,也没有绝对高性能的机器学习算法.只有更合适的机器学习算法。当然,这篇文章里面的解法还是有缺陷,并不能十分正确的预测所有乘客的获救情况,但基本覆盖了解决问题的流程,希望能给大家或多或少带来帮助,也希望大家不吝赐教!
另外:需要源码的同学,请留言
欢迎大家关注 菜鸟学Python",更多好玩有趣的Python原创教程,趣味算法,经验技巧,行业动态,尽在菜鸟学Python,一起来学python吧
菜鸟学Python入门教程大盘点|7个多月的心血总结
同学,学Python真的不能这样学
全网爬取6500多只基金|看看哪家基金最强
用Python破解微软面试题|24点游戏
2道极好的Python算法题|带你透彻理解装饰器的妙用
一道Google的算法题 |Python巧妙破解
长按二维码,关注【菜鸟学python】
本篇文章来源于: 菜鸟学Python
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何停止mongodb12/28
- ♥ python有哪些功能08/12
- ♥ python中的Haar级联是什么?11/11
- ♥ 微软官宣 Win 11 即将到来,网友:没安卓,升个寂寞啊!07/28
- ♥ 如何在python中删除缺失值10/11
- ♥ 什么样的程序员生涯指南,能在GitHub上获3.6万星07/09
内容反馈