这学期选修了“机器学习”这门课,课程作业是选择并完成Kaggle数据竞赛平台上的一个比赛项目,作为小白的我选择了getting start中的Digit Recognizer手写数字识别作为我的入门项目,下面是我对我的课程作业的记录。
环境配置
python版本:3.7
软件框架:Tensorflow
编辑器:Jupyter Notebook
数据分析:numpy,pandas
可视化工具:matplotlib,tensorboard
问题描述
MNIST是计算机视觉的“hello world”数据集,一个包含手写数字图像的数据集。**这次比赛的目标是用一张手写数字的图像,并确定这个数字是什么,对于每一个测试集,你应该预测正确的标签。**我们根据提供的有标签信息的训练图像集训练出一个机器学习模型,对测试图像集进行标签分类的正确预测。
数据集介绍
在“Digit Recognizer”竞赛提供的数据文件中,可以下载到两个数据集文件,分别为42000个训练图像的数据集(train.csv)和28000个测试图像的数据集(test.csv)。
训练数据集中有785列,第一列称为“label”,即图像对应的数字,其余784列为图像的像素值,784列数值组成一个28×28单通道的灰度图。测试集则不含标签信息。
数据预处理
数据的处理分为以下两部分:
灰度信息:把[0,255]像素范围归一化到[0,1]区间,这样有利后面模型的训练。
标签信息:将标签的数字形式转化为one-hot形式,在多分类问题中常常需要把label转化为one-hot的编码形式。
# 标签转one-hot形式
one_hot_label = pd.get_dummies(data_train['label'])
data_train = data_train.join(one_hot_label)
# 获得图像和标签
predictors=data_train.columns.values.tolist()[1:785]
x_vals=data_train[predictors]
label_list=data_train.columns.values.tolist()[785:]
y_vals=data_train[label_list]
x_test=data_test[predictors]
# 归一化数据 reshape图像
x_train=x_vals.values
x_train=np.float32(x_train/255)
x_train=x_train.reshape(-1,28,28,1)
x_test=x_t