R语言应用KNN、朴素贝叶斯、SVM实现手写数字识别
R语言应用KNN、朴素贝叶斯、SVM实现手写数字识别
使用Rstudio完成,下载本文绑定资源即可开始实验
一、The MNIST Dataset
在本研究中,我们将研究机器学习中最著名的数据集之一——MNIST(改进型国家标准与技术研究院)数据库。完整数据集包含70,000张0到9的手写数字训练图像。但我们将仅使用其中1,500张的样本。以下代码将加载MNIST数据集:
# Load the dataset
# 加载时注意路径是否正确,注意使用相对路径要求在同一目录下,可以使用print(getwd())查看当前工作路径,下同
load("digit_img.RData")
我们还将加载一些辅助函数以便处理该数据集:
source("digit_utils.R")
现在workspace中包含一个名为digit_img
的变量
digit_img
是一个256×1500的矩阵,其中第一维度是展开的"空间"(即手写数字图像为16×16=256的像素阵列),第二维度是1,500张图像(也就是说一共有1500张图片,每张图片是16*16=256的像素阵列)我们将前1,000张作为训练数据,后500张作为测试数据:
# Get training data
training_data <- t(digit_img[, 1:1000])
# Get testing data
testing_data <- t(digit_img[, 1001:1500])
为帮助理解数据,我们提供了display_digit
函数。例如,查看前100张数字:
display_digit(digit_img[,1:100])
变量digit_lab
是一个长度为1,500的标签向量,表示数字的真实类别(1到9,10代表"零",我们将在下方转换):
# Load the labels
load("digit_lab.RData")
# Replace elements equal to 10 with 0 (it's easier to view this way)
digit_lab[digit_lab == 10] <- 0
可通过display_digit
函数同时查看图像和标签: