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

代码中给出了解释
请注意,本文基于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总共只有五十代码左右~我想注释神马的够详细了吧

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python和Keras库来解决Kaggle Digit Recognizer比赛的代码示例: 首先,导入必要的库: ```python import pandas as pd import numpy as np from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D from keras.optimizers import RMSprop from keras.preprocessing.image import ImageDataGenerator from sklearn.model_selection import train_test_split ``` 然后,读取和处理训练数据和测试数据: ```python train_data = pd.read_csv('train.csv') test_data = pd.read_csv('test.csv') # 将数据分成输入和输出 X_train = train_data.drop(['label'], axis=1) y_train = train_data['label'] # 将输入数据重塑为28x28像素 X_train = X_train.values.reshape(-1, 28, 28, 1) test_data = test_data.values.reshape(-1, 28, 28, 1) # 将像素值转换为浮点数并归一化 X_train = X_train.astype('float32') / 255 test_data = test_data.astype('float32') / 255 # 将输出数据转换为独热编码 y_train = pd.get_dummies(y_train).values ``` 接着,将数据分成训练集和验证集,设置数据增强器并构建卷积神经网络模型: ```python # 将数据分成训练集和验证集 X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1) # 设置数据增强器 datagen = ImageDataGenerator( rotation_range=10, zoom_range = 0.1, width_shift_range=0.1, height_shift_range=0.1) # 构建卷积神经网络模型 model = Sequential() model.add(Conv2D(filters=32, kernel_size=(5,5), padding='Same', activation='relu', input_shape=(28,28,1))) model.add(Conv2D(filters=32, kernel_size=(5,5), padding='Same', activation='relu')) model.add(MaxPool2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same', activation='relu')) model.add(Conv2D(filters=64, kernel_size=(3,3), padding='Same', activation='relu')) model.add(MaxPool2D(pool_size=(2,2), strides=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(256, activation="relu")) model.add(Dropout(0.5)) model.add(Dense(10, activation="softmax")) # 定义优化器和损失函数 optimizer = RMSprop(lr=0.001, rho=0.9, epsilon=1e-08, decay=0.0) model.compile(optimizer=optimizer, loss="categorical_crossentropy", metrics=["accuracy"]) ``` 最后,使用训练集和验证集来训练和评估模型,并对测试数据进行预测: ```python # 训练模型 history = model.fit_generator(datagen.flow(X_train, y_train, batch_size=64), epochs=30, validation_data=(X_val, y_val), verbose=2) # 在验证集上评估模型 score = model.evaluate(X_val, y_val, verbose=0) print("Validation loss:", score[0]) print("Validation accuracy:", score[1]) # 对测试数据进行预测 predictions = model.predict(test_data) ``` 这就是一个简单的使用卷积神经网络和数据增强器来解决Kaggle Digit Recognizer比赛的代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值