kaggle 入门

来源:互联网 发布:淘宝原价和现价步骤 编辑:程序博客网 时间:2024/06/05 15:10

kaggle 入门

1,注册kaggle账号
以前从来没有接触过kaggle,有次在某乎上看到还有这东西,于是注册了账号准备试试。
注册的时候邮件验证显示不了验证码,在网上看到说是要翻墙才能看到。于是让能翻墙的同学给我填的验证码。
注册之后就随便摸索一下里面的布局和内容
这里写图片描述
找一个经典入门项目开始分析,选了个Digit Recognizer,因为在机器学习实战上看到过这个案例,就选了它
这里写图片描述
点进去是详细介绍,先看看介绍,然后看看数据格式和内容,在把数据下载到本地
这里写图片描述

使用算法:KNN
算法,python,数据处理都是第一次接触,写的很是low
一共三个数据文件,
- train.csv是训练数据,数据一共是28000*875,第一行是数据描述,第一列是label,将第一行去掉,得到280001*784的数据,第一列拿出来作为trainLabel,其余的是trainSet
- test.csv是测试数据,里面没有label
- sample_submission.csv是提交格式,提交结果就按照这个格式,第一行是ImageId,Label,第一列是序号,第二列为预测结果。


读数据

#csv格式def loadTrainDataSetCsv():    dataMat = []    file = open('train.csv')    #读掉第一行,下次再引用file的时候,将file的文件指针指向第二行开始的文件.    file.readline()       lines = csv.reader(file)    for line in lines:        dataMat.append(line)    dataMatSet = array(dataMat)    labelSet = dataMatSet[: , 0]    trainSet= dataMatSet[: , 1:]    file.close()    return autoNorm(toInt(trainSet)),toInt(labelSet)

归一化特征值

#def toInt(dataSet):    dataSet= mat(array)    m, n = shape(array)    newDataSet = zeros((m, n))    for i in range(m):        for j in dataSet(n):            newDataSet[i, j] = int(dataSet[i, j])    return newDataSet
autoNorm()是将数据中大于0的数字转化为1,toInt是将数据转为int类型,因为csv读出的每行数据放到一个list里,里面是字符串类型的。 接下来是test.csv,该文件第一行没有标签,共28000*784
def loadTestDataSetCsv():    dataMat = []    file = open('test.csv')    lines = csv.reader(file)    for line in lines:        dataMat.append(line)    dataMatSet = array(dataMat)    print(shape(dataMatSet))    file.close()    return autoNorm(toInt(dataMatSet))

sample_submission.csv是提交格式,只需要看看格式就行,将最后的结果保存成为该文件格式
KNN核心代码 ,这个在网上和很多书上都有

#K-近邻算法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):        #选择距离最小的k点        voteIlabel = labels[0,sortedDistIndicies[i]]        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1    sortedClassCount = sorted(classCount.items(),                              key=operator.itemgetter(1), reverse=True)    return sortedClassCount[0][0]

整体运行

def handwritingClassTest():    #加载训练数据    trainDataSet, trainLabelSet = loadTrainDataSetCsv()   #加载测试数据    testDataSet  = loadTestDataSetCsv()    m, n = shape(testDataSet)    errorCount = 0    resultList = []    for i in range(m):        classifierResult = classify(testDataSet[i], trainDataSet,trainLabelSet,5)        classifierResult=int(classifierResult)        resultList.append(classifierResult)        #打印每个测试结果        print("the classifier came back with : %d " % classifierResult)    #保存结果    saveResult('result.csv',resultList)
#保存结果def saveResult(fileName,result):    fr = open(fileName,'w')    result1 = str(result)    #myWriter = fr.writelines(result1)    m = 0    for i in result:        temp=[]        temp.append(i)        m += 1        fr.write(str(m)+','+str(i)+'\n')    fr.close()

第一次提交结果不太好,训练数据切割

这里写图片描述

第二次检查一番数据,发现加载数据的时候切割错了,改正后继续运行
结果如下

这里写图片描述

原创粉丝点击