Kaggle练习赛-digit recognizer-kNN解法全部实现步骤

原创 2015年07月30日 17:08:45

代码中给出了解释
请注意,本文基于kaggel官网数据格式的,请自行先去kaggle官网了解好,不是普通的knn解法

我是从python 新建文档里面直接黏贴过来的,格式神马的与csdn不和谐请原谅。。。。。。。

”’
由于kaggel给的都是csv数据,里面的数据格式还需要处理一下,关于python的csv使用不懂得先去查查资料,本代码用到,但是也只是用到了 读取文件和写入文件而已,你们看看这个足够了

http://blog.csdn.net/u012162613/article/details/41915859
”’

本文简单粗暴有力

==================下面是kaggle_kNN_digit_recognizer的具体代码实现============================

import csv
from numpy import *

======================================================================================================

根据train.csv 42001*785 生成两个矩阵trainlabel和traindata,由于csv是字符格式所有还要自己写个toint转换函数才行,而且由于是0~255灰度值的,所以还要归一化

def loadTrainData():
l=[]
with open(‘train.csv’) as myFile:
lines=csv.reader(myFile)
for line in lines:
l.append(line)
l.remove(l[0]) #第一行的文字部分我们不要的
l=array(l)
label=l[:,0]
data=l[:,1:]
return nomalizing(toInt(data)),toInt(label)
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
def nomalizing(array):#其实归一化可以在toint里面一起完成的哦
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 28001*784 格式

def loadtestData():
l=[]
with open(‘test.csv’) as myFile:
lines=csv.reader(myFile)
for line in lines:
l.append(line)
l.remove(l[0]) #第一行的文字部分我们不要的
data=array(l)
return nomalizing(toInt(data))

========================================================================================================

=============================================前方高能,kNN核心处理算法=====================================

对于28000个样本,调用28000次这个函数即可,可以参见主函数

这部分不懂得,如果kNN核心算法不懂得话,请先去看机器学习算法里面的解释或者猛戳http://blog.csdn.net/u012162613/article/details/41768407,但是这个链接里面的数据格式不是

kaggle给出的csv格式,请看思想即可
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]

=============================================当然要保存数据了,生成csv文件 28000*1 的=======================

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)

=========================================================================================================

============================最后,主函数,把数据预处理,knn计算,结果输出合并起来,4个调用一个不少================

def handwritingClassTest():
trainData,trainLabel=loadTrainData() #调用1
testData=loadTestData() #调用2
##
##testLabel=loadTestResult()如果官方给出了结果 可以下载下来并自己写一个这样的函数处理一下并看看,但是现在官方都不给了,就不用写这个函数了,我前面也没有写的。。自己

直接把自己的结果上传即可,官方给你对比看正确率
##
##errorCount=0
m,n=shape(testData)
resultList=[]
#一共调用了28000次kNN核心算法。。。。。泪。。。。样本愈多,调用次数越多。。。这就是knn方法机器学习的特点。。。。。
for i in range(m):
classifierResult = classify(testData[i], trainData, trainLabel, 5) #调用3 ,k选5是可以的,不要大于20,计算量啊计算量衰
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)) #因为如果你想看错误率的话,那必须是float的呀
saveResult(resultList) #调用4

==========================================================================================================

这就是数据读取,使用knn算法,数据输出的全部过程,用python总共只有五十代码左右~我想注释神马的够详细了吧

版权声明:本文为博主原创文章,可转载但要完整并注明出处。

相关文章推荐

Kaggle项目实战1——Digit Recognizer——排名Top10%

Kaggle项目实战1,MNIST手写数字识别,99%正确率,排名28/554的全过程

Kaggle入门:Digit Recognizer

Kaggle入门:Digit Recognizer数据是经典的lecun大神的mnist手写数字数据集。采用tensorflow进行训练。...

[kaggle实战] Digit Recognizer -- 从KNN,LR,SVM,RF到深度学习

之前看了很多入门的资料,如果现在让我来写写,我觉得我会选择”数字识别(digit recognizer)”作为例子,足够有趣,而且能说明很多问题。kaggle是个实践的好地方,python是门方便的语...

Kaggle项目Digit Recognizer实现(一):三层卷积神经网络

寒假期间学习了斯坦福大学CS231n课程卷积神经网络及以前的内容,并完成了assignment1,assignment2。课程后续内容还在学习中,为了避免遗忘过快,所以尝试着找些相关项目来练手保持热度...

Kaggle竞赛题目之——Digit Recognizer

Classify handwritten digits using the famous MNIST data This competition is the first in a series o...

Kaggle学习之路(三) —— Digit Recognizer之构建Tensorflow图

阅读本篇的先决条件:前面有一步问题分析,这是第二步。第一步请看:http://blog.csdn.net/memoryjdch/article/details/75220498 如果你不懂Tensor...

Kaggle入门:Digit Recognizer

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] Kaggle入门Digit Recognizer 一下载数据二数据读取三训练数据四提交结果到kag...

[kaggle实战] Digit Recognizer -- 从KNN,LR,SVM,RF到深度学习

[kaggle实战] Digit Recognizer -- 从KNN,LR,SVM,RF到深度学习

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

scikit-learn是一个基于NumPy、SciPy、Matplotlib的开源机器学习工具包,采用Python语言编写,主要涵盖分类、 回归和聚类等算法,例如knn、SVM、逻辑回归、朴素贝叶斯...

学习笔记——Kaggle_Digit Recognizer (Random Forest算法 Python实现)

本文是个人学习笔记,该篇主要学习随机森林算法概念,并应用sklearn.ensemble.RandomForestClassifier算法包解决Kaggle入门级Digit Recognizer。 随...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Kaggle练习赛-digit recognizer-kNN解法全部实现步骤
举报原因:
原因补充:

(最多只允许输入30个字)