R语言对MNIST数据集分析:探索手写数字分类

原文连接:http://tecdat.cn/?p=5246

数据科学和机器学习之间区别的定义:数据科学专一于提取洞察力,而机器学习对预测有兴趣。我还注意到这两个领域截然不同:git

我在个人工做中同时使用了机器学习和数据科学:我可能会使用堆栈溢出流量数据的模型来肯定哪些用户可能正在寻找工做(机器学习),可是会构建摘要和可视化来检查为何(数据科学)。数据库

我想进一步探讨数据科学和机器学习如何相互补充,展现我将如何使用数据科学来解决图像分类问题。咱们将使用经典的机器学习挑战:MNIST数字数据库。网络

面临的挑战是根据28×28的黑白图像对手写数字进行分类。MNIST常常被认为是证实神经网络有效性的首批数据集之一。机器学习

预处理

默认的MNIST数据集的格式有些不方便,但Joseph Redmon已经帮助建立了CSV格式的版本。咱们能够下载它的readr包。ide

library(readr)

library(dplyr)

mnist_raw <- read_csv("https://pjreddie.com/media/files/mnist_train.csv", col_names = FALSE)

该数据集对于60000个训练实例中的每个包含一行,而且对于28×28图像中的784个像素中的每个包含一列。学习

咱们想先探索一个子集。在第一次探索数据时,您不须要完整的训练示例,由于使用子集能够快速迭代并建立概念证实,同时节省计算时间。idea

考虑到这一点,咱们将收集数据,进行一些算术运算以跟踪图像中的x和y,而且只保留前10,000个训练实例。spa

library(tidyr)

pixels_gathered <- mnist_raw %>%head(10000) %>%rename(label = X1) %>%mutate(instance = row_number()) %>%gather(pixel, value, -label, -instance) %>%tidyr::extract(pixel, "pixel", "(\\d+)", convert = TRUE) %>%mutate(pixel = pixel - 2,x = pixel %% 28,y = 28 - pixel %/% 28)

pixels_gathered

## # A tibble: 7,840,000 x 6

## label instance value pixel x y

##

## 1 5 1 0 0 0 28.0

## 2 0 2 0 0 0 28.0

## 3 4 3 0 0 0 28.0

## 4 1 4 0 0 0 28.0

## 5 9 5 0 0 0 28.0

## 6 2 6 0 0 0 28.0

## 7 1 7 0 0 0 28.0

## 8 3 8 0 0 0 28.0

## 9 1 9 0 0 0 28.0

## 10 4 10 0 0 0 28.0

## # ... with 7,839,990 more rows

如今咱们对每一个图像中的每一个像素都有一行。这是一种有用的格式,由于它可让咱们一路上看到数据。例如,咱们能够用ggplot2的几行来可视化前12个实例。3d

探索像素数据

这组图像中有多少灰色?code

ggplot(pixels_gathered, aes(value)) +geom_histogram()

数据集中的大部分像素都是彻底白色的,而另外一组像素则彻底是黑色的,其间相对较少。

这些平均图像称为质心。咱们将每一个图像视为784维点(28乘28),而后分别取每一个维度中全部点的平均值。一种基本的机器学习方法,即最接近质心分类器,会要求每一个图像中最接近它的这些质心中的哪个。

非典型的例子

到目前为止,这个机器学习问题彷佛有点简单:咱们有一些很是“典型”的每一个数字版本。但分类可能具备挑战性的缘由之一是,一些数字将远远超出标准。探索非典型案例颇有用,由于它能够帮助咱们理解该方法失败的缘由,并帮助咱们选择方法和工程师功能。

在这种状况下,咱们能够将每幅图像的欧几里德距离(平方和的平方根)考虑到其标签的质心。

以这种方式衡量,哪些数字平均具备更多的可变性?

ggplot(image_distances, aes(factor(label), euclidean_distance)) +geom_boxplot() +labs(x = "Digit",y = "Euclidean distance to the digit centroid")

为了发现这一点,咱们能够看到与中央数字最不类似的六位数字实例。

两两比较数字

为了检查这一点,咱们能够尝试重叠咱们的质心位数对,并考虑它们之间的差别。

具备很是红色或很是蓝色区域的对将很容易分类,由于它们描述的是将数据集整齐划分的特征。这证明了咱们对0/1易于分类的怀疑:它具备比深红色或蓝色更大的区域。

相关文章
相关标签/搜索