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易於分類的懷疑:它具備比深紅色或藍色更大的區域。

相關文章
相關標籤/搜索