kaggle_kaggle比赛 - CSDN
kaggle 订阅
Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。该平台已经吸引了80万名数据科学家的关注,这些用户资源或许正是吸引谷歌的主要因素。 展开全文
Kaggle是由联合创始人、首席执行官安东尼·高德布卢姆(Anthony Goldbloom)2010年在墨尔本创立的,主要为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。该平台已经吸引了80万名数据科学家的关注,这些用户资源或许正是吸引谷歌的主要因素。
信息
外文名
Kaggle
业务内容
为开发商和数据科学家提供举办机器学习竞赛等
创造时间
2010年
创造地点
墨尔本
创始人
安东尼·高德布卢姆
用户扩展
数据科学家
Kaggle企业简介
Kaggle公司是由联合创始人兼首席执行官AnthonyGoldbloom2010年在墨尔本创立的,主要是为开发商和数据科学家提供举办机器学习竞赛、托管数据库、编写和分享代码的平台。这一平台已经吸引了许多科学家和开发者的关注,他们也纷纷入驻这一平台。这些科学家和开发者资源正是谷歌看中他们的地方 [1]  。
收起全文
精华内容
参与话题
  • Kaggle 首战拿银总结 | 入门指导 (长文、干货)

    万次阅读 多人点赞 2017-05-18 15:44:42
    Kaggle 首战拿银总结 | 入门指导 (长文、干货)

    转自:第一次参加Kaggle拿银总结

    作者:ScarletPan

    另一篇文章从0到1走进 Kaggle


    我的比赛代码已经放到github --> Kaggle-Rental-Listing-Inquireies

    在这篇博客开始之前,我必须感谢导师给我提供服务器资源,@Fenix Lin学长从他自身经验出发耐心地为我解答一些困惑,素未谋面的@Wille学长的一篇非常优秀的博文如何在Kaggle 首战中进入前 10%帮助入门,以及广大Kaggler的无私分享,我确实在Kaggle举行的这场Rental Listing Inquiries比赛中收益良多,获得了不少知识。作为第一次参加比赛,获得了Top 5%的成绩已经让我非常满意了。


    这篇文章的目的是介绍自己第一次参加Kaggle的心历路程,总结遇到的问题和解决思路,为自己以后参赛做准备。同时这篇文章也可以作为一个初学者的入门Kaggle的参考,如果想要在入门kaggle的时候拿到一个好的名次,可以参考我的一些方法实践。本文可以随意转载,但务必注明出处和作者, 并且发邮件myscarlet@sina.com通知与我。


    初识Kaggle

    什么是Kaggle

    从刚接触machine learning的时候就有在学长口中、博文中、社区中听到过它的名字,当初我对它的理解还比较浮浅,只是知道是一个数据比赛的平台,有很多公开的数据集,比如大二寒假做的第一个ML练手项目就是一个用word2vec进行情感分析的Tutorial级比赛Bag of Words Meets Bags of Popcorn,并且写了一个Research report。这过程中只用到了教程和数据集。

    后来重新接触Kaggle才发现,它的价值所在是各种高质量的比赛,以及每场比赛下面的社区讨论(包括比赛中的分享、答疑,和比赛后的top solution分享),因此如果想要获得关于数据挖掘,机器学习实战经验的话,打一场kaggle比赛绝对是一个高回报的工作。

    因为还是学生,不知道kaggle比赛究竟是否会为自己求职工作有举足轻重的影响,但是单从Kaggle被google收购一点来看,它会在行业内一点点提升影响力的。

    比赛组织

    一场比赛通常持续2~3个月,在比赛的简介中会有规则、评价指标(比如这场比赛为mlogloss),时间轴等信息。另外还有数据区、Kernel区(一些Kagglers在kaggle上成功运行的ipython notebook或者代码),Discussion(讨论区),LeaderBoard(LB,分为公开的用户提交可以显示结果的榜单,和非公开的比赛结束后确定最终排名的榜单),当然还有提交区(一般为一定格式的csv文件提交)。

    另外就是奖牌问题,一般来讲在1000+量级的比赛中,top 10+ 0.2%为金牌,5%为银牌,10%为铜牌,这里有更具体的奖牌发放方式。

    讨论区

    个人认为,如果想在入门Kaggle阶段就获得一个好的成绩的话,关注discussion是非常重要的,会有很多人分享自己的思路、困惑甚至代码和结果。有时候,一场比赛中比较关键的feature可能就是从讨论区中获得的,比如Two Sigma Connect: Rental Listing Inquiries这场比赛的最后几天,我以为自己特征提取得已经差不多了,没有任何idea了的时候,一个来自讨论区magic feature从天而降,从而使得榜单大变,一夜之间我的排名从70多掉到了120多。


    数据探索和可视化(EDA)

    首先拿到一个比赛题目,你需要下决心是否参加这个比赛,对我个人而言最重要的无非两点 1. 是不是有rank point,也就是奖牌, 2. 数据集是否令我满意。 因此对数据的探索首先需要你从Kaggle网站上查看数据的简介,并把数据下载下来。比如Rental Listing Inquiries包含了80G的图片数据,和几份json文件。

    我们将下载下来的train.csv用python pandas 打开,取少量样本进行观测

    import pandas as pd
    train = pd.read_json("input/train.json")
    train.sample(2)

    抛开图片数据不谈,我们可以看到给定的数据里包含多种多样的feature:

    • 数值型feature

      • bathrooms
      • bedrooms
      • price
    • 高势集类别(High Categorical)型feature

      • building_id
      • display_address
      • manager_id
      • street_address
    • 时间型feature

      • created
      • 地理位置型feature
      • longitude
      • latitude
    • 文本feature

      • description
    • 稀疏特征集feature

      • features
    • id型feature

      • listing_id
      • index

    我们看到有这么多不同的feature,一看几乎每个feature都有深度挖掘的价值,何况还有80G的图片feature,无疑是让人兴奋的,因此我选择了这个比赛,因为它的数据集的确让我舒心。

    另外一定要搞明白的一件事是这场比赛是一个预测比赛还是分类比赛,我们能看到最重要预测的是用户的interest_level,分为low,medium,high三级,很显然是个分类问题了。

    接下来的是就是对数据进行可视化探索了,我因为是初期参赛的,所以自己做了一份可视化方案,从中可以发现很多有趣的分布、outlier等。在这里推荐三份在比赛中分享出来的比较好的EDA:


    提取基础特征+模型训练

    有了之前数据探索的基础,我们很快能提取到一些基础的feature,比如数值型feature进行简单的加减乘除,类别型feature用id顺序编码,稀疏特征集用one-hot编码,时间特征生成年、月、日等。将一些基础的特征转换成相应的输入input_X矩阵后,再将label也转换成数值形式:

    target_num_map = {'high':0, 'medium':1, 'low':2}
    y = data["interest_level"].apply(lambda x: target_num_map[x])

    懂机器学习的人都知道,有了这些(X,y)对,我们就可以进行模型训练了。

    我们用cross-validation(CV)的成绩来判断我们本地的实验结果,也就是将(X,y)训练集拆分成训练和验证集,训练相应分类器对训练集拟合,再在验证集上进行loss的计算来评估模型的好坏。

    常见的分类器有Logistic Classifier,SVM, NN softmax,Random Forest等。但是在kaggle上用的比较多的还是一些封装好的库,如sklearn里的各种分类器,大名鼎鼎的xgboost,最近崭露头角的lightgbm等。

    早就听闻xgboost的好用,我就直接在电脑上pip了xgboost,作为我接下来一两个月以来的核心分类器。将原先的(X,y)对中的训练部分输入xgboost进行fit,然后用验证部分predict计算mlogloss。

    至此为止,比赛初期的第一个模型就已经训练好了。


    跑出一个能提交的结果

    训练完一个比较好的模型之后,就可以对测试集进行预测了,首先将训练集(X,y)对输入xgboost中重新训练,然后对测试集也像对训练集一样进行特征处理,预测出来的结果按照比赛指定的格式保存到文件(在这里还是建议用pandas),即可提交。

    第一次提交意味着你正式进入比赛,提交的结果会在Leader Board上显示你当前的排名,当然这个排名只起到参考作用,因为你提交上去的大部分结果kaggle都没有进行评估。


    特征工程(FE)

    在一系列的初始操作以后,你就要踏上FE的漫漫长征了。本人断断续续在数据清洗、特征提取上做了约两个多月,在比赛最后一段时间模型融合完毕后还在继续地寻找、测试新的特征。后期评论区中magic feature的出现,让每个人的预测结果好了0.01~0.02个点。不得不说,特征工程才是Kaggle比赛获胜的关键所在,因此初学者耗费大量精力在这上面是没错的。而本博文也是重点想讲一下自己发现新特征的一些心历路程。

    在对一些基础的特征进行生成之后,我开始了漫长地测试特征的长征路,测试的思路我后来发现并不是很好,因为是通过新增加一个或几个feature,如果cv分数上去了,就增加这个feature,如果cv分数没有上去,就舍弃这个feature,也就是相当于贪心验证。这样做的弊处在于,如果之前被舍弃的feature和之后被舍弃的feature联合在一起才会有正面影响,就相当于你错过了两个比较好的feature。因此特征的选择和联合显得非常关键。

    在比赛阶段,花费大量力气去创建一个feature,到头来却选择放弃这个feature的事情很常见,我后期的特征有很多是新添加的,旧有的一些特征并没有保留。接下来就让我总结一下这场比赛中有哪些“好”的feature,为以后的比赛提供灵感和经验。

    • 数值型feature的简单加减乘除

    这个乍一看仿佛没有道理可言,但是事实上却能挖掘出几个feature之间的内在联系,比如这场比赛中提供了bathrooms和bedrooms的数量,以及价格price,合租用户可能会更关心每个卧室的价格,即bathrooms / price,也会关心是不是每个房间都会有一个卫生间bathrooms / price ,这些数值型feature之间通过算数的手段建立了联系,从而挖掘出了feature内部的一些价值,分数也就相应地上去了。

    • 高势集类别(High Categorical)进行经验贝叶斯转换成数值feature

    什么是High Categorical的特征呢?一个简单的例子就是邮编,有100个城市就会有好几百个邮编,有些房子坐落在同一个邮编下面。很显然随着邮编的数量增多,如果用简单的one-hot编码显然效果不太好,因此有人就用一些统计学思想(经验贝叶斯)将这些类别数据进行一个map,得到的结果是数值数据。在这场比赛中有人分享了一篇paper里面就提到了具体的算法。详细就不仔细讲了,用了这个encoding之后,的确效果提升了很多。那么这场比赛中哪些数据可以进行这样的encoding呢,只要满足下面几点:1. 会重复,2. 根据相同的值分组会分出超过一定数量(比如100)的组。也就是说building_id, manager_id, street_address, display_address都能进行这样的encoding,而取舍就由最后的实验来决定了。

    • 时间特征

    针对于时间数据来讲,提取年、月、日、星期等可能还是不够的,有另外一些points可以去思考,用户的兴趣跟发布时间的久远是否有关系?可以构造如下的feature来进行测试:

    data["latest"] = (data["created"]- data["created"].min())
    data["passed"] = (data["created"].max()- data["created"])


    可以看到latest指的是从有数据开始到该房创建为止一共过去了多少时间,而passed则是该房记录创建为止到最后有记录的时候一共过去了多少时间。

    另外针对于时间特征还可以用可视化的方式来与其他特征建立联系,比如我们观察listing_id与时间变化到底有怎样的联系,能够绘制出如下的图来:


    可能简单的相除就能获得很好的结果

    • 地理位置特征

    想到地理位置,就会想到聚类,一个简单的方式将每个房子划分到同一块区域中去;除了聚类以外,算出几个中心点坐标,计算曼哈顿距离或者欧式距离可能都会有神奇的效果。

    • 文本特征

    实话说自己是看中这次比赛中有文本数据才参加的,因此在文本挖掘中做了很大的努力,比如提取关键词、情感分析、word embedding聚类之类都尝试过,但效果都不是很好, 对于文本的特征的建议还是去找出一些除了停用词以外的高频词汇,寻找与这个房屋分类问题的具体联系。

    • 图片特征

    除了最后爆料出来的magic feature(后文会提到)以外,我只用了一个房子有几个照片这个信息。讨论区中都说对于图片特征用CNN提取、简单特征提取之类的效果都不是很好。

    • 稀疏特征集

    其实就相当于一系列标签,不同标签的个数也是挺多的,本次比赛我只是简单地采用了counterEncoding的方式进行one-hot编码。值得一提的是,有些标签是可以合并的,比如cat allowed 和 dog allowed可以合并成为 pet allowed,我在这场比赛中手工地合并了一些feature数据,最终结果略微有所提升。

    • 特征重要程度(feature importance)

    在树结构的分类器比如randomforest、xgboost中最后能够对每个特征在分类上面的重要程度进行一个评估。这时候如果已经选定了一些feature进行训练了之后,查看feature importance的反馈是非常重要的,比如本场比赛制胜的关键是运用manager_id这个feature,而它的feature importance反馈结果也是非常高。通过对重要特征的重新再提取特征,能够发现很多有意思的新特征,这才是用FE打好一场比赛的关键所在。


    下面列出了一些比赛结束后获胜者分享的idea,这大概是我这场比赛中获益最大的一块地方了。

    • Top #1 solution @plantsgo

    主要是针对manager_id生成了非常多的feature。如根据不同时间出现的manager_id判断一个manager是否活跃(manager与time进行group,manager掌管有几个不同的房子(manager与building_id进行group)、平均每天处理多少房子(比值)、活动范围(同个manager掌管的房子的最大最小经纬度group),经理的开价程度(选择bedroom和bathroom作为房子型号指标,把相同房型的均价来衡量经理对于所有房子的开价程度),对经纬度进行聚类再计算每个区域中有多少个manager竞争、一个manager同时经营几个区域、在同个区域中manager的开价水平等。从Top 1选手分享的代码来看,其对于manager的各种处理的确是让人大开眼界。

    • Top #2 solution @Faron

    从更为经验老道的选手给出了一些特征提取建议。其中有一类被作者称为"Likelihood Features",他对High Cardinal Categorical的特征用了一些额外的条件概率来计算其似然值,如p(y|manager_id, bathrooms)等,并且进行了点积操作来计算出一个合适的encoding值(类似于先前讨论区中出现的manager_skills,同时为了防止过拟合对这些似然估计出来的feature创建了2层嵌套。另外还有一种对我启发比较大的feature是对description出现频率最高的15k单词进行一个one-hot深度xgboost训练,将这个训练出来模型的预测结果作为description的encoding。

    • Top #3 solution @Little Boat

    其FE的第一部分给出了group的一套方案,类似于我自己FE中的group方法。第二部分使用了magic feature相关的feature,方法与第一部分类似

    • Top #9 solution @James Trotman

    没有细说,但是列出了一个feature name的详单,希望以后没有idea的时候能从中找到一些insight

    • Top #11 solution @KazAnova

    KazAnova无疑是这场比赛中的明星选手,他分享了对初学者模型融合比较关键的Stack-Net,以及对最后榜单变动起到决定性作用的magic feature。几乎所有在榜上的Kagglers都要向他致敬。同时在FE这一块,他注意到了数据集中存在很多类似的数据(仅仅在价格上有区别),因此他建立了不同的group,并在这些group间创建了很多aggregated features,比如最高的price,平均price等

    • Top #12 solution @b.e.s

    用到了基于高势集类别数据的group的一些统计量。

    • Top #13 solution @qianqian

    也是用了很多基于manager_id group的统计feature。

    模型调参(Grid Search)

    模型调参的话,能够在FE完之后为你提升0.001~0.002分数,因此如何为我们的分类器,比如xgboost选择好正确的参数是非常关键的。

    比较常用的是进行Grid Search,从你的输入组合中暴力地搜索cv结果最优的组合。我一般会设定一个learning rate,然后尝试不同的参数组合,取最优值,因为训search的代价比较高,最好选择一定范围,比如你事先cv的时候知道estimater会在700~1000的范围内,那就不要search这个范围以外的值了。

    模型融合

    如果你没有idea了的话,就模型融合吧!模型融合是能够快速提高比赛成绩的捷径,现在的比赛几乎没有人不用到这个技巧,通常获胜者会对很多很多模型进行融合,并且会选择不同的模型融合的方式。这里有一篇非常好的模型融合解析博文,相信每个看过它的人都会对模型融合有一个清楚的了解

    本次比赛中我使用了两种模型融合方式,一种是Averaging,一种是Stacking。

    先来说说Stacking,因为这场比赛一名贡献比较大的选手分享了一个叫StackNet的库,作为新手我就直接用了。首先我用我的xgboost cv集交叉预测出结果作为feature的一部分放到train data中,再对test data进行预测的结果作为feature的一部分放到test data中,再在第二层上选择了Logistic Classifer,GradientBoostingClassifer,AdaBoostClassifer,NNSoft-maxClassfier,RandomForestClassifer等进行交叉预测,第三层选取了一个randomForest作为最后的结果训练和预测。Stacking主要增多了模型的diversity,使我的成绩上升了至少0.003的量级。

    然后是Averaging,之前提到过Stacking需要交叉预测,我就选取了10组随机种子分别对训练集进行10-kfold交叉预测取平均,以及每个flod训练预测的时候我都对我的xgboost选取5个随机种子取平均。也就是说,在第一层Stacking的CV集交叉预测时我总共训练了500个模型进行平均。分数的提升大约在0.002左右。

    直到比赛结束看了排名靠前的选手的模型融合后,才发现自己对于模型融合只是做了一点微小的工作,提升空间还非常大。详情可以看FE部分分享的solution链接。

    Tricks

    在这场比赛中有一名在一开始的两个月一直遥遥领先的选手爆出这个比赛有个magic feature,大家陷入了疯狂找这个feature的过程中,直到那位分享了StackNet的选手分享出了这个magic feature:80G图片数据每个文件夹的创建时间,于是榜单大变,我一觉醒来后发现自己掉了很多就发现到了不对劲,便迅速加入到这个magic feature疯狂屠榜的大军中,从这里可以看见,一个信息量巨大的feature如果被发现的话,对比赛成绩会带来多么大的影响。

    有一些group的feature能够起到非常重要的作用,详细见我比赛后发表的一个小样例discussion topic。但是一定要防止过拟合。

    总结

    这篇博文还有一些关键的点没有涉及到,比如数据的清洗,有些数据在记录中似乎是不同的,但是意思是一样的,就应该归位同一个类别,还有就是清除一些outlier等。

    对这个比赛的top solution总结得还是没到位,基本没有coding实现他们的idea过。由于课程压力比较大,等到时候空了的时候再好好整理。

    另外还有就是需要持之以恒地打这个比赛,因为你以为你idea都没有了,模型调参、融合完毕了的时候,可能大家都找出了另一个"magic feature",轻松地把你挤出奖牌的范围内了。

    最后,Kaggle is fun!


    展开全文
  • kaggle入门之如何使用

    万次阅读 多人点赞 2017-10-13 09:14:57
    大数据竞赛平台——Kaggle 入门篇 这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文。本文分为两部分...

    大数据竞赛平台——Kaggle 入门篇



    这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文。本文分为两部分介绍Kaggle,第一部分简单介绍Kaggle,第二部分将展示解决一个竞赛项目的全过程。如有错误,请指正!


    1、Kaggle简介

    Kaggle是一个数据分析的竞赛平台,网址:https://www.kaggle.com/

    企业或者研究者可以将数据、问题描述、期望的指标发布到Kaggle上,以竞赛的形式向广大的数据科学家征集解决方
    案,类似于KDD-CUP(国际知识发现和数据挖掘竞赛)。Kaggle上的参赛者将数据下载下来,分析数据,然后运用机
    器学习、数据挖掘等知识,建立算法模型,解决问题得出结果,最后将结果提交,如果提交的结果符合指标要求并且在参赛者中排名第一,将获得比赛丰厚的奖金。更多内容可以参阅:大数据众包平台

    下面我以图文的形式介绍Kaggle:

    进入Kaggle网站:


    这是当前正在火热进行的有奖比赛,有冠军杯形状的是“Featured”,译为“号召”,召集数据科学高手去参赛。下面那个灰色的有试剂瓶形状的是“Research”,奖金少一点。这两个类别的比赛是有奖竞赛,难度自然不小,作为入门者,应该先做练习赛:



    左图的比赛是“101”,右图的是“Playground”,都是练习赛,适合入门。入门Kaggle最好的方法就是独立完成101和playground这两个级别的竞赛项目。本文的第二部分将选101中的“Digit Recognition”作为讲解。

    点击进入赛题“Digit Recognition


    这是一个识别数字0~9的练习赛,“Competition Details“是这个比赛的描述,说明参赛者需要解决的问题。”Get the Data“是数据下载,参赛者用这些数据来训练自己的模型,得出结果,数据一般都是以csv格式给出:



    其中,train.csv就是训练样本,test.csv就是测试样本,由于这个是训练赛,所以还提供了两种解决方案,knn_benchmark.R和rf_benchmark.R,前者是用R语。言写的knn算法程序,后者是用R语言写的随机森林算法程序,它们的结果分别是knn_benchmark.csv和rf_benchmark.csv。关于csv格式文件,我前一篇文章有详述:【Python】csv模块的使用

    得出结果后,接下来就是提交结果”Make a submission“


    要求提交的文件是csv格式的,假如你将结果保存在result.csv,那么点击”Click or drop submission here“,选中result.csv文件上传即可,系统将测试你提交的结果的准确率,然后排名。

    另外,除了“Competition Details“、”Get the Data“、”Make a submission“,侧边栏的”Home“、”Information“、"Forum"等,也提供了关于竞赛的一些相关信息,包括排名、规则、辅导......

    【以上是第一部分,暂且写这么多,有补充的以后再更】


    2、竞赛项目解题全过程

    (1)知识准备


    首先,想解决上面的题目,还是需要一点ML算法的基础的,另外就是要会用编程语言和相应的第三方库来实现算法,常用的有:
    Python以及对应的库numpy、scipy、scikit-learn(实现了ML的一些算法,可以直接用)、theano(DeepLearning的算法包)。
    R语言、weka
    如果用到深度学习的算法,cuda、caffe也可以用
    总之,使用什么编程语言、什么平台、什么第三方库都无所谓,无论你用什么方法,Kaggle只需要你线上提交结果,线下你如何实现算法是没有限制的。

    Ok,下面讲解题过程,以”Digit Recognition“为例,数字识别这个问题我之前写过两篇文章,分别用kNN算法和Logistic算法去实现,有完整的代码,有兴趣可以阅读:kNN算法实现数字识别 Logistic回归实现数字识别


    (2)Digit Recognition解题过程


    下面我将采用kNN算法来解决Kaggle上的这道Digit Recognition训练题。上面提到,我之前用kNN算法实现过,这里我将直接copy之前的算法的核心代码,核心代码是关于kNN算法的主体实现,我不再赘述,我把重点放在处理数据上。

    以下工程基于Python、numpy

    • 获取数据

    从”Get the Data“下载以下三个csv文件:


    • 分析train.csv数据

    train.csv是训练样本集,大小42001*785,第一行是文字描述,所以实际的样本数据大小是42000*785,其中第一列的每一个数字是它对应行的label,可以将第一列单独取出来,得到42000*1的向量trainLabel,剩下的就是42000*784的特征向量集trainData,所以从train.csv可以获取两个矩阵trainLabel、trainData。

    下面给出代码,另外关于如何从csv文件中读取数据,参阅:csv模块的使用


    1. def loadTrainData():  
    2.     l=[]  
    3.     with open('train.csv') as file:  
    4.          lines=csv.reader(file)  
    5.          for line in lines:  
    6.              l.append(line) #42001*785  
    7.     l.remove(l[0])  
    8.     l=array(l)  
    9.     label=l[:,0]  
    10.     data=l[:,1:]  
    11.     return nomalizing(toInt(data)),toInt(label)  
    save_snippets.png
    def loadTrainData():
        l=[]
        with open('train.csv') as file:
             lines=csv.reader(file)
             for line in lines:
                 l.append(line) #42001*785
        l.remove(l[0])
        l=array(l)
        label=l[:,0]
        data=l[:,1:]
        return nomalizing(toInt(data)),toInt(label)

    这里还有两个函数需要说明一下,toInt()函数,是将字符串转换为整数,因为从csv文件读取出来的,是字符串类型的,比如‘253’,而我们接下来运算需要的是整数类型的,因此要转换,int(‘253’)=253。toInt()函数如下:

    1. def toInt(array):  
    2.     array=mat(array)  
    3.     m,n=shape(array)  
    4.     newArray=zeros((m,n))  
    5.     for i in xrange(m):  
    6.         for j in xrange(n):  
    7.                 newArray[i,j]=int(array[i,j])  
    8.     return newArray  
    save_snippets.png
    def toInt(array):
        array=mat(array)
        m,n=shape(array)
        newArray=zeros((m,n))
        for i in xrange(m):
            for j in xrange(n):
                    newArray[i,j]=int(array[i,j])
        return newArray



    nomalizing()函数做的工作是归一化,因为train.csv里面提供的表示图像的数据是0~255的,为了简化运算,我们可以将其转化为二值图像,因此将所有非0的数字,即1~255都归一化为1。nomalizing()函数如下:

    1. def nomalizing(array):  
    2.     m,n=shape(array)  
    3.     for i in xrange(m):  
    4.         for j in xrange(n):  
    5.             if array[i,j]!=0:  
    6.                 array[i,j]=1  
    7.     return array  
    save_snippets.png
    def nomalizing(array):
        m,n=shape(array)
        for i in xrange(m):
            for j in xrange(n):
                if array[i,j]!=0:
                    array[i,j]=1
        return array



    • 分析test.csv数据

    test.csv里的数据大小是28001*784,第一行是文字描述,因此实际的测试数据样本是28000*784,与train.csv不同,没有label,28000*784即28000个测试样本,我们要做的工作就是为这28000个测试样本找出正确的label。所以从test.csv我们可以得到测试样本集testData,代码如下:

    1. def loadTestData():  
    2.     l=[]  
    3.     with open('test.csv') as file:  
    4.          lines=csv.reader(file)  
    5.          for line in lines:  
    6.              l.append(line)  
    7.      #28001*784  
    8.     l.remove(l[0])  
    9.     data=array(l)  
    10.     return nomalizing(toInt(data))    
    save_snippets.png
    def loadTestData():
        l=[]
        with open('test.csv') as file:
             lines=csv.reader(file)
             for line in lines:
                 l.append(line)
         #28001*784
        l.remove(l[0])
        data=array(l)
        return nomalizing(toInt(data))  


    • 分析knn_benchmark.csv

    前面已经提到,由于digit recognition是训练赛,所以这个文件是官方给出的参考结果,本来可以不理这个文件的,但是我下面为了对比自己的训练结果,所以也把knn_benchmark.csv这个文件读取出来,这个文件里的数据是28001*2,第一行是文字说明,可以去掉,第一列表示图片序号1~28000,第二列是图片对应的数字。从knn_benchmark.csv可以得到28000*1的测试结果矩阵testResult,代码:

    1. def loadTestResult():  
    2.     l=[]  
    3.     with open('knn_benchmark.csv') as file:  
    4.          lines=csv.reader(file)  
    5.          for line in lines:  
    6.              l.append(line)  
    7.      #28001*2  
    8.     l.remove(l[0])  
    9.     label=array(l)  
    10.     return toInt(label[:,1])  
    save_snippets.png
    def loadTestResult():
        l=[]
        with open('knn_benchmark.csv') as file:
             lines=csv.reader(file)
             for line in lines:
                 l.append(line)
         #28001*2
        l.remove(l[0])
        label=array(l)
        return toInt(label[:,1])


    到这里,数据分析和处理已经完成,我们获得的矩阵有:trainData、trainLabel、testData、testResult


    • 算法设计
    这里我们采用kNN算法来分类,核心代码:
    1. def classify(inX, dataSet, labels, k):  
    2.     inX=mat(inX)  
    3.     dataSet=mat(dataSet)  
    4.     labels=mat(labels)  
    5.     dataSetSize = dataSet.shape[0]                    
    6.     diffMat = tile(inX, (dataSetSize,1)) - dataSet     
    7.     sqDiffMat = array(diffMat)**2  
    8.     sqDistances = sqDiffMat.sum(axis=1)                    
    9.     distances = sqDistances**0.5  
    10.     sortedDistIndicies = distances.argsort()              
    11.     classCount={}                                        
    12.     for i in range(k):  
    13.         voteIlabel = labels[0,sortedDistIndicies[i]]  
    14.         classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1  
    15.     sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)  
    16.     return sortedClassCount[0][0]  
    save_snippets.png
    def classify(inX, dataSet, labels, k):
        inX=mat(inX)
        dataSet=mat(dataSet)
        labels=mat(labels)
        dataSetSize = dataSet.shape[0]                  
        diffMat = tile(inX, (dataSetSize,1)) - dataSet   
        sqDiffMat = array(diffMat)**2
        sqDistances = sqDiffMat.sum(axis=1)                  
        distances = sqDistances**0.5
        sortedDistIndicies = distances.argsort()            
        classCount={}                                      
        for i in range(k):
            voteIlabel = labels[0,sortedDistIndicies[i]]
            classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
        sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
        return sortedClassCount[0][0]

    关于这个函数,参考:kNN算法实现数字识别

    简单说明一下,inX就是输入的单个样本,是一个特征向量。dataSet是训练样本,对应上面的trainData,labels对应trainLabel,k是knn算法选定的k,一般选择0~20之间的数字。这个函数将返回inX的label,即图片inX对应的数字。
    对于测试集里28000个样本,调用28000次这个函数即可。

    • 保存结果
    kaggle上要求提交的文件格式是csv,上面我们得到了28000个测试样本的label,必须将其保存成csv格式文件才可以提交,关于csv,参考:【Python】csv模块的使用
    代码:
    1. def saveResult(result):  
    2.     with open('result.csv','wb') as myFile:      
    3.         myWriter=csv.writer(myFile)  
    4.         for i in result:  
    5.             tmp=[]  
    6.             tmp.append(i)  
    7.             myWriter.writerow(tmp)  
    save_snippets.png
    def saveResult(result):
        with open('result.csv','wb') as myFile:    
            myWriter=csv.writer(myFile)
            for i in result:
                tmp=[]
                tmp.append(i)
                myWriter.writerow(tmp)


    • 综合各函数

    上面各个函数已经做完了所有需要做的工作,现在需要写一个函数将它们组合起来解决digit recognition这个题目。我们写一个handwritingClassTest函数,运行这个函数,就可以得到训练结果result.csv。


    1. def handwritingClassTest():  
    2.     trainData,trainLabel=loadTrainData()  
    3.     testData=loadTestData()  
    4.     testLabel=loadTestResult()  
    5.     m,n=shape(testData)  
    6.     errorCount=0  
    7.     resultList=[]  
    8.     for i in range(m):  
    9.          classifierResult = classify(testData[i], trainData, trainLabel, 5)  
    10.          resultList.append(classifierResult)  
    11.          print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, testLabel[0,i])  
    12.          if (classifierResult != testLabel[0,i]): errorCount += 1.0  
    13.     print "\nthe total number of errors is: %d" % errorCount  
    14.     print "\nthe total error rate is: %f" % (errorCount/float(m))  
    15.     saveResult(resultList)  
    save_snippets.png
    def handwritingClassTest():
        trainData,trainLabel=loadTrainData()
        testData=loadTestData()
        testLabel=loadTestResult()
        m,n=shape(testData)
        errorCount=0
        resultList=[]
        for i in range(m):
             classifierResult = classify(testData[i], trainData, trainLabel, 5)
             resultList.append(classifierResult)
             print "the classifier came back with: %d, the real answer is: %d" % (classifierResult, testLabel[0,i])
             if (classifierResult != testLabel[0,i]): errorCount += 1.0
        print "\nthe total number of errors is: %d" % errorCount
        print "\nthe total error rate is: %f" % (errorCount/float(m))
        saveResult(resultList)

    运行这个函数,可以得到result.csv文件:


    2 0 9 9 3 7 0 3.......就是每个图片对应的数字。与参考结果knn_benchmark.csv比较一下:


    28000个样本中有1004个与kknn_benchmark.csv中的不一样。错误率为3.5%,这个效果并不好,原因是我并未将所有训练样本都拿来训练,因为太花时间,我只取一半的训练样本来训练,即上面的结果对应的代码是:


    1. classifierResult = classify(testData[i], trainData[0:20000], trainLabel[0:20000], 5)  
    save_snippets.png
     classifierResult = classify(testData[i], trainData[0:20000], trainLabel[0:20000], 5)

    训练一半的样本,程序跑了将近70分钟(在个人PC上)。


    • 提交结果
    将result.csv整理成kknn_benchmark.csv那种格式,即加入第一行文字说明,加入第一列的图片序号,然后make a submission,结果准确率96.5%:





    下载工程代码:github地址

    【完】
    展开全文
  • 关于Kaggle入门,看这一篇就够了

    万次阅读 多人点赞 2017-06-15 09:57:20
    这次酝酿了很久想给大家讲一些关于Kaggle那点儿事,帮助对数据科学(Data Science)有兴趣的同学们更好的了解这个项目,最好能亲身参与进来,体会一下学校所学的东西和想要解决一个实际的问题所需要的能力的差距。...

    这次酝酿了很久想给大家讲一些关于Kaggle那点儿事,帮助对数据科学(Data Science)有兴趣的同学们更好的了解这个项目,最好能亲身参与进来,体会一下学校所学的东西和想要解决一个实际的问题所需要的能力的差距。虽然不是Data Science出身,但本着严谨的科研态度,在进行了大量的调研、学习以及对相关经验者的访谈之后,决定写下这篇专栏,一方面让那些对数据科学(Data Science)有兴趣的求职者和申请者能真正了解这个项目,另一方面也让那些有想法参与进来的人get到正确的打开方式。

    什么是Kaggle?

    Kaggle成立于2010年,是一个进行数据发掘和预测竞赛的在线平台。从公司的角度来讲,可以提供一些数据,进而提出一个实际需要解决的问题;从参赛者的角度来讲,他们将组队参与项目,针对其中一个问题提出解决方案,最终由公司选出的最佳方案可以获得5K-10K美金的奖金。

    除此之外,Kaggle官方每年还会举办一次大规模的竞赛,奖金高达一百万美金,吸引了广大的数据科学爱好者参与其中。从某种角度来讲,大家可以把它理解为一个众包平台,类似国内的猪八戒。但是不同于传统的低层次劳动力需求,Kaggle一直致力于解决业界难题,因此也创造了一种全新的劳动力市场——不再以学历和工作经验作为唯一的人才评判标准,而是着眼于个人技能,为顶尖人才和公司之间搭建了一座桥梁。

    这里有一篇对Kaggle首席科学家Jeremy Howard的采访,介绍了Kaggle的创建初衷及运营模式,即任用最聪明的人解决世界上最棘手的问题;同时,任何公司和组织都可以受益于机器学习的发展进步,感兴趣的同学可以戳这里: 原文链接 ,来进一步了解。

    Kaggle的竞赛模式是什么样的?

    Kaggle上的竞赛有各种分类,例如奖金极高竞争激烈的的 “Featured”,相对平民化的 “Research”等等。但他们整体的项目模式是一样的,就是通过出题方给予的训练集建立模型,再利用测试集算出结果用来评比。同时,每个进行中的竞赛项目都会显示剩余时间、参与的队伍数量以及奖金金额,并且还会实时更新选手排位。在截止日期之前,所有队伍都可以自由加入竞赛,或者对已经提交的方案进行完善,因此排名也会不断变动,不到最后一刻谁都不知道花落谁家。

    由于这类问题并没有标准答案,只有无限逼近最优解,所以这样的模式可以激励参与者提出更好的方案,甚至推动整个行业的发展。

    Kaggle竞赛另一个有趣的地方在于每个人都有自己的Profile,上面会显示所有自己参与过的项目、活跃度、实时排位、历史最佳排位等,不仅看上去非常有成就感,更能在求职和申请的时候起到Certificate的作用。

    Kaggle参赛者的背景大多是什么样的?

    从比赛目标出发,参赛者主要分为两种,一种是以奖金和排名为目的,包括靠奖金为生的职业Kaggler;另外一种就是以提升相关skills和背景为目的业余爱好者甚至在校学生了。

    从背景来看,前者的来源主要有丰富data science、data mining、machine learning工作经验的业内人士,或者是实力强劲的民间“技术宅”;而后者则往往是一些有一定技术能力,但经验欠缺,从中进行学习和锻炼的“长江后浪”。

    0基础的人如何上手Kaggle?

    理论上来讲,Kaggle欢迎任何数据科学的爱好者,不过实际上,要想真的参与其中,还是有一定门槛的。一般来讲,参赛者最好具有统计、计算机或数学相关背景,有一定的coding技能,对机器学习和深度学习有基本的了解。Kaggle任务虽然不限制编程语言,但绝大多数队伍会选用Python和R,所以你应该至少熟悉其中一种。此外,对于那些对成绩有追求的人,Feature Engineering也是必不可少的。但对于Data Science的入门者来说,这样的要求实在是有些过分了。对于这一块想要进一步了解的同学可以看这个问题:特征工程到底是什么?其中@城东 的答案(点这里)和@张戎 的答案(点这里)都非常详细。

    当然,如果你从未独立做过一个项目,还是要从练习赛开始熟悉。因为竞赛模式中的任务是公司悬赏发布的实际案例,并没有标准的答案;而练习赛不仅项目难度低,而且是有官方给出的参考方案的,大家可以用来对比改善自己的测试结果,从中进行提高。所以呢,建议感兴趣的同学先去独立做一下101和playground的训练赛,至于做多少个案例才能上道,就要看个人素质啦。这里为大家推荐几篇非常好的文章,里面手把手的教了大家入门级的两个经典练习项目,供大家学习。

    1. Titanic(泰坦尼克之灾)

    中文教程: 逻辑回归应用之Kaggle泰坦尼克之灾 (点击查看)

    英文教程: An Interactive Data Science Tutorial (点击查看)

    2. House Prices: Advanced Regression Techniques(房价预测)

    中文教程: Kaggle竞赛 — 2017年房价预测 (点击查看)

    英文教程: How to get to TOP 25% with Simple Model using sklearn (点击查看)

    3. Digital Recognition(数字识别)

    中文教程: 大数据竞赛平台—Kaggle 入门 (点击查看)

    英文教程: Interactive Intro to Dimensionality Reduction (点击查看)

    Kaggle竞赛获奖及取得名次难么?

    Kaggle竞赛取得奖金乃至取得好的名次的难度都是非常高的,通常一个项目的参与人数都能达到数千人,而其中只有Top 1可以得到奖金,可以说是高手中的高手。通常来说,几个具有一定水平的业内人士在临时组队的情况下最多也就拿到20名左右的成绩,想要再往前冲往往都需要有一定程度的默契和合作经验了。

    所以,对于以学习与实践为目的的小白选手来说,不要太在意排名,从参赛的过程中不断地提升自己才是最终的目的。当经过一次又一次的洗礼最终取得一个不错的成绩后,相信你也已经成长为可以在相关领域独当一面的人才了。

    Kaggle竞赛的认可度高么?

    Kaggle作为Data Science业内享有盛名的平台,在业界拥有极高的认可度。所以如果你是想寻找相关行业的工作,那一个漂亮的Kaggle profile将为你的简历增色不少。Quora上的这个问题: How can we use Kaggle? (点击查看)就提到,把Kaggle的项目经验写在Linkedin上可以很直观的展现自己作为一个Data Scientist的能力。

    国内亦有一些高级人才对Kaggle有很高的认知度,比如Edward.Fu - 知乎 一直在知乎各个和Kaggle相关的问题下留言寻觅Kaggle比赛经验丰富的人,表示常年有这方面的需求,说明国内对Kaggle的项目经验也是非常认可的。如@Lau Phunter在Kaggle 的比赛在 Machine Learning 领域中属于什么地位? 回答下面所说的:

    “写上参加过Kaggle比赛,我会看简历。

    得过一次10%,我会给电话面试。

    得过2次或者以上10%,我会给on site面试。

    得过一次前10,我们会谈笑风生。”

    参加Kaggle是一种怎样的体验?

    在调研的过程中我采访了几个Kaggler,将他们的亲身经验做了一下总结:

    Kaggler A ,NYC Data Science Academy team leader/ 美国数据电子交易公司CEO,多次参加Kaggle比赛:

    参加此项目,你不可或缺的品质就是持续的热情和坚韧不拔的毅力,即使是像我这样的老司机,和另外两个专攻CS和统计方向的小伙伴组队,一个难度中等的项目做下来也要投入两周,每天工作10h以上。更别提那些有着强迫症,一遍遍修改方案,直至deadline的完美主义大牛了。我相信没有一支夺冠队伍是在提交方案后完全没改过的,顶尖高手的成功不仅是基于他们的专业素养,还有其背后我们看不到的勤奋。

    Kagger B ,某知名大数据公司的数据分析师,在美国读统计研究生期间曾通过Kaggle项目提升自己数据操作技能:

    我是统计本科申请一年半的统计Master,目前刚刚回国工作。在出国前对Kaggle也是闻所未闻,来到美国以后,在导师的引导下知道了Kaggle这个巨大的学习源,经常在上面学习。在我看来,Kaggle的背书还是非常有用的,排位前几十的都是大神级别,他们从来不需要找工作,都是工作来找他们。而对我们这样的小白,如果没有整块时间找实习或者没有找到合适的实习机会,利用闲暇时间做一些Kaggle项目,写在简历上也能算做一些项目经验,更容易得到面试;同时,在做项目的过程中,实实在在的Skills的提高也能让我们在求职时笔试的表现更好,获得更好的工作机会。

    除此之外,知乎上面著名的“体验贴”也给出了很多第一手的体验: 参加kaggle竞赛是怎样一种体验? - 大数据 - 知乎 。在这个问题下Naiyan Wang 给出了一个非常详细的答案,同时答主也有一个很好的Profile,文中涉及Kaggle侧重的能力,比赛的要点,以及关键的技术,欢迎大家围观~

    Kaggle的竞争非常激烈,正如OFuture T - 知乎

    所说,很多时候Kaggle的排名即便是前50位流动性也很大,从前几名跌至几十名不过一两天的事,可想而知想要保住排位要在此付出多大的时间和精力,一次次的推翻自己,碾压别人,真是个磨人的小妖精。。。

    Kaggle有什么意义?

    • 从求职者的角度来看:

    Kaggle提供了一个非常好的学习平台,在这里你可以接触到真正的业界案例,收获实际的项目经验,在每一个项目中不断挑战自己,甚至在Kaggle榜上占据一席之位,提高自己在业内的知名度,优秀的排位甚至可能带来的非常好的工作机会。同时,也可以认识一群志同道合的人,扩展自己的professional network,与业内最顶尖的高手互动,尤其是很多队伍在比赛结束后都会公开自己的解法,如果这个项目恰好你参与过,为之投入过无数个日日夜夜,此时就是不可多得的学习机会。

    对于刚刚进入这个行业的菜鸟而言,参加Kaggle的项目是非常“长见识”的,可能初期的尝试会非常吃力,毕竟都是非常前沿的问题,但是如果能坚持完整的把一个项目做下来,且不说coding能力会有一个很大的提高,在实际案例中解决问题的能力也会得到极大的锻炼,为自己的职业生涯打下一个良好的基础。如果能在Kaggle这种高手云集的比赛中获得一个还不错的成绩,写在简历上足以打动你今后的Boss,跳槽就翻倍的高薪工作指日可待!值得一提的是,虽然是汇集精英的社区,Kaggle的论坛氛围很好,对新人非常友好,大家一定要多看Script多请教!

    • 从申请者的角度来看:

    对于申请Data Science相关专业的同学来讲,大数据的走红使得Data Science的申请竞争愈演愈烈,因此如何提升背景也是大家非常关心的问题。而Kaggle正好给大家提供了一个非常好的平台,在这里人人有参与项目的机会,无论你的背景是什么,都可以通过选择合适的项目来找到属于自己的位置,利用自己的专业优势,为整个team作出贡献,丰富简历的同时也能学习一些干货,为自己以后的学习打好基础。而其在领域内的知名度足以让你在众多申请者中脱颖而出,绝对是申请利器!

    对于新人,如何在Kaggle中提升排位?

    • 选择合适的队友:

    由于Kaggle的项目是由公司提供的,涉及各个行业,所以一般都是不同背景的人组队参加(如统计、CS、DS,项目相关领域如生物等)。因此对于新手来讲,很重要的一点就是要抱好大腿,不仅可以蹭到好的排名,还有机会近距离向大牛学习,技能值必然嗖嗖涨。而自己可以从力所能及的工作做起,如清洗数据等等,积累项目经验。

    • 选择“正确”的项目;

    首先,选择数据量小的项目,这样不管使用什么算法都不会耗时太久,对机器性能要求也不高,出结果也比较快;其次,选择难度低奖金少的项目,一方面竞争小,另一方面也适合新手;最后,选择参与人数多的项目,毕竟有那么多“僵尸号”撑着。这样下来,基本上认认真真做下来排名都不会太难看。

    • 选择恰当的工具:

    我们都知道循序渐进的道理,因此对于刚刚涉猎Kaggle,只是希望从中学习,而不追求高排名的同学,可以先从学习Machine Learning中常用的模型开始,比如Logistic Regression和Random Forest,这两个模型对于大部分问题就够了;基础好的还可以学习一下Gradient Boosting,虽然难度高一点,但是可视化效果会好很多。

    当然,说到底,想获得更好的名词,提高自己的skill才是终极解决方案!

    最后是彩蛋时间:

    这里有超级良心的手把手教程, 如何在 Kaggle 首战中进入前 10% , 详细介绍了Kaggle项目的大致流程,包括Data Exploration, Statistical Test, Data Processing, Feature Engineering, Model Selection, Ensemble Generation每一步该怎么做,有哪些Tips,最后还给出了一个“Home Depot Search Relevance”的案例,拿到它就可以开始自己的Kaggle排位赛了!祝愿大家都能够成为一个优秀的Data Scientist!

    接下来是我整理的一些相关的学习资源,大家各取所需。

    • 基础准备篇之Python

    怎么用最短时间高效而踏实地学习 Python?

    你是如何自学 Python 的?

    在线教育网站(Coursera网易云edx课堂腾讯课堂等)有哪些值得推荐的 Python 教程?

    • 基础准备篇之R

    业余时间如何学数据分析?

    如何高效地学好 R?

    好看的数据可视化的图片是怎么样做的?

    • 基础准备篇之Machine Learning

    机器学习该怎么入门?

    深度学习如何入门?

    JustFollowUs/Machine-Learning

    • 基础准备篇之Kaggle Experience

    从Python菜鸟到Python Kaggler的过程:

    Python机器学习实践与Kaggle实战

    经常更新的的大数据博客

    TO最爱学习的你:国外大数据博客资源大全 | 36大数据

    How to start doing Kaggle competitions?

    What do top Kaggle competitors focus on?

    A Journey Into Data Science

    Techniques to improve the accuracy of your Predictive Models

    展开全文
  • Kaggle竞赛入门教程之Kaggle简介(新手向)

    万次阅读 多人点赞 2017-02-14 20:39:01
    Kaggle是全球最大的数据科学家汇聚的平台,机器学习高手云集,同时对萌新也很友好。Kaggle网址:https://www.kaggle.com/。本文介绍Kaggle竞赛的规则和官方网站的功能版块。
    Kaggle号称是全球最大的数据科学家汇聚的平台,高手云集,同时对萌新也很友好。Kaggle网址:https://www.kaggle.com/。目前为止(2016.12)网站有这么几个版块:
    1、竞赛competitions
    2、数据datasets
    3、代码kernels
    4、论坛forums
    5、工作机会jobs
     
    从版块的历史沿革来看,kaggel已经不满足与竞赛题目发布-方案征集的定位,正逐步发展成数据科学家学习、交流的综合平台。本篇重点介绍“竞赛”、“数据”、“代码”这几个版块,便于快速开启一个kaggel竞赛题目。

    一、“竞赛”版块

    “竞赛”版块是发布竞赛题目和参加竞赛的入口。参加kaggle的竞赛流程基本是:选一个题目>>下载数据>>训练模型>>提交结果>>查看排名>>优化模型(迭代)>>最终提交>>比赛结束。

    Kaggle竞赛分类

    从参赛者的角度看,竞赛种类有:推荐比赛Featured、人才征募Recruitment、研究型Research、游乐场Playground、入门比赛Getting Started、课业比赛In Class。
     
    推荐比赛Featured是瞄准商业问题带有奖金的公开竞赛。如果有幸赢得比赛,不但可以获得奖金,模型也可能会被竞赛赞助商应用到商业实践中呢。
    人才征募Recruitment的竞赛是赞助企业寻求数据科学家、算法设计人才的渠道。只允许个人参赛,不接受团队报名。
    研究型Research竞赛通常是机器学习前沿技术或者公益性质的题目。竞赛奖励可能是现金,也有一部分以会议邀请、发表论文的形式奖励。
    游乐场Playground里的题目以有趣为主,比如猫狗照片分类的问题。现在这个分类下的题目不算多,但是热度很高。
    入门比赛Getting Started给萌新们一个试水的机会,没有奖金,但有非常多的前辈经验可供学习。很久以前Kaggle这个栏目名称是101的时候,比赛题目还很多,但是现在只保留了4个最经典的入门竞赛:手写数字识别、沉船事故幸存估计、脸部识别、Julia语言入门。
    课业比赛In Class是学校教授机器学习的老师留作业的地方,这里的竞赛有些会向public开放参赛,也有些仅仅是学校内部教学使用。
    除此以外,还有大师邀请赛Master前沿探索型Kaggle Prospect等非公开的竞赛,这里不做介绍了。

    Kaggle竞赛的排名机制

    了解Kaggle的排名机制也会对取得好成绩有所帮助。在比赛结束之前,参赛者每天最多可以提交5次测试集的预测结果。每一次提交结果都会获得最新的临时排名成绩,直至比赛结束获得最终排名。在比赛过程中,Kaggle将参赛者每次提交的结果取出25%-33%,并依照准确率进行临时排名。在比赛结束时,参赛者可以指定几个已经提交的结果,Kaggle从中去除之前用于临时排名的部分,用剩余数据的准确率综合得到最终排名。所以,比赛过程中用于最终排名的那部分数据,参赛者是始终得不到关于准确率的反馈的。这样一定程度避免参赛模型的过拟合,保证评选出兼顾准确率和泛化能力的模型。

    二、数据Datasets版块

    每一个竞赛题目都有一个数据入口,描述数据相关的信息,与主页上的Datasets选择一个数据其实指向同一个地方。在这里可以下载到提交结果的示范、测试集、训练集。Kaggle的数据以CSV格式最常见,提交的结果也要求是CSV格式。 


    三、代码Kernels

    这是Kaggle最棒的功能!在这里可以看到其他参赛者自愿公开的模型代码,是学习和交流的最佳所在!当然这个版块取名为kernels,意味支持线上调试和运行你的代码,目前支持Python、R,当然也支持像numpy、pandas流行的数据分析库。对那些暂时缺少硬件资源的参赛者,相当于Kaggle提供了一个“云计算”平台不是吗?我在kernels里简单写了一个脚本查看kaggle提供的平台硬件信息:(是说内存有110+G多么?)
     
    总之,可以作为一个备选的计算资源,毕竟一个竞赛的训练集都至少有几十M呢。

    最后

    “竞赛”、“数据”、“代码”这三个版块的基本情况介绍完毕,后两个版块都是围绕“竞赛”设置的,每个版块都有内嵌的链接跳转到另外的版块,又都发展出独立的功能。快开始一个Kaggle比赛吧!

    本篇译作主要参考Kaggle官方网站的wiki(https://www.kaggle.com/wiki/Home)
    展开全文
  • 我的第一个kaggle铜牌经历

    千次阅读 2019-04-17 13:24:38
    参加的这次kaggle比赛是一个关于客户购买预测的机器学习的比赛,最终Public和Private榜综合计算后名次是458/8800,这也是第一个完成度最高的比赛,以往天池的比赛都是跟进几天就不再做了。亲自看着从参加此比赛时的...
  • https://cloud.tencent.com/developer/article/1045261https://zhuanlan.zhihu.com/p/27424282
  • Kaggle,天池 等数据比赛经验总结

    千次阅读 2018-12-20 10:40:38
    分分钟带你杀入Kaggle Top 1% 数据(机器学习/深度学习)竞赛平台——Kaggle Kaggle 首战拿银总结 | 入门指导 (长文、干货) 分享一波关于做Kaggle比赛,Jdata,天池的经验,看完我这篇就够了 使用sklearn做单机...
  • Kaggle简介

    千次阅读 2018-03-08 17:55:09
    由于选修了数据挖掘课程,课程作业是完成Kaggle上的一个比赛,所以在机缘巧合下就知道了Kaggle这个平台,事实上我认为这是用来练手数据挖掘的一个绝佳场所。这篇文章适合和我一样刚接触Kaggle的朋友,对于已经熟悉...
  • 大数据竞赛平台——Kaggle 入门

    万次阅读 多人点赞 2014-12-14 22:57:10
    大数据竞赛平台——Kaggle 入门篇 这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文。本文分为两部分介绍Kaggle,...
  • Kaggle比赛整理

    万次阅读 2018-06-16 12:53:02
    传送门:https://www.kaggle.com/competitions点击打开链接这里仅列出前50个比赛,全部的271个比赛word版下载地址:正在进行的比赛1、 Home Credit Default Risk利用各种替代数据(包括电信和交易信息)预测客户的...
  • kaggle 相关知识汇总(转载+自己整理)

    千次阅读 2020-07-31 15:04:21
    (在知乎中分别搜索kaggleKaggle stack之后所有信息的摘录) 刚参加一个比赛,需要花点时间了解这个比赛的领域背景,甚至需要查一些资料或阅读一些文献,这对后面构建特征和选择模型很重要。我看到有很多 winners ...
  • 如何在kaggle上面快速下载数据?

    万次阅读 热门讨论 2020-10-10 23:22:44
    如何在kaggle上面快速下载数据? 现在做数据科学工作的,大部分都曾在kaggle上下载过数据集,但是最近kaggle好像搞了个API接口,这样很方便下载数据集,具体步骤如下(参考kaggle数据集下载:...
  • Kaggle注册及使用方法

    万次阅读 2018-03-11 13:17:53
    目前开始学习机器学习,学习时想不到什么实战的项目可做,然后就搜索了一些项目,这就找到了KaggleKaggle上由机器学习的项目,有数据,各种竞赛。用户可以随便参加竞赛,下载数据,然后得到成绩排名,排名在前的人...
  • kaggle 收不到手机验证码

    万次阅读 热门讨论 2017-04-12 15:07:35
    kaggle 下载数据的时候需要 验证手机号 但一直收不到手机验证码格式: +860手机号 即可
  • kaggle手机验证不了的解决方案

    千次阅读 2018-04-20 13:55:34
    问题:kaggle账号验证手机号时,总是出问题原因:墙的存在解决方案:1.出墙2.然后将手机号格式填成:+860手机号如,若手机号为:17110111011,则格式为“+86017110111011“。...
  • kaggle数据集下载

    万次阅读 2019-03-02 13:55:13
    本文介绍了如何下载kaggle数据集的方法。 若有错误,请在评论中为我指出来,不胜感激。 文章目录1 介绍2 安装kaggle库3 注册kaggle账号4 找到自己想要的数据集5 接受规则5 下载kaggle身份认证的 json文件6 下载数据...
  • Kaggle上提交训练结果有两种方式: 在Kaggle页面上直接提交 使用指令提交 先看第一种提交方式 1、Kaggle页面上直接提交 不过,目前为止这个页面我只见过一次,后面再打开就不能提交了,好吧这是强迫我使用...
  • 如果在该目录下没有.kaggle文件夹,先确认kaggle已经安装成功,然后在环境中输入任意一个kaggle命令(例如获取比赛列表kaggle competitions list), 出现需要令牌的提示后再刷新该目录。 ...
  • kaggle三个入门竞赛教程

    千次阅读 2018-04-22 14:16:43
    1. Titanic(泰坦尼克之灾)中文教程: 逻辑回归应用之Kaggle... House Prices: Advanced Regression Techniques(房价预测)中文教程: Kaggle竞赛 — 2017年房价预测 (点击查看)英文教程: How to ge...
  • 下载kaggle数据集

    千次阅读 2018-11-05 17:05:04
    下载kaggle数据集 在kaggle上下载数据集需要使用kaggle给定的API,在shell中进行命令操作即可下载 首先,需要安装pip 然后,安装kaggle,使用如下命令: pip install kaggle 之后,注册并登陆kaggle网站,在...
1 2 3 4 5 ... 20
收藏数 24,967
精华内容 9,986
关键字:

kaggle