kaggle上的一个比赛,主要是识别数字的,具体描述可以去官网看一下,然后里面也有数据集,可以下载下来在本地跑,也可以在kaggle的平台上跑,注意去setting下面把GPU的开关打开~~
我之前也写过手写体识别的,在这里 ,用的是logistic regression+softmax 数据集是放在两个文件夹下面,没一个样本是存成一个txt文件的,就是这里导入数据集比较麻烦。
现在的数据要比之前大很多,而且存的是像素值,不过实质是一样的都可以作为特征训练,我这次使用的knn,,没有调现成的包,如果你是想了解算法的原理,这篇文章也许会对你有帮助~~
knn的原理我这里就不再赘述了,思想都在代码中体现了,我最开始建立一个模型,就是把训练数据集拆分80%训练,20%测试,结果预测准确率82%:
然后我使用了前500条数据来跑,然后对测试数据也就预测了100条,写到preditions.csv文件中,结果如下:
然后对于全部数据是在kaggle上面跑的~跑了好久还没出结果~~~
接下来我把两个版本的代码都放上来:
第一个是训练模型的,没有对测试集合进行预测,主要是看模型的好坏~:
# -*- coding: utf-8 -*-
"""
Created on Fri May 11 20:38:13 2018
@author: xuanxuan
"""
from itertools import islice
import numpy as np
from sklearn.cross_validation import train_test_split
def load_data():
filename="E:/pyhtonworkspace/py3-pratice/bymyself_practice/python_game/Data/Kaggel/digit-recognizer/digit-recognizer/train.csv"
file=open(filename)
data=[]
label=[]
for line in islice(file,1, None):
data_line=[]
line=line.strip().split(',')
for num in line:
data_line.append(int(num))
data.append(data_line[1:])
label.append(data_line[0])
data_mat,label_mat=np.mat(data),np.mat(label).T
#print(data_mat.shape) #(42000,784)
#print(data_mat[:20])
#pri