大数据竞赛平台——Kaggle 入门
大数据竞赛平台——Kaggle 入门篇
这篇文章适合那些刚接触Kaggle、想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文。本文分为两部分介绍Kaggle,第一部分简单介绍Kaggle,第二部分将展示解决一个竞赛项目的全过程。如有错误,请指正!
1、Kaggle简介
2、竞赛项目解题全过程
(1)知识准备
(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模块的使用
def loadTrainData():l=[]with open('train.csv') as file:lines=csv.reader(file)for line in lines:l.append(line) #42001*785l.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()函数如下:
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()函数如下:
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]=1return array
- 分析test.csv数据
test.csv里的数据大小是28001*784,第一行是文字描述,因此实际的测试数据样本是28000*784,与train.csv不同,没有label,28000*784即28000个测试样本,我们要做的工作就是为这28000个测试样本找出正确的label。所以从test.csv我们可以得到测试样本集testData,代码如下:
def loadTestData():l=[]with open('test.csv') as file:lines=csv.reader(file)for line in lines:l.append(line)#28001*784l.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,代码:
def loadTestResult():l=[]with open('knn_benchmark.csv') as file:lines=csv.reader(file)for line in lines:l.append(line)#28001*2l.remove(l[0])label=array(l)return toInt(label[:,1])
到这里,数据分析和处理已经完成,我们获得的矩阵有:trainData、trainLabel、testData、testResult
- 算法设计
这里我们采用kNN算法来分类,核心代码:
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)**2sqDistances = sqDiffMat.sum(axis=1) distances = sqDistances**0.5sortedDistIndicies = distances.argsort() classCount={} for i in range(k):voteIlabel = labels[0,sortedDistIndicies[i]]classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)return sortedClassCount[0][0]
关于这个函数,参考:kNN算法实现数字识别
- 保存结果
kaggle上要求提交的文件格式是csv,上面我们得到了28000个测试样本的label,必须将其保存成csv格式文件才可以提交,关于csv,参考:【Python】csv模块的使用。
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。
def handwritingClassTest():trainData,trainLabel=loadTrainData()testData=loadTestData()testLabel=loadTestResult()m,n=shape(testData)errorCount=0resultList=[]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.0print "\nthe total number of errors is: %d" % errorCountprint "\nthe total error rate is: %f" % (errorCount/float(m))saveResult(resultList)
运行这个函数,可以得到result.csv文件:
28000个样本中有1004个与kknn_benchmark.csv中的不一样。错误率为3.5%,这个效果并不好,原因是我并未将所有训练样本都拿来训练,因为太花时间,我只取一半的训练样本来训练,即上面的结果对应的代码是:
classifierResult = classify(testData[i], trainData[0:20000], trainLabel[0:20000], 5)
训练一半的样本,程序跑了将近70分钟(在个人PC上)。
- 提交结果
大数据竞赛平台——Kaggle 入门相关推荐
- 大数据竞赛平台——Kaggle 入门篇
这篇文章适合那些刚接触Kaggle.想尽快熟悉Kaggle并且独立完成一个竞赛项目的网友,对于已经在Kaggle上参赛过的网友来说,大可不必耗费时间阅读本文.本文分为两部分介绍Kaggle,第一部分简 ...
- AI大数据竞赛平台和网站
http://2021全国大学生大数据竞赛含金量如何? - DataCastle数据城堡的回答 - 知乎 https://www.zhihu.com/question/490822570/answer ...
- DC 竞赛-大数据竞赛平台
DC 竞赛-大数据竞赛平台 DataCastle (DC) 专业的数据科学学习社区 http://www.pkbigdata.com/ 旨在为用户提供优质的学习资源和技术交流圈子,帮助全球的数据爱好 ...
- 在Kaggle上赢得大数据竞赛的技巧和窍门
在Kaggle上赢得大数据竞赛的技巧和窍门 解决方案 平台 数据 应用 方法 阅读1906 原文:The tips and tricks I used to succeed on Kaggle 作 ...
- 2020百度大数据竞赛-Top3 故事分享(开源连接)新手入门
IKCEST第二届"一带一路"国际大数据竞赛" 历时三个月的百度大数据竞赛伴随着夏末的阵阵蛙声终于也迎来了尾声,从初赛16名到复赛第3名,从大数据"小白&quo ...
- 【数据竞赛】Kaggle竞赛宝典国内外竞赛方案汇总
本文汇总了kaggle竞赛宝典将近50个竞赛的Top方案&思路&代码.关注"kaggle竞赛宝典"并在后台输入"竞赛宝典",还将获得5个kagg ...
- 【数据竞赛】2020年11月国内大数据竞赛信息-奖池5000万
2020年11月:下面是截止到2020年11月国内还在进行中的大数据比赛题目,非常丰富,大家选择性参加,初学者可以作为入门练手,大佬收割奖金,平时项目不多的,比赛是知识非常好的实践方式,本号会定期发布 ...
- 各大数据竞赛 Top 解决方案汇总
现在,越来越多的企业.高校以及学术组织机构通过举办各种类型的数据竞赛来「物色」数据科学领域的优秀人才,并借此激励他们为某一数据领域或应用场景找到具有突破性意义的方案,也为之后的数据研究者留下有价值的经 ...
- GitHub 干货 | 各大数据竞赛 Top 解决方案开源汇总
AI 科技评论编者按:现在,越来越多的企业.高校以及学术组织机构通过举办各种类型的数据竞赛来「物色」数据科学领域的优秀人才,并借此激励他们为某一数据领域或应用场景找到具有突破性意义的方案,也为之后的数 ...
最新文章
- 女生零基础学软件测试难不难
- 爬虫python编程与cvi编程_与爬虫无关,简单的用python进行科学运算
- python下载安装教程mac-Anaconda2 Mac版下载
- vue2.0 组织机构树形选择组件(类似elementui el-transfer 与 el-tree 两个标签的结合)...
- Eclipse启动项目时,删除workspaces无用的工作区间
- mysql中临时修改参数用什么关键字_postgresql 中的参数查看和修改方式
- “北漂青年”马云建言:未来服务业发展有三大关键词
- java 抽象类 普通类_java的抽象类,接口,普通类是否可以直接NEW,并且复写方法?
- VC获得本机网络连接状态
- 虹软人脸识别java调用依赖Cant‘t find dependent library错误,需安装vc2013运行环境
- 多导睡眠图(PSG)数据的睡眠阶段分类
- 【Pix4d精品教程】Pix4d修编正射影像DOM的两种方法案例详解
- 对联广告php代码,css实现的对联广告代码
- ADNI数据集下载方法(完全步骤)
- 被国人误解了千年的七句话
- convs在MATLAB中,matlab2_MATELAB课程设计_ppt_大学课件预览_高等教育资讯网
- 【数学之美】分形——发现隐藏的维度
- 2022-2027年中国NGB网络建设光通信器件行业市场深度分析及投资战略规划报告
- 开关模式电源 (SMPS)----降压转换器拓扑结构
- 新闻管理系统-javaWeb -大作业-更新版(之前的存在问题)
热门文章
- Zamplus 晶赞天机
- 2022杭电多校(五)
- 如何将有打开密码的PDF转换成Word文件
- android view背景颜色,Android - ViewPager进阶篇之渐变背景色
- 《机械师实时调度示例(I) - 实时规划》的视频翻译
- 免费wordpress模板分享 只推荐好用的
- EXCEL每次保存后,如何在文件名后面自动生成当前日期?
- Apache+Tomcat+Php+Mysql的集成
- Oracle 创建序列及查询序列是否存在
- .htaccess php设置,.htaccess更改php的配置