原kaggle比赛地址:https://www.kaggle.com/c/titanic

原kernel地址:A Data Science Framework: To Achieve 99% Accuracy

问题处理之前要知道的事:

数据科学框架(A Data Science Framework)

1.定义问题(Define the Problem):

问题→需求→方法→设计→技术,这是刚开始拿到问题的解决流程,所以在我们用一些fancy的技巧和算法解决问题之前,必须要明确我们需要解决的问题到底是什么

2.获取数据:

从dirty data转换到clean data 的方法。

3.数据处理准备(Prepare Data for Consumption):

不太清楚如何准确的翻译Prepare Data for Consumption,但是根据此kernel的解释。就是数据整理,简单的说就是把“野生”数据转换成“被驯服”的数据,将数据整理成适合存储和处理的数据架构,输的提取、数据清理、处理异常、缺失、离群的数据点。

4:探索性数据分析(Perform Exploratory Analysi):

GIGO,减少无意义的输入才能提升输出的质量,所以使用图表、数据显示等可视化方法才能发现潜在的问题与feature、feature 之前的关联度。同样,数据分类也利于理解选择合适的数据模型。

5:数据建模(Model Data):

知道如何针对该问题选取合适的工具(tool),差的模型导致差的结论,毋庸置疑。

6:验证与实现数据模型(Validate and Implement Data Model):

这一步确保没有过拟合(overfit)——训练集上性能出众,测试集上抓瞎。

7:优化与策略(Optimize and Strategize):

通过迭代提升性能。

接下来就通过这七步来逐一分析Titanic号问题。

Step 1:Define the Problem

Titanic号的悲剧发生于1912年4月15日,2224名乘客中死亡1502人,举世震惊。我们的这次的问题就是通过Titanic的乘客信息来预测该乘客的生还可能。

知识点:二元分类问题,Pyhton或R语言(该kernel使用Pyhton)

Step 2:Gather the Data

https://www.kaggle.com/c/titanic/data (Titanic数据集下载)

Step 3:Prepare Data for Consumption

3.11 Load Data Modelling Libraies

数据清理,所需Python包已包含在kernel中

需要注意的是作者使用的是python3,在之前的学习中我使用的Pyhton2.7,因此我卸载了所有的python环境与老版本的各种包,直接下载了anaconda3.6版本一步到位。在这里还是推荐大家使用python3进行数据分析,他比python2更规范,更先进。

3.2 Meet and Great Data

通过数据集feature的名字与解释来了解具体属性,通过info()和sample()函数获取feature信息,需要注意的有以下几点:

1.Survived列是需要输出的,二元变量,1代表存活,0代表死亡。其他features是为了学习与预测提供的。注意:features多并不一定是好事,选择合适的features才重要。

2.PassengerID与Ticket列是随机的唯一标识符,对预测没有贡献,直接除去。

3.Pclass是仓位等级,贡献较大我们将其以1,2,3代替。

4.Name列看上去没什么用处,其实我们可以通过名字的title确定性别、家庭规模、及其社会地位。

5.Sex和Embarked可以转换为dummy variables——虚拟变量,便于模型构造

6.Age和Fare,连续变量。

7.SibSp代指兄弟姐妹同船人数,Parch代指父母同船人数,这两个属性可以巧妙的合成家庭大小,对预测很有帮助。

8.Cabin列的缺失实在是太多了,这种情况我们直接删除之。

我们发现数据的缺失并不算多,但是为了模型训练,我们必须进行缺失数据处理,随后讨论。

3.21 The 4 C's of Data Cleaning: Correcting, Completing, Creating, and Converting

数据清理的4C要义:

1.Correcting 准确性:简单的例子,如果Age里本应该是80却错标成800,这就出现了incorrect。

2.Completing完整性:有些算法没法处理丢失信息,所以当然要进行丢失数据处理啦。

两种常用方法:要么删除要么填充,不建议删除,因为很多feature含有大量信息,简单删除后肯定会产生bias。填充的话一边使用均值、中位数或者均值+随机化标准偏差。

3.Creating创造性:用现有数据产生新数据集,用我一个师兄的话就是靠脑洞!当然这是比较调侃的说法,有很多creat feature的方法可以参考,作为初学者我也并未深入学习,待到以后有所心得了再来分享。

4.Converting数据转换:用此kernel 的话说是数据格式化,因为分类的数据并不适合算法计算,因此我们引入dummy variables,于此相关的还有One-hot编码。

3.22 Clean Data

作者使用了pandas 的fillna()方法对数据集中的空值进行填充:

对于连续变量,例如Age、Fare使用中位数进行填充median(),至于为什么不使用平均数进行填充是因为有很多离群点会对数据造成干扰,中位数更能代表大多数数据的中指,这会在后来的数据可视化分析上体现。

对于分类型变量例如Embarked,使用众数进行填充mode()[0],毕竟当我们不知道某一row属于何种类别的时候将其归类为概率较高的类别是合理的。

接着使用

dataset['FamilySize'] = dataset ['SibSp'] + dataset['Parch'] + 1

构造了家庭大小数属性。

添加IsAlone属性标识是否一人登船。

从Name属性中提取Title,因为我们发现所有的名字几乎都含有title,就是Mr、Miss等称呼

因此我们提取(,)与(.)之间的元素,构成Title属性,该属性隐藏着性别与社会地位等信息。

我们构建FareBin和AgeBin将船票价格和年龄分成几个不同的等级,使得连续数据集更好的适应算法。这里用到了pandas的qcut()和cut()函数。

3.23 Convert Formats

将分类的变量转换为dummy variables,所谓dummy变量就是用0或1来表示该属性是否出现,我们可以发现处理后的data1_dummy出现了Embarked_C、Embarked_Q、Embarked_S等等dummy变量,应该很好理解了。

3.24 Da-Double Check Cleaned Data

再次确认数据处理结果,cleaning Done!

3.25 Split Training and Testing Data

接下来分割数据集,我们将训练数据集以75/25的比例分割为新的训练集和验证集,验证集的存在是为了保证我们不过拟合。使用的函数是sklearn中的model_selection.train_test_split(),在没有制定该函数的分割比例的情况下默认进行75/25的分割。

未完待续~

kaggle入门项目:Titanic存亡预测(二)数据处理的更多相关文章

  1. kaggle入门项目:Titanic存亡预测 (一)比赛简介

    自从入了数据挖掘的坑,就在不停的看视频刷书,但是总觉得实在太过抽象,在结束了coursera上Andrew Ng 教授的机器学习课程还有刷完一整本集体智慧编程后更加迷茫了,所以需要一个实践项目来扎实之 ...

  2. kaggle入门项目:Titanic存亡预测(四)模型拟合

    原kaggle比赛地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Achieve 99% Accu ...

  3. kaggle入门项目:Titanic存亡预测(三)数据可视化与统计分析

    ---恢复内容开始--- 原kaggle比赛地址:https://www.kaggle.com/c/titanic 原kernel地址:A Data Science Framework: To Ach ...

  4. kaggle入门题Titanic

    集成开发环境:Pycharm python版本:2.7(anaconda库) 用到的库:科学计算库numpy,数据分析包pandas,画图包matplotlib,机器学习库sklearn 大体步骤分为 ...

  5. Kaggle入门——使用scikit-learn解决DigitRecognition问题

    Kaggle入门--使用scikit-learn解决DigitRecognition问题 @author: wepon @blog: http://blog.csdn.net/u012162613 1 ...

  6. Kaggle入门——泰坦尼克号生还者预测

    前言 这个是Kaggle比赛中泰坦尼克号生存率的分析.强烈建议在做这个比赛的时候,再看一遍电源<泰坦尼克号>,可能会给你一些启发,比如妇女儿童先上船等.所以是否获救其实并非随机,而是基于一 ...

  7. SpringCloud学习之手把手教你用IDEA搭建入门项目(二)

    本篇博客是承接上一篇<手把手教你用IDEA搭建SpringCloud入门项目(一)>,不清楚的请到我的博客空间查看后再看本篇博客 1)先创建一个Eureka服务注册中心模块,用来作为服务的 ...

  8. Kaggle入门

    Kaggle入门 1:竞赛 我们将学习如何为Kaggle竞赛生成一个提交答案(submisson).Kaggle是一个你通过完成算法和全世界机器学习从业者进行竞赛的网站.如果你的算法精度是给出数据集中 ...

  9. TensorFlow 入门之手写识别(MNIST) 数据处理 一

    TensorFlow 入门之手写识别(MNIST) 数据处理 一 MNIST Fly softmax回归 准备数据 解压 与 重构 手写识别入门 MNIST手写数据集 图片以及标签的数据格式处理 准备 ...

随机推荐

  1. 2015&nbsp;Objective-C&nbsp;三大新特性

    Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然 ...

  2. spring与mybatis(oracle)整合

    今天闲着无聊把项目拆解开,抽出了spring与mybatis部分.做了个demo,希望对初学者有些帮助,另外整个demo是从项目中完整剥离下来的,里面的架构大家也可以参考一下. 先是完整的项目图 首先 ...

  3. GIT版本控制 — GIT与SVN的相互转换 (三)

    git-svn git-svn用于Git和SVN的转换,可以把Git仓库迁移成SVN仓库,反之亦可. 详细介绍可见[1],或者命令行输入git-svn. Bidirectional operation ...

  4. Python2.x的UnicodeEncodeError: ‘ascii’ codec can’t encode异常错误

    刚遇到这个问题的时候,在网上找了 半天,发现都是说 添加如下三行代码即可解决问题, [python] import sys reload(sys) sys.setdefaultencoding('ut ...

  5. 安卓TV开发(四) 实现主流智能TV视频播放器UI

    前言:移动智能设备的发展,推动了安卓另一个领域,包括智能电视和智能家居,以及可穿戴设备的大量使用,但是这些设备上的开发并不是和传统手机开发一样,特别是焦点控制和用户操作体验上有很大的区别,本系列博文主 ...

  6. C++格式化输出,C++输出格式控制

    在输出数据时,为简便起见,往往不指定输出的格式,由系统根据数据的类型采取默认的格式,但有时希望数据按指定的格式输出,如要求以十六进制或八进制形式 输出一个 整数,对输出的小数只保留两位小数等.有两种方 ...

  7. vector的简易实现

    vector的简易实现整理自<数据结构与算法分析–C++描述(第3版)>3.4节“向量的实现”.详细可参考<STL源码分析>4.2节. 具体实现代码如下: #ifndef VE ...

  8. Git错误一例

    Bitbucket一直不稳定,push, pull经常失效.幸好还有goagent可以用. 把git的全局配置改为走goagent代理,可以正常使用: [http] proxy = http://12 ...

  9. 网站开发进阶(六)JSP两种声明变量的区别

    JSP两种声明变量的区别 在JSP中用两种声明变量的方法,一种是在<%! %>内,一种是在<% %>内.他们之间有什么区别呢?我们直接看一个JSP文件来理解. 代码如下: &l ...

  10. 一键安装 redmine on windows 和发邮件设置

    一键安装 redmine on windows 和发邮件设置 1)使用http://bitnami.org/stack/redmine一键安装redmine (windows). 2)修改下面的文件: ...