前言
digit recogniser是另一个kaggle入门级别的比赛。这次,我将要介绍一下如何利用机器学习的算法实现图像识别。
在这次比赛里,我们要求训练一个模型从像素数据辨认出图片中的数字。比赛中用到的数据包含:
- label: 从0至9的整数;
- features: pixel001-pixel784, 分别对应28x28图片的每一个像素的位置;
- 每一个像素数据是0-255的整数,用来代表对应该像素点的亮度;
基本思路
我们知道图片是由像素(点)组成的矩阵,越多的像素可以呈现越清晰的画质。每一个像素由0-255的256个整数表示其不同的亮度,因此一个28x28的图片可以用一个28x28的矩阵来表达,矩阵中的数值也就是0-255的整数。然后彩色图片是个三元色的三个图层叠加而来,也就是说对于一个28x28的彩色图片,我们需要用到3x28x28个特征来表示。
这次比赛中所用到的图片是28x28的黑白图片,因此数据提供了784个特征用于模型训练。
了解数据
为了更加直观了解数据,我们可以用R的image语言画出像素数据所表达的图片。
通过像素还原图片
我们从数据中随机提取了100个样本。
display(test[sample(28000,100),],28)
28x28 显示
降维方法1
对于机器学习问题 784 个特征也许有点太多了。通过观察28x28的图片,我们可以发现数字相当的清楚,因此我们也许可以用更低的像素(比如14x14)来表达28x28的图片。通过这样的方法我们可以大幅地减少特征数量 (784 到 196)!
基本思路: