前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Kaggle项目实战》 泰坦尼克:从R开始数据挖掘(一)

《Kaggle项目实战》 泰坦尼克:从R开始数据挖掘(一)

作者头像
小莹莹
发布2018-04-23 14:05:37
2.3K0
发布2018-04-23 14:05:37
举报

摘要: 你是否为研究数据挖掘预测问题而感到兴奋?那么如何开始呢,本案例选自Kaggle上的数据竞赛的一个数据竞赛项目《泰坦尼克:灾难中的机器学习》,案例涉及一个小型数据集及到一些有趣且易于理解的参数,是一个完美的机器学习入口。

泰坦尼克号在进行从英国到纽约的处女航时,不幸的撞到了冰山上并沉没。在这场比赛中,你必须预测泰坦尼克号上乘客们的命运。

在这场灾难中,惊恐的人们争先恐后地逃离正在沉没的船是最混乱的事。“女士和儿童优先”是这次灾难中执行的著名准则。由于救生艇数量不足,只有一小部分乘客存活下来。在接下来的一系列教程中,我们将尝试预测究竟谁活了下来。

与大多数Kaggle比赛一样,我们能获得两个数据集:

一个训练集,它包括一组乘客的逃离结果(即目标变量),以及每名乘客对应的其他参数,比如性别、年龄等。你必须在这个数据集上训练你的模型。

一个测试集,这两个数据集提供了同样的非目标变量,但测试集里的目标变量并未提供。你必须根据测试集里的非目标变量来预测目标变量的值(即是否逃离)。

由于这是一个初学者的竞赛,Kaggle提供了两个优秀的工具及相关教程,以帮助你朝着正确的方向努力。一个是Excel,另一个是一种更有力的工具,即Python。恩,你也许会(自然而然的)觉得使用Excel有些尴尬,使用Python又有些难,那阅读本文是非常明智的。我将向您介绍一种免费且强大的统计编程语言R,并教会您如何用它进行预测分析。

在接下来的几个星期里,我将一步步带你走近R和它的语法,并通过一系列算法引导你从小白逐步成为高手。我也会介绍一些特征工程概念,以不停改善最佳预测结果。

事实上,到我们结束的时候,你将完成对预测结果的改善,并在排行榜上得到一个很高的名次。这本身就是关于Kaggle的很好的一课:预测结果的极小优化,便能引起排名榜的较大波动。这意味着你与排行榜前10%的人差距并不大,如果你打算参加大型竞赛,说不定你还能拿奖。

本指南适用于毫无R编程经验、或者编程经验十分少的人。我不会讲解所有的语法,但当你看完本教程后,你也许想继续扩大视野。这里有一些更广泛的教程。假如你更想阅读书籍,我强烈推荐R语言编程艺术。

如果你对本教程有任何疑问,我建议你把它们发送到Kaggle论坛上,有许多人已经遇到了与你相同的问题,他们可以帮助你。如果你发现了本教程中的任何bug,或有任何能使本文更通俗的相关建议,请通过Twittier给我发送消息。所有的代码都可以在我的Github中获取。

我将把这一系列教程分成五个部分:

第1部分:R入门 第2部分:性别分类模型 第3部分:决策树 第4部分:特征工程 第5部分:随机森林

首先开始阅读第一部分吧!

第一部分:R入门

欢迎来到《泰坦尼克:从R开始数据挖掘》的第一部分,本部分将指导你完成R中的基本部分:加载数据并浏览数据。

首先安装一个R,以及它的官方IDE:RStudio。

现在访问Kaggle,注册一个账户,并获得数据!你需要下载在前言中提到的两个数据集:train.csv和test.csv,并将它们保存在方便的地方。在下载页面中向下滚动到变量说明,查看数据集中的相关变量,在阅读本教程时, 你可能需要参考它。

打开RStudio,你会遇到三个窗口。 左边是控制台,这里是输入要执行的命令:

右上方有一个关于当前环境中对象的列表:

右下角有一系列标签,包括图表和帮助:

您可以通过在感兴趣的函数前面添加问号的方式来请求文档,例如?table将在帮助选项卡中加载有关table命令的帮助文件。

你要做的第一件事是设置你的工作目录。这将更改你在当前会话中执行的所有文件输入和输出的默认位置。RStudio提供了便捷操作,只需单击 Session -> Set Working Directory -> Choose Directory…并导航到你保存训练集和测试集的位置。你应该注意到RStudio自动在控制台中输入了相关操作命令。

虽然你可以用命令行完成本教程,但我建议创建一个脚本来保存你的辛勤工作。这样,你可以轻松地重现结果或进行小的更改,而无需重新输入全部代码。单击左上角的new document按钮,然后选择“R Script”。第四个窗口将出现在左上角。从控制台复制setwd命令并将其粘贴到脚本里。现在将脚本保存到工作目录下。

一些便捷操作能大大简化你的工作,你可以将光标移动到脚本窗口中的命令行,并按住Ctrl-Enter以执行命令。在控制台中,你可以使用向上和向下箭头来查找最近的命令,如果需要,点击Tab将自动弹出相关函数和对象的名称。

好了,现在我们加载数据并瞧一瞧它。在右上方窗口中点击“Import Dataset”,并选择train.csv。由于不需要调整该数据集的任何默认值,因此,直接点击“Import”即可。对另一些不能自动检测标题行或分隔符的数据集,该窗口允许你调整导入数据集的方法。你将再次看到控制台中出现了导入数据的相关命令,环境窗口中的新对象以及脚本窗口中的数据集预览。

你可能会觉得预览与电子表格十分相似,二者的主要区别是你只能通过R编程语言与预览进行交互。你将看到数据列与我们之前在Kaggle下载页面看到的变量是一一对应的。以相同的方式导入test.csv数据集。首先看一看这两个数据集中的信息。在阅读本教程时,你可以随时通过单击资源管理器中的对象来预览数据集中的更改。

将两个导入命令复制到脚本中。在代码中添加注释也是一个好习惯;你可以通过将符号#添加到任何行的开头来添加注释。代码注释的目的是说明这段代码是做什么的。例如,现在你可能希望添加“#设置工作目录和导入数据文件”到文件的顶部。你也可以在顶部添加一些其他信息,如你的姓名,日期或脚本的总体目的。

在R中,我们的数据存储结构称为数据框。你能在对象浏览器中观察到两个数据框的维度。 在训练集中有891个观测值(行),每个观测值有12个变量。测试集较小,只有418名乘客的命运需要预测,且只有11个变量,这是因为“Survived”列缺失了。这就是我们想要预测的列。

让我们快速看一下数据框的结构,即加载的变量的类型。 我们将使用str命令:

代码语言:javascript
复制
> str(train)'data.frame':    891 obs. of  12 variables:
代码语言:javascript
复制
$ PassengerId: int  12345678910 ...
代码语言:javascript
复制
$ Survived   : int  0111000011 ...
代码语言:javascript
复制
$ Pclass     : int  3131331332 ...
代码语言:javascript
复制
$ Name       : Factor w/891 levels "Abbing, Mr. Anthony",..:10919135827716559520629416581 ...
代码语言:javascript
复制
$ Sex        : Factor w/2 levels "female","male":2111222211 ...
代码语言:javascript
复制
$ Age        : num  2238263535NA5422714 ...
代码语言:javascript
复制
$ SibSp      : int  1101000301 ...
代码语言:javascript
复制
$ Parch      : int  0000000120 ...
代码语言:javascript
复制
$ Ticket     : Factor w/681 levels "110152","110413",..:5255966625047327686396345133 ...
代码语言:javascript
复制
$ Fare       : num  7.2571.287.9253.18.05 ...
代码语言:javascript
复制
$ Cabin      : Factor w/148 levels "","A10","A14",..:18315711131111 ...
代码语言:javascript
复制
$ Embarked   : Factor w/4 levels "","C","Q","S":4244434442 ...

让我们来讨论一下在这里出现的数据类型。“int”是只能存储整数的整数,“num”是能够保存小数的数字变量,“factor”是分类的因子类型。默认情况下,R将导入的所有文本字符串看做因子,这有利于我们处理它们,我们也可以将它们转换回文本。如果数据集有很多文本,并且我们打算处理它们,也可以这样导入文件:

代码语言:javascript
复制
> train <- read.csv("train.csv", stringsAsFactors=FALSE)

在本例中,乘客姓名、他们的票号和舱位都已作为因子变量导入。我们可以看到,name变量有891个水平,这意味着每个乘客的名字都不一样。其他两个变量有较少的因子水平,这可能是因为存在缺少值。现在,让我们保留import命令,我们将在近期使用的唯一一个因子变量是gender变量,它正确地导入为分类变量。

有好几种方法去访问数据框的列。如果想要提取数据框中的单个列,请使用美元符号运算符。在控制台尝试这个命令:train $ Survived。 你会看到训练集中的乘客命运向量。你可以把这个向量赋给一个函数。让我们试试table(train $Survived)

代码语言:javascript
复制
> table(train$Survived)
代码语言:javascript
复制
  0   1
代码语言:javascript
复制
549342

table命令是R中最基本的汇总统计函数之一,它的运行对象为你指定的向量,并简单地计算向量中每个值的出现次数。我们看到,在训练集中有342名乘客存活,549名乘客死亡。 生存比例怎么样呢?嗯,我们可以将一个函数的输出作为另一个函数的输入。不妨将table()函数的输出作为prop.table()函数的输入:

代码语言:javascript
复制
> prop.table(table(train$Survived))
代码语言:javascript
复制
        0         1
代码语言:javascript
复制
0.61616160.3838384

好啦,现在的可读性更好了。训练集中有38%的乘客在泰坦尼克号的悲剧中幸存了下来。这意味着大多数人都遇难了。那么,你准备好进行第一次预测了吗?由于训练集中的大多数人都死掉了,因此也许可以假设测试集中的每个人都死掉了。这个想法也许有点变态,但可以让我们打开新局面,并向Kaggle发送一个预测结果。

继续了解更多的R语法。R中的赋值运算符为“<-”,它用于将右侧的值存储到左侧对象中。 例如,x <-3将值3存储到变量x中。在某些特殊情况下,例如将参数值传递到函数签名中时,我们使用等号(你将在后面的课程中看到这个)。

好啦,让我们将预测变量“everyonedies”添加到测试集数据框中。要做到这一点,我们需要使用一个新的命令,rep函数的作用是多次重复某些值,在控制台中输入:

代码语言:javascript
复制
> test$Survived <-rep(0, 418)

由于数据框中之前没有“Survived”列,因此R将专门创建这样一个列,并在其中存储418个“0”,“0”即为预测结果,418则是测试集的行数。如果这个列之前已经存在了,那么R将用新的值覆盖它,因此要小心(不要覆盖掉有用的数据)!尽管对于这个简单模型不那么必要,但将预测结果放在已存在的数据旁边有助于保持数据框的整洁性。令数据框维持一个固定的顺序是一个好的习惯,在预测复杂问题时更是如此。如果你现在预览一下测试集数据框,将发现我们创建的新列位于数据框的末尾。

现在我们需要向Kaggle提交一个带有乘客ID的csv文件作为我们的预测结果。因此,让我们从测试集中提取这两列,将它们存在一个新数据框中,并将它们保存下来:

代码语言:javascript
复制
> submit <- data.frame(PassengerId = test$PassengerId, Survived = test$Survived)
代码语言:javascript
复制
> write.csv(submit, file ="theyallperish.csv", row.names =FALSE)

data.frame命令创建了一个新的数据框,其变量名与测试集中的变量名一致,如果你想,可以通过预览来查看它。write.csv命令将数据框保存为一个CSV文件,并且去掉了会导致Kaggle拒绝我们提交的行号,这很重要。

好啦,这个文件应该已经保存在你的工作目录下了。首先确保你可以在你的工作目录里看到它,然后回到Kaggle,单击“Make asubmission”。你可能会被要求注册一个团队; 如果你打算自己参赛也不要紧,每个参赛者都需要有一个团队,即便这个团队里只有你一个人。如果你想,你可以稍后再添加更多人,但是在发送提交内容后,将不能从已有团队里踢人。

在泰坦尼克号比赛中,你每天最多可以提交5次结果; 这是一个好消息,因为我们在第2部分中将生成多个预测结果!无论如何,现在你设置好团队后,将你刚刚创建的csv文件拖到提交页面上的黄色框,或滚动鼠标直到看到它。然后点击提交!齿轮转动后,你应该看到这样一个界面:

哦,太可怕了!我们几乎是倒数几名!

淡定,这个教程是为了让你尽量轻松的学会使用R和RStudio。我保证在这一系列的课程完成之后,你会名列前茅。此外,我们注意到我们有62%的预测是正确的。这非常接近我们从prop.table()函数的结果中预期的死亡率。

下一课,我们将着眼于从其他可用变量中获得更多信息,从而提高模型准确性。第2部分的链接在此!

本教程中的所有代码都可以在我的Github代码库中找到。

未完待续…

原文连接:

http://trevorstephens.com/kaggle-titanic-tutorial/getting-started-with-r/

PPV课翻译小组原创作品,严禁转载

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PPV课数据科学社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一部分:R入门
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档