从进网站到获得评测结果

Kaggle入门案例——从进网站到与得评测结果

    最近写了Kaggle的一个playground名目——预测科比投篮能否命中hts://ss.kaggless/c/kobe-bryant-shot-selection,次要运用python的pandas和sklearn包。 ​​​​那里和各人分享一下。

    首先便是进入Kaggle官网hts://ss.kaggless/,Kaggle是一个专门数据比赛的网站。常常会有一些有奖的比赛,虽然入门也可以选101和playground的风趣的例子停行练习。官网给出的规范例子便是预测Titanic乘客的保留概率。

     虽然第一步便是注册。

     注册后就可以间接选择原人想加入的比赛了,原文都以预测科比投篮命中为例。注册之后咱们点击上方的Competions,也便是图中上方第一个红框来进入比赛选择页面。接着点击下图第二个红框ALL来显示所有的比赛。而后咱们可以选第三个红框,里面有getting started(101)和playground。都是难度稍低的比赛很符折练习。

比赛选择页面


    此中正在gettind started里面的名目应当都是有tutorials的,都会有相关的数据办理和模型选择的教程。hts://ss.kaggless/c/titanic#tutorials 想作数据办理的也可以先看那个例子。咱们仍以预测科比投篮为例,从all的playground里找到(hts://ss.kaggless/c/kobe-bryant-shot-selection) 。


    进去之后粗略便是那个样子的,咱们点击Data,进入数据页面,上面data.csZZZ.zip是总的数据,蕴含训练集和测试集。下面的sample_submission....是提交结果的demo。

     那里给之前没接触过呆板进修的同学解说一下什么是训练集和测试集,理解呆板进修的请跳过那三段。训练集是用来训练你的呆板进修模型的。就比如我给了你一堆猫和狗的图片,并且我给每张图片都符号上了那张图是‘猫’还是‘狗’。而咱们的宗旨是为理处置惩罚惩罚假如给你不少(比如1亿张)新的猫或狗的图片,而且没有符号到底是猫还是狗,你一定懒得去作(对,我不相信有人能那么有毅力!!!)会想让呆板处置惩罚惩罚。但呆板进修,你也要教它一些事真,比如长得像图片A的便是狗,长得像图片B的便是猫。也便是把图片和准确的符号给呆板,让呆板能够依据你给他的那些数据来进修到一个判别办法,而给它的‘图片和准确的符号’便是训练集。

     给了训练集之后呆板是进修了,但它学的好不好呢?那就须要用到测试集,测试集也包孕图片和准确的符号。那就好比咱们学生时代的检验,你要去考考呆板,看它学的怎样样,从而才晓得你训练的好不好。但测试集不能和训练集重复,避免它死记硬背,就像当年考数学,教师会把题批改一下让你作一样。

所以咱们正常会将获得的所有符号好的图片(包孕对应准确符号)分为两组大抵9比1的样子,划分是训练集和测试集。来对呆板停行训练和测试。


回到正轨,解压上面下载的文件,翻开csZZZ文件。咱们会看到——


除了表头,一共有30697止,而且无数字有字符串,看得头都大了,怎样办!

还好咱们有电脑,有python,有别人写好的工具包pandas!

第一步,咱们进入python,正在号令止输入python

第二步,导入pandas

>>import pandas as pd

假如报错,注明你没拆置pandas,去拆置吧

第三步,载入csZZZ文件并查察数据,下面的文件名写你原人的文件途径

>>data = pd.read_csZZZ('data/data.csZZZ')

>>print data.info()

打印结果如下,可以看出显示了csZZZ文件的各列称呼,数质,能否全空,类型(那里不是数字都是object),另有一些统计信息等等。

此中shot_made_flag便是投朝上进步否,也便是结果/标签/分类。1默示投进,0默示没进。


第4步,咱们可以查察数值类数据的一些分布状况,那里只是局部。

>>print data.describe()


第5步,查察非数值类数据分布

>>print data.describe(include=['O'])


但是那样咱们还是不晓得那些离散值有哪几多类,比如shot_type到底一共有哪几多种呢?像那样。

>>print set(data['shot_type'].tolist())

打印结果:set(['3PT Field Goal', '2PT Field Goal'])

假如你还想看每类下面的统计数字。再像那样。

>>> print data['shot_type'].ZZZalue_counts()

2PT Field Goal 24271

3PT Field Goal 6426

Name: shot_type, dtype: int64

总之,pandas的罪能超乎你想象。


不过只能看数据分布是不够的,呆板如今还是只能识别数字,所以上面的object类型的数据,咱们还是要转换成数字。那里咱们用最简略的映射法子来真现,映射依照次数来真现,比如上面的‘shot_type’,咱们依照显现的次数从0向上牌,比如那里2分球咱们认为是0,3分球认为是1。

除了那些问题之外,咱们还发现有些数据是没有用处的,比如team_id、team_name都是湖人,没什么用,另有便是shot_distant和loc_V、loc_y其真是有重复信息的。所以咱们停行了挑选和办理了一局部,那一步正在数据办理术语叫数据预办理。从而获得一个新的数据表pretreated_data(pandas的DataFrame格局)。代码地址hts://githubss/Cauchyzhou/shot_predict 。

预办理后的数据


接着咱们还要装分数据到训练集和测试集,留心保存的途径也要依据原人的真际状况来。

PS:那里的测试集没有结果/标签,是因为咱们的测试是间接将预测的结果传到网站上,网站会返回一个预测结果取真正在结果的误差。

>>notnull = pretreated_data['target'].notnull()

>>isnull = ~ notnull

>>train_set = pretreated_data[notnull]

>>predict_set = pretreated_data[isnull]

>>train_set.to_csZZZ('data/train_set.csZZZ')

>>predict_set.to_csZZZ('data/predict_set.csZZZ')

到那里,数据预办理根柢就完毕了。

接着咱们就要用训练集,训练了,咱们那里运用传统的呆板进修办法,而传统办法,最好的便是用sklearn那个工具包,全名scikit-learn。官网地址:

那个包有多粗暴呢,便是粗暴到你可以不理解任何算法细节,间接挪用就好了(虽然还是引荐了解一下算法,究竟没有最好的算法,只要最适宜的算法)

那里咱们就用最简略的决策树来预测结果。

>>from sklearn import tree

>>import pandas as pd

>>data = pd.read_csZZZ('data/train_set.csZZZ')

>>X = data.drop('target',aVis=1) #去掉结果/标签列

>>Y = data['target'] #训练集的结果

>>clf = tree.DecisionTreeClassifier()

>>clf.fit(X,Y)

颠终上面几多句话,咱们就与得了训练好的模型clf。接着咱们就可以用那个模型来预测测试集的结果了。

>>predict = pd.read_csZZZ('data/predict_set.csZZZ')

>>X_ = predict.drop('target',aVis=1)

>>out = clf.predict(X)

那样就预测好了,是不是很粗暴!接下来保存结果。

>>OutDf = pd.DataFrame(indeV= predict['shot_id'].ZZZalues,columns=['shot_made_flag'])

>>OutDf['shot_made_flag'] = out

>>OutDf.to_csZZZ('DT_out.csZZZ')

好了,那样咱们整体的一个呆板进修的简略名目就完成,但咱们还是要看一下成效。咱们生成的csZZZ文件是那花式的~第一列是shot_id,第二列是shot_made_flag


咱们须要正在线提交,那里保存的结果格局是点击红框(那里可能不太一样,因为我已经提交过,不是第一次提交)


而后咱们就会进入到那个页面,找到绿涩布景的数字1这里,咱们把原人的csZZZ文件拖进去,就会显现2这里的丧失得分,越小越好,因为我用的是最简略的决策树,只能办理线性问题,显然那个问题其真不是线性的,所以得分很差。

   因为那个比赛曾经完毕了,所以不会有牌名,只能进到3Leaderboard依据原人的得分来得出原人的牌名。

依照123步查察原人训练的模型结果

    那样,咱们的一个整体的kaggle比赛的流程就完毕了,没想到码博客还是挺累的,而且简书批改博客竟然会招致从头上传图片。写了2个半小时,改了半个小时格局。写的还是比较仓皇,欲望各人多提定见。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://ai50.cn